我正在尝试在 MSP430FR2676上设置多个计时器。 我知道它有两个定时器:A 和 B。我已经能够成功运行示例代码(见下文)。 但是、我希望能够运行4个单独的计时器来切换4个单独的 LED。 我正在尝试使用带有单独 TB0CCTLn 寄存器的计时器 B 对其进行设置。 我知道每个单独的 TB0CCTLn 寄存器都有一个单独的计数用来产生中断。 在如何识别中断函数中何时发生单独的中断方面、我有点困惑。 是否有寄存器可读取哪个中断触发了事件? ~、我知道发送 TB0CTL &= 1 μ s MC 会停止整个计时器 B。但是、是否有办法可以停止单个 TB0CCTLn 计数以便通过软件停止每个单独的 LED 计时器?
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
// Configure GPIO
P1DIR |= BIT0; // P1.0 output
P1OUT |= BIT0; // P1.0 high
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
TA0CCTL0 |= CCIE; // TACCR0 interrupt enabled
TA0CCR0 = 50000;
TA0CTL |= TASSEL__SMCLK | MC__CONTINUOUS; // SMCLK, continuous mode
__bis_SR_register(LPM0_bits | GIE); // Enter LPM0 w/ interrupts
__no_operation(); // For debug
}
// Timer A0 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) Timer_A (void)
#else
#error Compiler not supported!
#endif
{
P1OUT ^= BIT0;
TA0CCR0 = 50000; // Add Offset to TACCR0
}