最近在做MSP430的低功耗设计,看了匠人的博客,很有收获。不过还有些问题:
在我看的一本书里面,低功耗是这么做的:
main()
{
...
...
for(;;)
{
_BIS_SR(LPM3_bits);
_nop();
}
}
#pragma vector=PORT1_VECTOR
__interrupt void getKeyValue(void)
{
P2OUT^=0x01;
}
可以看到,在主程序中,有一个for循环,里面基本上没什么操作。就是进入到低功耗模式。按照我的理解,进入到低功耗模式后,CPU便停在那个地方等待中断,当有中断的时候,进入中断。
我不太明白的是:程序在什么时候唤醒中断?是不是还要有专门的唤醒的函数?还是中断后自动便把CPU唤醒了?
我的理解是,中断发生后,便自动把CPU唤醒。在我以上的程序中,进入中断后对P2.0取反,然后退出中断,回到主程序,但是因为主程序中是一个无限循环for,因此这时候又会再次进入低功耗模式。
还有一个不太明白的是:既然CPU碰到LPM4这样的句子就会停止CPU的话,如果在中断服务函数里写上那个句子,会不会使得CPU始终停留在那个中断服务函数里?
还请各位大神指点指点。 |