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.

这个430的中断是怎么进行的?

这个430的中断是怎么进行的?

#include "msp430x14x.h"

void main( void )

{

WDTCTL = WDTPW + WDTHOLD;

P2DIR |=BIT0;

_EINT();

TACCTL0=CCIE;

CCR0=500;

TACTL=TASSEL_2 + MC_1;

LPM0;

}

#pragma vector=TIMERA0_VECTOR

__interrupt void TIMER_A(void)

{

P2OUT ^=BIT0;

CCR0+= 500;

}

这是一个通过TIMERA来让 LED闪烁的程序

现在有些不明白中断是怎么进行的

TACTL=TASSEL_2 + MC_1; 这个是TIMERA的UP模式 当计数器记到CCR0时引发中断进入中断服务程序

但是返回时 是到哪?是继续执行 TACTL=TASSEL_2 + MC_1;?

还有为什么我删去 LPM0;这句 程序就跑不通了?

  • 按照这个程序,LPM0是让CPU进入低功耗,被中断唤醒时去执行中断,返回时仍回到休眠状态,除非用”__bic_SR_register_on_exit(CPUOFF);“来退出休眠,回到休眠前的下一个PC。

    去掉LPM0跑不通是因为程序跑飞了,因为没了LPM0,程序PC会继续向下移,对于这个程序,就是进入非用户程序代码区域了,如果不休眠,可以用死循环让其不跑飞。