您好:我在使用430F149的芯片时,写了一段代码,void main()
{
WDTCTL=WDTPW+WDTHOLD;
.
.
_EINT();
LPM0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void xx(void)
{
P2OUT^=0XFF;
}
大体就是这样,我的意思就是,我在main函数里面,设置了进入低功耗模式0,然后由定时器触发中断函数,然后进入中断里面执行里面的代码,但是我疑惑的就是在中断里面我没有让CPU退出低功耗模式0呀,意思就是CPU还在休眠,只不过有SMCLK作为时钟信号输入的,为什么它还能执行里面的代码?中断函数里面的代码“异或”逻辑运算难道不用CPU去执行吗?是不是执行中断函数的时候不用CPU也能处理,但是又讲不通呀,所有的逻辑以及数值运算它都得经过CPU处理呀?这就是我的疑问,麻烦您帮我解答。十分感谢!
Young Hu:
SMCLK是作为TimerA的时钟信号? 在LPM0下,CPU和MCLK是disable的,但是SMCLK和ACLK是使能的。在main函数中,有TimerA的初始化,所以就设定了TimerA的工作方式。在CPU休眠的时候,TimerA还是工作的,代码是不执行的!
JSW-PengBo:
回复 Young Hu:
中断发生后唤醒了CPU
mico mico:
回复 JSW-PengBo:
谢谢你们的回答,是不是在进入中断后会强制性唤醒CPU执行中断里面的代码?执行完之后在继续让CPU保持之前的状态????
Young Hu:
回复 mico mico:
进入中断程序后,PC和SR会保存在堆栈中,CPUOFF,SCG1,OSCOFF等位自动置为0,CPU就会被唤醒。
可以在while循环中,加入LPM0;
建议你看一下User's Guide的第二章,会很清楚的!
Peter_Zheng:
回复 Young Hu:
timer 在lpm0下能够响应中断,响应中断后唤醒cpu执行中断断码,然后再进入lpm0