2462|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430F169单片机编程基础——(三)LPM超低功耗模块 [复制链接]

三、LPM超低功耗模块

    Low Power Module
    MSP430系列单片机是一个特别强调低功耗的单片机系列,尤其适用于采用电池长时间供电的工作场合。
    MSP430 应用系统价格和电流消耗等因素会影响 CPU 与外围模块对时钟的需求,所以系统所使用不同的时钟信号:ACLK,MCLK,SMCLK。用户可以通过程序可以选择高频和低频,这样可以根据实际需要来选择适合的系统时钟频率,从而合理的利用系统的电源,实现整个系统的超低功耗。
    MSP430系统提供丰富的软硬件组合形式,能够达到最低功耗并发挥最优的系统性能。

    低功耗是 MSP430 单片机一个最显著的特点。MSP430 的丰富的时钟源使其能达到最低功耗并发挥
最优系统性能。用户可通过实际需要选择不同的时钟源(ACLK、MCLK 和 SMCLK) ,从而实现整个系统
的超低功耗。

    当系统时钟发生器基本功能建立之后,状态寄存器 SR 中的 SCG1、SCG0、OscOff 和CPUOff 是重
要的低功耗控制位。只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理后,又可恢复先前工
作方式。
    在中断处理子程序中可以间接访问堆栈数据从而修改这些控制位;在中断返回后单片机会以另一种功
耗方式继续运行。各控制位的功能如下:
    SCG1: 当SCG1复位时,使能SMCLK;
           当SCG1置位时则禁止SMCLK。
    SCG0: 当SCG0复位时,直流发生器被激活;
           只有当SCG0置位且DCOCLK信号未用于MCLK或 SMCLK,直流发生器才被禁止。
         (编者按:直流发生器为BCS中的 DC Generator,也有翻译成数控发生器)
    注意:当电流关闭时(SCG=0) ,DCO的下次启动会有一些微秒级的延迟。
    OscOff:当 OscOff 复位时,LFXT晶体振荡器被激活;
            当OscOff 被置位且不用于MCLK或 SMCLK,LFXT 晶体振荡器才被禁止。
    CPUOff:当 CPUOff 复位时,用于CPU 的时钟信号MCLK被激活;
            当CPUOff置为,MCLK停止。


    MSP430 可工作在一种活动模式(AM)和五种低功耗模式(LPM0~LPM4)下。通过软件设置控制位
SCG1、SCG0、OscOff 和 CPUOff,MSP430 可进入相应的低功耗模式。各种低功耗模式又可通过中断
方式返回活动模式。不同的工作模式耗电情况不同,具体如下表所示:


    由上图可以看出,由 AM  LPM4 模式单片机工作电流成倍下降。担不同工作模式对 CPU 状态、振荡器及
时钟的活动状态不同。具体如下表所示。

         

■  最大化LMP3的时间,用32.768KHZ 晶振作为 ACLK时钟,DCO用于CPU 激活后突发短暂运行。
■  用接口模块代替软件驱动功能。
■  用中断控制程序运行。
■  用可计算的分支代替标志位测试产生的分支。
■  用快速查表代替冗长的软件计算。
■  避免频繁的子程序和函数调用。
■  在必要时才开启外围模块。
进入LPM0模式,可以通过调用__low_power_mode_0();函数来完成。
进入LPM1模式,可以通过调用__low_power_mode_1();函数来完成。
进入LPM2模式,可以通过调用__low_power_mode_2();函数来完成。
进入LPM3模式,可以通过调用__low_power_mode_3();函数来完成。
进入LPM4模式,可以通过调用__low_power_mode_4();函数来完成。
退出LPM 模式,则调用__low_power_mode_off_on_exit();来实现。

低功耗范例程序

#include

// P1 中断服务子程序
#pragma vector = PORT1_VECTOR
__interrupt void P1_IRQ(void)
{
  P1IFG = 0;                         // 清除P1中断标志
  __low_power_mode_off_on_exit();    // 退出低功耗模式
}

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;          // 关闭看门狗
  P1DIR &= BIT0;                     // P1.0输入(can't understand it)
  P1IE  |= BIT0;                     // P1.0设置为中断允许 (can't understand it)
  P1IES |= BIT0;                     // P1.0设置下降沿触发中断
  _EINT();                           // 开总中断

  while(1)
  {
    _NOP();                          // 空语句
    __low_power_mode_0();            // 进入LPM0模式
    // 当程序执行到上述语句后, 程序会停止到该语句, 并进入低功耗状态
    // 当P1.0出现下降沿的时候, 在P1的中断服务子程序退出低功耗模式
    // 则会再次运行_NOP();语句, 然后在进入底功耗
  }
}

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表