MSP430 - 如何将定时器A1中断用于不同目的?

时间:2018-03-02 17:58:12

标签: c timer interrupt msp430

是否可以将定时器A1中断用于不同用途的不同用途?

我收到错误消息,我宣布计时器A1中断,我有重复声明。我的代码具有使用定时器A1的低功耗中断,以及应该使用定时器A1中断的RC充电和放电电路。

是否可能有重复的定时器中断以及如何完成?

1 个答案:

答案 0 :(得分:1)

您可以为定时器A1设置多个捕获和比较寄存器(CCR)。每个应用程序都可以使用它自己然后在处理程序解复用中查看TAIV。来自TI的msp430f1611示例代码:

void __attribute__ ((interrupt(TIMERA1_VECTOR))) Timer_A1 (void)
{
  switch( TAIV )
  {
  case  2: CCR1 += 1000;                    // Add Offset to CCR1
           break;
  case  4: CCR2 += 10000;                   // Add Offset to CCR2
           break;
  case 10: P1OUT ^= 0x01;                   // Timer_A1 overflow
           break;
 }
}

该MCU有三个寄存器:CCR0,CCR1和CCR2。为CCR1,CCR2和定时器计数器溢出(TAR)调用定时器A1中断处理程序。 CCR0由单独的中断处理程序(A0)处理。

不要试图在运行时覆盖中断向量 - 这是一个糟糕的主意。在msp430上,它还需要重新编程(部分)闪存。相反,编写一个处理程序并区分其中的特定于应用程序的逻辑。