打印

MSP430低功耗问题的理解(转)

[复制链接]
1161|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
msp430ing|  楼主 | 2011-4-30 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在刚开始使用低功耗的时候照葫芦画瓢(好像是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);
}

相关帖子

沙发
3B1105| | 2011-4-30 17:54 | 只看该作者
收藏了!

使用特权

评论回复
板凳
FVJFIFE| | 2011-4-30 17:59 | 只看该作者
mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

730

帖子

1

粉丝