MSP430FG4619 Timer A0 中断问题!

2019-03-24 14:31发布

我很郁闷,连续试了几个sample code都有问题
我的程序:

void main( void )
{
  volatile unsigned int i;
    // Stop the watchdog timer so it doesn't reset our chip
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  _BIS_SR(OSCOFF + SCG0 + GIE);
  SCFI0|=FN_8;
  FLL_CTL0 |= OSCCAP0+DCOPLUS;                     // set oscillator capacitance   
  do
  {
      IFG1 &= ~OFIFG;                     // Clear oscillator fault flag
      for ( i=50000; i==0; i--);           // Delay
  }
  while (IFG1 & OFIFG);                   // Test osc fault flag                                     // DCO to stabilize.
   __delay_cycles( 1000 );

  TACCTL0 = CCIE;                             // TACCR0 interrupt enabled
  TACCR0 = 2000;
   TACTL = TASSEL_2 + MC_1+ID_3+TAIE;                  // SMCLK, up mode
    _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
    while(1);
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  timer++;
}
问题是无法进入中断,timer这个变量始终为0,很简单一个程序出现这个问题我真不知道哪错了,请高人指点! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
wangfuchong
1楼-- · 2019-03-25 16:57
timer在哪里声明的?

中断服务程序少一个吧?默认不写也行?
lyzhangxiang
2楼-- · 2019-03-25 18:16
我以F5xx为例说明:
#define TIMER1_A1_VECTOR    (48 * 2u) /* 0xFFE0 Timer1_A3 CC1-2, TA1 */#define TIMER1_A0_VECTOR    (49 * 2u) /* 0xFFE2 Timer1_A3 CC0 */
默认TA1和CCR0不是同一个中断向量。
第一次来的是CCR0中断,往后CCR0+1的时候来TA中断,所以你的程序中断进不去,为什么这么说呢。默认不写的情况可以理解为程序跑飞了。
你干脆可以这么理解,程序进入中断后自动关闭中断。所以不管是跑飞还是什么情况都无法再次进入中断了。没有服务函数啊,老大。
fuchong兄已经说明问题所在了。
smartygt
3楼-- · 2019-03-25 23:15
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章