TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F5438A: 定时器B,捕捉计数的问题

Part Number:MSP430F5438A

程序目的:捕捉的信号是P4.0,上下沿都捕捉,并且产生中断信号,当捕捉到P4.0的上升沿时,把此刻的P4.7输入的方波信号的计数值保存起来

void TIMEB_init( void )

       //P4.7 为时钟输入,P4.0为上下沿捕捉
      TB0CTL = TBSSEL_0 + ID_0 + TBCLR ; //TB0CLK输入,不分频,自动清0和分频参数

      TB0CCTL0 = CM_3 | CAP | CCIE | CNTL_0 | CCIS_0 ;
                        //上下沿捕捉,捕捉模式,有中断, 16位模式,P4.0输入,必须是异步捕捉

       //P4.0 :1K频率的方波输入
      P4DIR &= ( ~BIT0 ); // P4.0 input
      P4SEL |= BIT0 ; // P4.0 配为TB0.0输入

      / /P4.7 : 156K的信号计数输入
     P4DIR &= ( ~BIT7 ); // P4.0 input
     P4SEL |= BIT7 ; // P4.7 配为 TB0CLK 输入

     TB0CTL |= MC_2 ; //增计数模式,到65535

     TB0R = 0 ; //初始化计数值

}

下面是P4.0信号的中断程序,下面是中断程序的两种写法,请问:有什么不同,都可以正确运行吗?

///////////////////////////////////////////// 第一种写法  /////////////////////////////////////////////////////

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0CCR0 ; //保存数据,采用了捕捉寄存器
       }else{                                  //捕捉到低电平
              TB0CTL |= TBCLR ;   //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

///////////////////////////////////////////// 第二种写法  /////////////////////////////////////////////////////

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0R ;   //保存数据,采用了计数寄存器,而不是捕捉寄存器
       }else{                                      //捕捉到低电平
              TB0CTL |= TBCLR ; //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

///////////////////////////////////////////// 测试结论  /////////////////////////////////////////////////////

我测试时,发现,第一种写法,有时计数不正确,误差会有3个方波左右,计数出错时,往往是输入的时钟信号,发生跳变的时候,这时刚好进入中断。

user5125120:

请问:定时器捕捉计数,P4.7作为TIMER_B的时钟输入,捕捉P4.0的上升沿和下降沿,目的是对P4.0的下降沿的时间,进行计数,请问上述中断程序写法,应该用TB0CCR0,还是用TB0R的寄存器值,请指教,谢谢

,

Cherry Zhou:

您好您的另一个问题和这个类似是吗?

https://e2echina.ti.com/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/217598/msp430f5438a-b

我会将您的两个问题整理到一个英文帖子中,这样方便工程师一起回复您的问题。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5438A: 定时器B,捕捉计数的问题
分享到: 更多 (0)