我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 780|回复: 0

MSP430省电方式的两种唤醒方法 - 单片机/处理器 - 电子工程

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:32:24 | 显示全部楼层 |阅读模式
<strong>1 MSP430省电方式简介</strong>

MSP430以其低功耗著称于世,它可以外接2个时钟源——XIN、XT2IN,内部还有1个DC0振荡器,可以产生高达8 MHz的内部时钟。一般XT2IN的频率为高频,按实际应用时的要求来选用;XIN为低频,可以是32 768Hz。XIN的用途主要是在低功耗时使系统保持“活着”。MSP430共有5种省电方式,即LPM0~4。其中,

LPM0:CPU、MCLK关闭,SMCLK、ACLK打开,功耗79uA;
LPM1:CPU、MCLK、DCO关闭,SMCLK、ACLK打开,功耗4luA;
LPM2:CPU、MCLK、SMCLK、DC0关闭,DC产生器、ACLK打开,功耗17uA;
LPM3:CPU、MCLK、SMCLK、DC0、DC产生器关闭,ACLK打开。功耗2uA;
LPM4:CPU及所有模块都关闭,功耗0.1 uA。

系统在LPMO-3方式下可以被唤醒,LPM4则不能。大多数应用场合都希望MSP430平时进入睡眠状态,降低功耗,而后定时或被外界中断唤醒,执行相应的程序后再次进入睡眠状态,然后再次被唤醒,其中因为LPM3是满足要求且功耗最低的一种方式,所以它被使用得最多。本文就来讨论这种方式下的睡眠与唤醒。

<strong>2 睡眠与唤醒</strong>

主程序循环运行的流程如图1所示。


<ignore_js_op>





2010-3-24 11:49:15 上传
<strong>下载附件</strong> (8.47 KB)




</ignore_js_op>


每一次循环中都要判断睡眠条件是否成立,若成立则切换时钟,进入睡眠方式。至此,CPU不再执行任何程序,直到CPU被唤醒后才继续执行。唤醒条件可以是定时中断、外部I/O中断,或串行口中断。下面的PowerManagement代码为进入睡眠前后和被唤醒后执行的相应操作。SerialReceiveInterrupt代码为串行口接收到1个字符中断后进行的相应操作,TimerBInterrupt代码为定时器B5定时时间到后进行的相应操作。2个中断程序中,在唤醒CPU之前均将时钟调整到正常工作时的高速时钟源上,设置相应的标志,然后再执行唤醒子程序clrLPM3。编译软件为IAR embedded workbench 1.26。


<ignore_js_op>





2010-3-24 11:49:15 上传
<strong>下载附件</strong> (14.56 KB)




</ignore_js_op>


<ignore_js_op>





2010-3-24 11:49:15 上传
<strong>下载附件</strong> (21.6 KB)




</ignore_js_op>



<strong>3 睡眠时长</strong>

如果睡眠是靠串行口中断来唤醒,则睡眠时长为不定长,什么时候来了中断,什么时候醒来。所以在此只讨论定时器产生中断来唤醒的情况。

定时器B的控制寄存器的说明如图2所示。


<ignore_js_op>





2010-3-24 11:49:15 上传
<strong>下载附件</strong> (4.22 KB)




</ignore_js_op>

图2 定时器B的控制寄存器

CNTLx:计数器长度,00=16位,MSP430定时器B的计数器TBR最大为0xFFFF;01=12位,TBR最大为0x0FFF,10=10位,TBR最大为0x03FF,11=8位,TBR最大为0xFF。

TBSSELx:定时器B的时钟源选择,00=TBCLK,01=ACLK,10=SMCLK,11=INCLK。

IDx:定时器B的时钟源分频因数,00=不分频,01=2分频,10=4分频,11=8分频。

MCx:定时器B的计数方式选择位,00=暂停计数,01=加计数方式,10=连续计数方式,11=加减计数方式。详细内容请参考MSP430的数据手册。

前述程序中定时器B的控制字TBCTL=TBSSEL0+ID0+ID1+MC1+TBCLR。定时器B的时钟源选择为TBSSEL0,该值在MSP430x14x.h头文件中的定义为0x0100,即选择的时钟源为ACLK(32768hz)。ID0在MSP430x14x.h定义为0x40,ID1在MSP430x14x.h定义为0x80,二者相加为0xC0,即定时器B的时钟源为8分频。MC1在MSP430x14x.h定义为0x20,即定时器B采用连续计数方式。

以上时钟选择了ACLK为32 768,再进行8分频,等于4 096,则定时器B的时钟最终运行频率为4 096 Hz,每计1个数所需时间为(1/4 096)S。又由于前面把定时器B5的计数值设为TBR-10=0xFFFF-10=0xFFF0=65 536-10=65 526,则计满65 526数需要的时间为65 526×(1/4 096)s=15.997 s≈16 s。因此,用定时器定时到产生中断作为唤醒源,最大睡眠时间不超过16 S。如果任务不需要这么快执行一次,可以每次醒来后先不去执行任务,而是给1个计数变量加1,然后继续进入睡眠状态,直到计数变量等于想要的时长后再执行。

<strong>结语</strong>

MSP430是一款非常好的低功耗单片机,用好它的省电功能,可以大大延长电池的寿命。因此该产品被广泛地应用于电池供电的工控产品中。本文的代码都是实际应用中的程序代码,经过了实际的检验。

作者:中国国土资源经济研究院 侯志成
来源:单片机与嵌入式系统应用 2009 (4)
回复

使用道具 举报

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

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表