ZHCABH5B December 2011 – February 2022 MSP430G2112 , MSP430G2152 , MSP430G2212 , MSP430G2252 , MSP430G2312 , MSP430G2352 , MSP430G2412 , MSP430G2452
要在单个计时器模块上实现多个频率,计时器 ISR 中只需确定触发中断的 TxCCRx 计数并将相应周期一半的计时器计数加到当前 TxCCRx 值上。之所以加上该周期的一半,是因为每次计数达到 TxCCRx 值,输出都会进行切换,因此需要经过两次中断,一个完整周期才会结束。以下代码显示了 multi_freq_g2452_example.c 文件中的计时器 ISR:
// Timer_A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
TACCR0 += 100; // reload period
}
// Timer_A1 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TA0IV )
{
case 2: TACCR1 += 200; // reload period
break;
case 4: TACCR2 += 500; // reload period
break;
case 10: P1OUT ^= 0x01; // Timer overflow
break;
default: break;
}
}
此示例显示了从 1MHz 计时器时钟源生成 5kHz、2.5kHz 和 1kHz 信号的 ISR(请参阅Equation4)。