This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我正在尝试使用中断来测试计时器 A、以打开 LED
如果没有任何帮助、我们将不胜感激
void main (void){
WDT_A_HOLD (WDT_A_base);//禁用看门狗
PM5CTL0 &=~LOCKLPM5;
P1DIR |= BIT0;
TA0CTL = tassel_1 + MC_Continuous+ ID_8;
TA0CTL = TAIE_1;
TA0CTL = TAIFG_0;
enable_interrupt ();
}
#pragma vector = TIMER0_A0_vector
_interrupt void TIMERA_ISR (void){
P1OUT |= BIT0;
}
您好 Steven、
您需要执行一些操作。
首先、在代码中选择 tassel_1、即 ACLK。 这在你分配了一个适当的时钟源来驱动 ACLK 时一样正常。
在下面的示例中、我选择了 SMCLK 以使其保持简单。
接下来、由于您要查找计时器溢出、因此需要使用 TIMER0_A1_VECTOR、而不是 TIMER0_A0_VECTOR、后者被分配给计数/比较 CCR0。 以下是 MSP430FR5994用户指南中的一段内容。
接下来、您应该阻止代码从 main 中退出、以便可以使用 while (1)。
最后、我在中断处理程序中切换 LED。
我在 MSP430FR5994 Launchpad 上对此进行了测试。
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM5;
P1DIR |= BIT0;
TA0CTL = tassel_2 | MC__Continous | ID_8;
TA0CTL &=~(TAIFG_0);//清除 IFG
TA0CTL |= TAIE_1;//设置 IE
enable_interrupt ();
while (1);//阻止代码退出 main
}
#pragma vector = TIMER0_A1_vector
_interrupt void TIMERA_timer_overflow_ISR (void){
P1OUT ^= BIT0;//切换 LED
}