MSP430低功耗问题的理解

在刚开始使用低功耗的时候照葫芦画瓢(好像是LIERDA的一个技术支持工程师给我的例程),喜欢将低功耗的代码写成:

for(;;)

{

_BIS_SR(LPM0_bits);

_NOP();

}

那个GG说这样才能保证低功耗(当时对这个GG十分的佩服,居然比TI的程序员都厉害)。后来仿真才知道,这个循环完全是没有必要的。这是因为低功耗模式和中断唤醒CPU的工作过程是这样子滴:1)低功耗,CPU休眠;2)有中断标志位置位,唤醒CPU;3)执行中断服务程序,至完成;4)退出中断服务,MSP继续进入低功耗,CPU再次休眠,直到下次中断到来。所以MSP根本就没有执行这个循环过程。还是TI的程序是对的。即

_BIS_SR(LPM0_bits);

不过,这个循环还是在某些情况下有用处的,我们可以在中断的结束前加一个人工唤醒CPU的一个本征函数,比如_BIC_SR_IRQ(LPM0_bits);(查查.h文件看看,我记得是这个函数)这让就可以让MSP在退出中断服务后继续执行下面的语句,直到再次循环到_BIS_SR();这条语句。这样还是很有用处的。比如可以使得我的键盘中断函数只处理得到键值的部分,而键盘的功能(其中要用到发送中断)的实现放在_BIS_SR();后面,这样能尽量减少中断的嵌套。

for(;;)

{

_BIS_SR(LPM0_bits);

key_deal();

/* interrupt p1 */

#pragma vector=PORT1_VECTOR

__interrupt void getKeyValue(void)

{

. . .

_BIC_SR_IRQ(LPM0_bits);

}

永不止步步 发表于03-09 09:55 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:383141个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号