文档介绍:MCU低功耗设计理论
 
 
MCU低功耗设计(一)理论
关键词:MCU低功耗, STM8L低功耗, 节能技巧
一.MCU耗能因素
现代的MCU一般使用CMOS技术,耗能包括2方面:
静态消耗 主要是晶体管消耗能量;
ULP
ULP
CLK_ICKCR
ULP
程序执行区
FLASH
FLASH
RAM
RAM
FLASH
FLASH
FLASH+E2
开
开
关
关
关
关
中断
允许
允许
禁止
禁止
允许
允许
中断服务后 返回状态
AL=0:main
WFE
/
/
AL=0:main
AL=1主动停止
AL=0:main
AL=1:WFI
AL=1:停止
事件处理后 返回状态
/
Main
/
低功耗运行
/
/
RAM+寄存器
保留
保留
保留
保留
保留
保留
***@3V/25℃
特殊事项
/
/
禁止ADC
/
清除外设悬挂中断标志位
 
上述低功耗运行模式对于开发者来说有点多,尤其刚接触STM8L处理器。我们需要一般性的指导原则,表2是来源于实践的经验。
表2 选择合理的STM8L节能模式
节能要求
应用场合
睡眠时长
唤醒方式
恢复时长
运行模式
苛刻
CPU空闲,等待外部信号唤醒
长
外部中断
≥
HALT
苛刻
CPU
长
RTC
≥
Active-halt
空闲,等待时钟周期唤醒
周期
严格
CPU有持续、微负荷任务运行
/
/
≥
低功耗运行
严格
CPU短暂等待中断发生
短
任意中断
短
等待中断
严格
CPU短暂等待事件发生
短
注册事件
短
等待事件
需要
CPU有持续、轻负荷任务运行
/
/
/
调整主频
四.鲜为人知的技巧
1. 使用Wait替换查询方式达到节能目的
常见的查询方式如下,此时CPU无事可干,白白消耗电能。
ADC_CR1 = ADC_START;  /* start conversion */
while (!(ADC_SR & ADC_SR_EOC)) ;  /* wait for EOC bit set */
可以使用等待事件的方式来节省电能。
先配置ADC为事件源,并使能相应的中断:
WFE_CR2 = ADC_COMP_EV;  /* enable ADC as a source of event */
ADC_CR1 = ADC_EOCIE;  /* enable interrupt for end of conversion */
当ADC转换完成后,唤醒处于等待的CPU:
ADC_CR1 = ADC_START;  /* start conversion */
_asm(“wfe”);  /* enter wait mode until waked by ADC_EOCIE*/
2. 无须上下文切换的中断模式
应用程序设计时,如果所有中断事件由ISR完成,可以通过将CFG_GCR寄存器中AL位置1来节省电能:避免保存/恢复context、无须主程序运行(返回到WFI模式),如下图1所示。
图1  WFI模式下中断无须上下文切换
将AL位置1节省电能的方法同样可以用于HALT模式,原理如下图2所示。
图2 HALT模式下中断无须上下文切换
3. 动态设置I/O口的上拉功能
很多应用需要按键作为人机接口,按键一般连接到I/O上。当按键没有动作时I/O口设置内部上拉而获得确定的逻辑电平;一旦按键按下,I/O口对地导通将产生额外的40~70uA电流,这对于电池供电的低功耗来说是十分重要的。
可以动态地控制I/O口的上拉达到节能的目的:一旦按键按下,中断服务程序将禁止该I/O口的上拉功能;然后软件定时执行—先使能上拉功能,再检测I/O口状态,如果按键仍按下再次禁止上拉功能,否则使能I/O口的上拉功能。整个逻辑如下图3所示:
图3 动态设置I/O口的上拉而节能
4.  CPU空闲节能策略
CPU的空闲节能如下图4所示,它的逻辑包括以下几个步骤:
(1)发现CPU空闲:带OS系统,表现为任务没有事件需要响应,或者进入idle进程;无OS系统,表现为程序运行结束。
(2) 选择一种合适的CPU节能模式:chip_EnterLowPower()完成进入节能前的准备工作,包括:关闭外设,切换I/O引脚到节能状态。
(3) 退出节能模式需要调用chip_ExitLowPower(),可能发生在以下2种