gpt4 book ai didi

c - 调试器关闭后的 MSP430 中断问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:32 26 4
gpt4 key购买 nike

我正在使用以下代码通过定时器中断使 LED 闪烁:

#include <msp430.h>

#define LED1 BIT0 //define LED1 as bit 0 (0x00)
#define LED2 BIT6 //define LED2 as bit 6 (0x40)

int main(void)
{
//stop watchdog timer
WDTCTL = WDTPW | WDTHOLD;

//P1 initialization code
P1OUT &= 0x00; //clear all bits on P1
P1DIR |= (LED1|LED2); //set P1.0 and P1.6 to output direction

//Timer_0A3 initialization
TA0CCR0 = 12e3; //count limit (16 bit)
TA0CCTL0 = 0x10; //enable counter interrupts, set bit 4 high
TA0CTL = TASSEL_1 + MC_1; //Timer A0 with ACLK @ 12KHz (TASSEL_1), count UP (MC_1)


//low power mode
_BIS_SR(LPM0_bits + GIE); //LPM0 (low power mode) with interrupts enabled
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void) //service routine for Timer0 A0 interrupt
{
P1OUT ^= (LED1|LED2); //toggle P1.0 using exclusive-OR
}

猜猜看,它有效!但只有当我运行调试器时。当我关闭调试器时,它停止了它正在做的事情,当时点亮的 LED 仍然点亮。重置板根本没有帮助。

在网上进行一些研究后,我尝试转到 Tools -> Debugger Options -> MSP430 Debugger Options -> Clock Control 取消选中相应计时器的复选框。我有这些选项:[]ACLK []SMCLK []TACLK。我已经尝试了检查/取消检查的每一种组合,但似乎没有任何东西可以让我的中断在调试器停止运行后起作用。

如果非要我猜的话,我会说定时器正在运行,但不知何故中断标志没有正确设置。知道这里发生了什么吗?

最佳答案

在中断处理程序中清除定时器中断标志:

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void) //service routine for Timer0 A0 interrupt
{
TA0CTL &= ~TAIFG; // Reset interrupt
P1OUT ^= (LED1|LED2); //toggle P1.0 using exclusive-OR
}

关于c - 调试器关闭后的 MSP430 中断问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com