瑞萨RA系列FSP库开发实战指南之MCU芯片的低功耗模式介绍

描述

第33章

电源管理——低功耗模式

33.1

瑞萨RA芯片电源管理简介

电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续航时间。因此,瑞萨RA芯片有专门管理设备的运行模式,确保系统正常运行,并尽量降低器件的功耗。

33.1.1

降低功耗的方式

RA6M5具有多种降低功耗的功能,如设置时钟分频器、EBCLK(External Bus Clock)输出控制、停止模块、在正常模式下选择电源控制模式以及转换到低功耗模式等,下表是对于各种低功耗功能的描述。

表1:低功耗功能描述

电源管理

33.1.2

通过切换时钟信号降低功耗

可以通过修改SCKDIVCR(System Clock Division Control Register)寄存器修改时钟频率。寄存器如下图所示,根据需求,在对应的位段设置分频值即可。设分频前时钟频率为CLKIN,分频后时钟频率为CLKOUT,分频值为div。则CLKOUT=CLKIN/2div。例如,将SCKDIVCR寄存器的ICK修改为1,则ICLK=PLL/21=100MHz(RA6M5中ICLK默认时钟源是PLL,PLL=200MHz)。

电源管理

点击可查看大图

33.1.3

停止模块功能

停止模块功能可以停止各外设的时钟供应,通过设置MSTPCRn(Module Stop Control Register)(n=A~E)寄存器,可以单独停止外设的时钟供应,此时CPU会继续运行,在寄存器对应位置1则停止对应的外设的时钟供应,置0则恢复时钟供应。例如,要停止SCI4,则在MSTPCRB的第27位置1。当外设对应的位为1时,禁止访问该外设。

选择PLL作为时钟源时,每次只能修改一个位,修改位之后,需要等待至少250ns才能进行后续处理。

33.1.4

功率控制模式

根据工作频率选择合适的功率控制模式,确保频率范围等工作条件在正常范围内。下图为不同功率模式下可用的时钟源。

电源管理

点击可查看大图

33.2

低功耗模式

33.2.1

模式切换框图

电源管理

点击可查看大图

33.2.2

睡眠模式(Sleep Mode)

上电时,默认的低功耗模式即睡眠模式。睡眠模式是最方便的低功耗模式,它不需要任何额外的配置,只需要配置好用于唤醒的中断源。在睡眠模式下,SRAM、处理寄存器和外设状态都会被保留,片上外设可以继续工作,进入睡眠模式以及从睡眠模式唤醒所消耗的时间都是极少的。任何中断或者复位都会将MCU从睡眠模式下唤醒,并开始处理中断,这也包括SysTick系统计时器,因此读者如果用到了RTOS,进入睡眠模式前需要暂停SysTick。

33.2.3

软件待机模式(Software Standby Mode)

在软件待机模式下,CPU以及大部分片上外设功能和所有内部晶振都停止工作。但是会保留CPU内部寄存器和SRAM数据的内容,片上外设以及IO口的状态。软件待机模式可以显著降低功耗,因为大多数振荡器在这种模式下停止。与睡眠模式一样,待机模式需要配置一个中断,并使用它来唤醒MCU。退出软件待机模式时,所有内部晶振都会被启动,待所有晶振稳定后,MCU返回正常模式。

33.2.4

贪睡模式(Snooze Mode)

贪睡模式与软件待机模式相似,但是在贪睡模式下,可以运行很多核心外设和所有时钟,可以执行一些比较简单的任务,与软件待机模式相比,贪睡模式可以实现更加灵活的低功耗配置。

33.2.5

深度软件待机模式(Deep Software Standby Mode)

深度软件待机模式类似于设备关机,CPU状态、SRAM存储的数据以及大部分外设寄存器的数据都会丢失,只有少量外设,如RTC和AGTn(n=0~3)可以运行。因此MCU无法保存上下文,只能以重置的状态唤醒。

下图是用于唤醒软件待机模式,贪睡模式、深度软件待机模式的各中断源是否支持的对比。

电源管理

点击可查看大图

33.3

低功耗模式需要使用的函数及指令

33.3.1

WFI和WFE指令

进入低功耗模式都需要调用WFI(Wait for Interrupt)和WFE(Wait for Event)指令,实际上就是一行汇编指令,在cmsis_gcc.h中被封装为函数。只使用WFI指令可以直接进入睡眠模式。

列表1:WFI和WFE 指令

左右滑动查看完整内容

 

/**
*@brief Wait For Interrupt
*@details Wait For Interrupt is a hint instruction that suspends␣
,→execution until one of a number of events occurs.
*/
#define __WFI() __ASM volatile ("wfi":::"memory")
/**
*@brief Wait For Event
*@details Wait For Event is a hint instruction that permits the processor␣
,→to enter
* a low-power state until one of a number of events occurs.
*/
#define __WFE() __ASM volatile ("wfe":::"memory")

 

33.3.2

FSP库函数

低功耗模式的库函数很少,功能也很简单,在下表中列举。

表2:低功耗模式库函数

电源管理

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分