打印

TI Stellaris LM4F 休眠模块指南

[复制链接]
3055|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TI_MCU|  楼主 | 2011-10-20 20:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TI_MCU 于 2011-12-2 13:12 编辑

TI Stellaris LM4F 休眠模块指南

[作者: Richard Ma]
=============================================

如今低功耗要求越来越高,休眠模块越来越有用。Texas InstrumentsStellarisLM4F提供了全新的休眠模块,在使用了RTC时钟的情况下,功耗也可以达到1.7uA。本文将对TI LM4F的休眠模块做一个简单介绍。

1.功能介绍
休眠模块的作用就是停止LM4F的工作,而将有用的数据保存在休眠模块中,以降低能量消耗,并在需要LM4F工作的时候,恢复其工作。

LM4F支持的停止方式有两种
  (1)完全切断供电,即在系统中直接切断MCUVDD供电
  (2)不切断供电,关掉芯片内绝大部分功能,但IO电平保持不变

唤醒LM4F(即恢复LM4F工作)有三种方式,可同时或单独使用:
  (1)唤醒(wake)
  (2)实时时钟(RTC)定时
  (3)低电源

LM4F休眠模块使用了独立与内核的时钟,只要使用到休眠模块,无论是否启用RTC功能,都必须提供独立的32.768kHz时钟(时钟源或晶振)

休眠模块中最重要的几个管脚:
GNDX       休眠模块地端,用法请参考后面电路
VBAT        休眠时外部供电电源
HIB          休眠状态输出
WAKE       休眠唤醒
XOSC0      外部晶振接口/时钟输入
XOSC1      外部晶振接口


==============================

2.工作方式
2.1.
进入休眠
在工作状态下,任何时刻,LM4F可以将需要的数据存入休眠模块,然后进入休眠状态。休眠状态下,休眠模块有一个休眠状态信号输出(HIB管脚),可以控制电源芯片的使能(EN管脚),切断LM4F的供电。当LM4F切断供电后,休眠模块的从外接电源(VBAT管脚)获得电能,外接电源可以是电池也可以是电源芯片中没有被切断的供电脚。

2.2.唤醒
当处理器被唤醒的时候,相当于重新启动(重新初始化),需要判断休眠模块是否启动。若未启动,则说明是正常上电,可以正常进行初始化;若已启动,则是从休眠模式中恢复,需从休眠模块中取回保存的数据,进行处理。

2.3.常见用法
1)LM4F的供电电源  
【电池作为后备电源供电】

        

【直接从电源芯片取电】
         
2) 保留LM4F供电
在这种模式下,芯片IO脚电平会保持不变,芯片进入休眠状态停止工作,等待唤醒。

==============================

3.程序设计
3.1.休眠模块使用
以下部分,展示了设置、使用休眠模块的流程,使用了StellarisWare驱动库。代码只是部分代码。

// =================================================
// Code Begin
// =================================================
// StellarisWare休眠模块驱动头文件
#include
"driverlib/hibernate.h"

void main()
{
    // BBData为需要在休眠时保存的数据
    unsigned long ulBBData=0;
    unsigned long ulStatus;

    // 设置时钟
    SysCtlClockSet(SYSCTL_SYSDIV_4| SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |                     SYSCTL_OSC_MAIN);

    // (1)使能休眠模块。
    // 调用休眠模块的任何函数前,必须保证休眠模块被使能,否则会导致错误。
    SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);

    // (2)判断休眠模块是否被启用。   
   // (2.1)
如果被启用则是从休眠状态唤醒,否则为正常上电启动。
    if(HibernateIsActive())
    {
        // 如果是休眠唤醒,可以查看唤醒源
        ulStatus=HibernateIntStatus(false);

        // 唤醒源为WAKE管脚
        if(ulStatus &HIBERNATE_INT_PIN_WAKE){ … }

        // 唤醒源为RTC
        else if (ulStatus& HIBERNATE_INT_RTC_MATCH_0){ … }

        // 唤醒源为其它
        else{ … }

        // 如果是正常唤醒则从休眠模块读取保存的数据
        HibernateDataGet(&ulBBData,1);
    }

   
// (2.2)如果休眠模块未启用则正常初始化。
    else
    {
        // 初始化
    }

    // (3)关闭休眠模块,进入正常工作。   
    HibernateDisable();


    // (4)正常工作。   
   


    // (5)工作完成,准备休眠。
    HibernateEnableExpClk(SysCtlClockGet());

    // (6)保存数据到休眠模块。
    HibernateDataSet(&ulBBData,1);

    // (7)设置唤醒源。RTCWAKE管脚可单独使用。   
    //
使用RTC模块
    // 首先使能RTC模块
    HibernateRTCEnable();
    // 设置当前RTC(默认RTC会每秒从当前值往上增加1)
    HibernateRTCSet(0);
    // 设置RTC匹配值,当前值与匹配相等时则退出休眠
    // (当前设置为5秒后退出休眠)
    HibernateRTCMatch0Set(5);

    // 使能唤醒源
    HibernateWakeSet(HIBERNATE_WAKE_PIN| HIBERNATE_WAKE_RTC);

    // (8)发送休眠请求。   
    //
LM4F正在进行Flash写操作则会等到操作完成再进入休眠。
    HibernateRequest();

    while(1);
}
// =================================================
// Code End
// =================================================

在执行上面代码时,ulBBData在每次休眠之前都被保存,当被唤醒时从休眠模块中重新读取,在正常执行中继续对数据进行更新修改。整个过程中可以保证数据的连续性和不丢失,同时持续的休眠也节约了电量。

==============================

4. 休眠模块补充说明
4.1.
系统断电与休眠状态
1)正常工作状态下,若突然断电,休眠模块没有启动,重新上电后会正常启动。
2)休眠状态下,若VDDVBAT同时断电,则所有信息丢失,重新上电后会重新正常启动。
3)休眠状态下,若休眠模块(VBAT)供电正常,VDD彻底断开,而唤醒条件被满足,LM4F无法启动。当VDD重新上电,系统将识别为上一次休眠结束(休眠模块仍在工作)

4.2.休眠模块数据保存
当前LM4F休眠模块可以保存的数据为1632-bit数据(根据不同的器件这个数字可能有差异),HibernateDataSet中第一个参数是要保存数据的地址,第二个参数是长度。休眠模块保存数据也是需要电源的,VDDVBAT任一都可以提供;若VDDVBAT同时移除,保存的数据将丢失。

TI Stellaris LM4F 休眠模块指南.pdf

504.42 KB

相关帖子

沙发
weshiluwei6| | 2012-5-9 17:15 | 只看该作者
好东西 支持啊

使用特权

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

本版积分规则

0

主题

420

帖子

7

粉丝