嵌入式(八)电源低功耗管理 | 五种运行模式 模式转换 睡眠定时器唤醒

本文介绍了嵌入式系统中的低功耗策略,重点讲解了CC2530的五种运行模式(包括主动模式、空闲模式、PM1、PM2和PM3),以及如何通过SLEEPCMD和PCON寄存器进行模式设置。详细描述了睡眠唤醒方式,包括复位、外部中断和睡眠定时器,并给出了实际的代码示例以实现系统睡眠和定时器唤醒。
摘要由CSDN通过智能技术生成

1 低功耗基本介绍

对于嵌入式系统而言,一个非常重要的内容就是低功耗,尽可能减少电量损耗,然后获得更多的续航时间

当然功耗越低,被关闭的功能也就越多

1.1 五种运行模式

CC2530有5种不同的运行模式(供电模式):

分别为主动模式、空闲模式、PM1、PM2 和PM3。

越靠后,被关闭的功能越多,功耗也越低,PM3具有最低的功耗。

在这里插入图片描述

运行的影响如表8.1所示,其中还给出了稳压器和振荡器选择。

主动模式是一般模式。主动模式:完全功能模式。稳压器的数字内核开启,16MHz RC振荡

器或32MHz晶体振荡器运行,或者两者都运行。32kHz RCOSC振荡器或32kHz XOSC运行。

空闲模式:除CPU 内核停止运行(即空闲外),其他功能和主动模式一样。

PM1:高频晶振(16MHz或32MHz)关闭,低频晶振(32.768kHzRCOSC/XOSC)工作,数字核心模块正常工作。

PM2:低频晶振(32.768KHz RCOSC/XOSC )工作, 数字核心模块关闭,系统通过 RESET,外部中断或睡眠计数器溢出唤醒。

PM3:晶振全部关闭,数字核心模块关闭,系统只能通过 RESET 或外部中断唤醒。

2 低功耗控制相关寄存器

睡眠模式控制寄存器SLEEPCMD

​ 可以设置我们刚刚讲到的那五种睡眠模式

供电模式控制寄存器PCON

​ 设置睡眠模式之后,还要设置供电模式

睡眠计数器STx,

​ 通过设置STx可以设置睡眠的时间长短

读睡眠定时器读的流程为:读ST0→读ST1→读ST2。

3 睡眠唤醒实现方式

从PM1和PM2唤醒可以通过三种方式:复位、外部中断和睡眠定时器,

从PM3唤醒可以通过两种方式:复位和外部中断。

对于复位方式,进行系统的复位,即RESET来唤醒即可,不涉及到编程。

所以编程主要涉及到外部中断和睡眠定时器唤醒

对于睡眠定时器方式,涉及到ST2、ST1和ST0寄存器。首先从这三个寄存器中读取到当前定时器的计数值,接着对该计数值进行修改(表示睡眠的时长),最后将该修改后的计数值写入到三个寄存器中,使定时器能够进行比较。对于该种方式,首先要明白,寄存器和定时器是两个独立的东西,当不读ST2、ST1和ST0寄存器时,其中始终保存一个比较值,当定时器值与寄存器值相等时发生中断,而定时器的值会在正边沿时进行一次更新。当读ST2、ST1和ST0寄存器时,会自动获取24位定时器的值

对于外部中断模式,需要根据选择的外部中断方式编写中断函数,在中断函数中,对标志位进行清零,最后将模式设置为主动模式即可。

3.1 系统睡眠+定时器唤醒

//初始化休眠定时器,设定后经过指定时间自行唤醒程序如下:
void InitSleepTimer(void)
{
	ST2 = 0X00;
	ST1 = 0X0F;
	ST0 = 0X0F;
	EA = 1; //开中断
	STIE = 1; //睡眠定时器中断使能0:中断禁止 1:中断使能
	STIF = 0; //睡眠定时器中断标志 0:无中断未决 1: 中断未决
}

//设置系统工作模式程序如下。
void SysPowerMode(uchar mode)
{
if(mode < 4)
{
	SLEEPCMD |= mode; //设置系统睡眠模式
	PCON = 0x01; //进入睡眠模式 ,通过中断唤醒
}
else
	PCON = 0x00; //通过中断唤醒系统
}

//设置睡眠时间
void Set_ST_Period(uint sec)
{
	ulong sleepTimer = 0;
	sleepTimer |= (ulong)ST1 << 8;
	sleepTimer |= (ulong)ST2 << 16;
	sleepTimer += ((ulong)sec * (ulong)32768);
	ST2 = (uchar)(sleepTimer >> 16);
	ST1 = (uchar)(sleepTimer >> 8);
	ST0 = (uchar) sleepTimer;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值