4380|6

19

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于MSP430FR4133低功耗的问题 [复制链接]

本人刚接触430,这段时间在弄它的低功耗模式,但是看了好多资料,对低功耗模式的进入以及退出没有一个清晰的思路,哪位前辈能简单说一下思路呢?

最新回复

为什么我进入低功耗模式,电流一直降不下来 ?各位大神指点迷津  详情 回复 发表于 2017-9-15 10:26
 
点赞 关注

回复
举报

9794

帖子

24

TA的资源

版主

沙发
 
在你需要让单片机休眠的时候执行休眠指令,例如
  1.   __bis_SR_register(LPM3_bits);       // Enter LPM3
复制代码
这时单片机就进入了休眠模式,在需要唤醒的时候执行唤醒指令,例如
  1.     __bic_SR_register_on_exit(LPM3_bits);   // Exit active CPU
复制代码
这时单片机就进入正常模式,当你再需要休眠时重复上边的动作。

唤醒单片机一搬通过中断唤醒,比如外部I/O中断,定时器中断,ADC中断等等。




 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
本帖最后由 qiushenghua 于 2015-12-9 18:00 编辑

在进入低功耗模式之前,请先将总中断打开,就是下面这条指令:
_EINT();
对应的关闭总中断是
_DINT();

开了中断之后进入低功耗模式才有机会唤醒执行其它的语句。不然后面的程序都无法运行了。

进入低功耗模式的语句更简单:
LPM0;
上面这句就是一个例子,根据需要的低功耗等级,对应使用LPM0到LPM4都行,其中LPM0和LPM3最常用了。

退出低功耗模式一样简单:
LPM0_EXIT;

估计这些语法问题不是楼主想问的,我猜楼主想问的是进入低功耗模式之后程序会怎么运行。

我们知道,进入低功耗模式之后,CPU是一定被关闭了的,但是外设继续运行。

这个时候如果开启了全局中断,那么中断会在符合要求的情况下自动唤醒CPU,如果在中断服务里面没有退出低功耗模式的语句,那么执行完中断服务之后会重新进入原来的低功耗模式

如果是进入低功耗模式之后,只需要执行中断服务,那么可以不退出低功耗模式,也无需主循环那个while(1)语句。但是不建议在复杂系统中使用这样的设计。

比较推荐的方式是下面这种:
while(1)
{
LPM0;
if(state==1)do_something();
if(state==2)do_something_else();

}

某个中断服务()
{
if(满足某些条件){LPM0_EXIT;state=1;}
}


另一个中断服务()
{
if(满足某些其他条件){LPM0_EXIT;state=2;}
}

这样能够很好控制程序的运行方式。当然,也不是说一定要用state这个变量作为进入do_something或者do_something_else的判断依据。
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

4
 
qiushenghua 发表于 2015-12-9 17:05
在进入低功耗模式之前,请先将总中断打开,就是下面这条指令:
_EINT();
对应的关闭总中断是
_DINT();
...

首先非常感谢你的详解,非常直白易懂,基本上知道怎么一回事了。现在对你最后的例句有一个疑问,就是说程序刚进入while(1)就进入了LPM0低功耗模式,此时程序是否不再往下执行,只等待中断来唤醒?另外,在低功耗模式的时候来了一个中断,唤醒了CPU,此时中断程序执行完毕,state已经被赋值,跳出中断的时候程序是如何运行的?是从之前进入低功耗模式语句的后面一条if..............,还是从头开始,又进入了低功耗模式?那么这样的话岂不是没法执行到下面的if条件判断语句?还是需要将低功耗模式开启语句放在while循环的最后面?也就是这样
while(1)
{
if(state==1)do_spmething();
if(state==2)do_spmething_else();
LPM0;
}

点评

退出低功耗模式之后,程序会从进入低功耗模式那条语句的下一条语句开始继续执行。 也就是说,每个循环周期先进入LPM0,中断执行完退出之后会从第一个if开始运行,如果满足条件运行第一个函数,不满足条件就再判断  详情 回复 发表于 2015-12-9 17:57
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

5
 
什么鬼 发表于 2015-12-9 17:52
首先非常感谢你的详解,非常直白易懂,基本上知道怎么一回事了。现在对你最后的例句有一个疑问,就是说程 ...

退出低功耗模式之后,程序会从进入低功耗模式那条语句的下一条语句开始继续执行。

也就是说,每个循环周期先进入LPM0,中断执行完退出之后会从第一个if开始运行,如果满足条件运行第一个函数,不满足条件就再判断第二个if。
跑完一轮之后,该执行的东西都执行完了,可以安心再次进入低功耗模式了。
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

6
 
qiushenghua 发表于 2015-12-9 17:57
退出低功耗模式之后,程序会从进入低功耗模式那条语句的下一条语句开始继续执行。

也就是说,每个循环 ...

非常感谢,现在明白了!谢谢!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

7
 
为什么我进入低功耗模式,电流一直降不下来 ?各位大神指点迷津
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表