MSP430 - 如何将定时器 A1 中断用于不同目的?
MSP430 - how to use timer A1 interrupts for different purposes?
是否可以将定时器 A1 中断用于不同目的的不同线路集?
我收到错误消息,指出我正在声明定时器 A1 中断,我有重复的声明。我的代码有一个使用定时器 A1 的低功耗中断,以及一个应该使用定时器 A1 中断的 RC 充电和放电电路。
是否可以有重复的定时器中断,如何实现?
定时器A1可以设置多个捕获比较寄存器(CCR)。每个应用程序都可以使用自己的。然后在处理程序中通过查看 TAIV
进行多路分解。来自 msp430f1611 的 TI 示例代码:
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有3个寄存器:CCR0、CCR1、CCR2。为 CCR1、CCR2 和定时器计数器溢出 (TAR
) 调用定时器 A1 中断处理程序。 CCR0 由单独的中断处理程序 (A0) 处理。
不要试图在运行时覆盖中断向量——那是个糟糕的主意。在 msp430 上,它还需要重新编程(部分)闪存。相反,编写单个处理程序并区分其中的 application-specific 逻辑。
是否可以将定时器 A1 中断用于不同目的的不同线路集?
我收到错误消息,指出我正在声明定时器 A1 中断,我有重复的声明。我的代码有一个使用定时器 A1 的低功耗中断,以及一个应该使用定时器 A1 中断的 RC 充电和放电电路。
是否可以有重复的定时器中断,如何实现?
定时器A1可以设置多个捕获比较寄存器(CCR)。每个应用程序都可以使用自己的。然后在处理程序中通过查看 TAIV
进行多路分解。来自 msp430f1611 的 TI 示例代码:
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有3个寄存器:CCR0、CCR1、CCR2。为 CCR1、CCR2 和定时器计数器溢出 (TAR
) 调用定时器 A1 中断处理程序。 CCR0 由单独的中断处理程序 (A0) 处理。
不要试图在运行时覆盖中断向量——那是个糟糕的主意。在 msp430 上,它还需要重新编程(部分)闪存。相反,编写单个处理程序并区分其中的 application-specific 逻辑。