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.

系统运行越来越慢



#include <msp430.h>

void SetHC(unsigned char BCD,unsigned char SEG){
//这里是SPI代码
}


int main(void)
{

//初始化配置
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL2 = SELM_0 | DIVM_0 | DIVS_3;
DCOCTL = 0x00;
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;
BCSCTL1 |= XT2OFF | DIVA_3;
BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;
TA0CCTL0 = CCIE;
CCR0 = 1023;
TACTL = TASSEL_1 + ID_2 + MC_1 + TAIE;
USICTL0 |= USISWRST;
USICTL0 = USIPE6 + USIPE5 + USIMST + USIOE + USISWRST;
USICTL1 = USIIE + USIIFG;
USICKCTL = USIDIV_7 + USISSEL_2 + USICKPL;
USICTL0 &= ~USISWRST;
P1SEL = BIT5 + BIT6;
P2DIR = BIT0

for(;;){

//这里填满了SetHC(x,x);
}

}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR_HOOK(void)
{
//有几行定时器函数
_bic_SR_register_on_exit(LPM3_bits);
}


#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR_HOOK(void)
{
//溢出中断(用不上,ULP推荐写)
_bic_SR_register_on_exit(LPM3_bits);
}

#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
__bic_SR_register_on_exit(LPM1_bits);
USICTL1 &= ~USIIFG;

}

运行一段时间后,就死机了,表现为代码不往下执行,用JTAG看,停在一个中断(TIMER0_A0_ISR_HOOK)里面.TA0IV = 0X00;其他中断标记也没有.

求解,MCU:G2452 USI

  • 运行一段时间死机,查看一下中断堆栈是否有溢出,程序进入死循环等情况。还有就是进入低功耗后,退出机制是否能有效运行。打个比方在A0里退出低功耗,但是低功耗把A0的时钟关掉了,就不能进入A0中断也就不能通过A0中断里的语句退出低功耗了。

  • 中断咋那么多?是不是你的片都在中断,没空执行别的了?一个一个添加测试。别一下塞的满满的,不容易查问题!