关于定时器通道的问题

2019-03-24 09:00发布

我使用的是MSP430G2553,我希望使用定时器TimerA0通道1的中断,按照用户手册所说,为了设定定时时间,应该设置TACCR1,并在中断中根据TAIV来判断是否是TACCR1导致的中断。但是我在实验过程中发现,设置TACCR1并不能进入TIMER0_A1_VECTOR对应的中断,而设置TACCR0可以进入中断,而且这时竟然可以出现TAIV = 0x02的情况,即手册上所说的TACCR1导致的中断。
  1. #include <msp430.h>

  2. /*
  3. * main.c
  4. */
  5. int main(void) {
  6.     WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
  7.     //========设置系统时钟==========
  8.     BCSCTL1 = CALBC1_1MHZ;
  9.     DCOCTL = CALDCO_1MHZ;
  10.     BCSCTL2 |=LFXT1S1;
  11.     //========设置定时器==========
  12.     TA0CTL |= MC_1 + ID_0 + TASSEL_2;
  13.     //MC_1 : 增计数模式
  14.     //ID_0 :输入1分频
  15.     //TASSEL_2 : 输入时钟为SCLK
  16.     TA0CCTL1|= CCIE;//使能比较中断
  17. //   TA0IV = 0x02;
  18.         TA0CCR0 = 10000;//设置比较值

  19. //    TA0CCR1 = 10000;//设置比较值
  20.     _enable_interrupts();
  21.     while(1);
  22. }


  23. //中断服务程序
  24. #pragma vector=TIMER0_A1_VECTOR//固定的格式
  25. __interrupt void Timer_A (void) //定时器A的CC0中断处理程序 必须是没有返回值的
  26. {
  27.     static unsigned int timer = 0;

  28.     switch(TA0IV){
  29.     case 0x02:
  30.         if(timer++ > 100){
  31.             timer = 0;
  32.             P1DIR |= BIT0;
  33.             P1OUT ^= BIT0;
  34.         } break;
  35.     default:
  36.         _nop();
  37.     }
  38.     _nop();
  39. }
复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
ydgpmachine
1楼-- · 2019-03-24 14:33
                                                   
火火山
2楼-- · 2019-03-24 19:15
< :TI_MSP430_内容页_SA7 --> 你需要看看,中断的向量对应好没有,TIMERA0 和 TIMERA1 的中断向量是不一样的,如图所示:
如果你说主要改一个就可以进入中断,那感觉有可能是这个问题

捕获3.PNG

一周热门 更多>

相关问题

    相关文章