杭州晶华微:带32位MCU和高精度ADC的SoC产品----SD93F系列开发指南(十)
前言
在开发指南(九)中,我们给大家讲解了12位高速SAR ADC,本章节给大家讲解示例程序的最后一个功能:低功耗模式,参考应用手册第12章节。
低功耗模式简介
SD93F115 有四种工作模式,NORMAL 正常工作模式,以及 3 种低功耗模式:WAIT、 DOZE、STOP,本例将一一讲解WAIT、 DOZE、STOP模式。
对低功耗模式的描述,如下所示:
1、WAIT模式
执行wait指令进入该模式。所有原本工作的时钟源继续工作,并不被关闭。系统时钟SYS_CLK依然提供,但CPU内核停止工作,不再执行程序。中断可唤醒MCU。
当MCU进入WAIT模式,无论系统时钟选择为高频、低频,FLASH自动进入它的待机模式。
从WAIT模式唤醒后,系统时钟保持与进入WAIT模式前一致。
2、DOZE模式
执行doze指令进入该模式。系统时钟SYS_CLK被关闭,CPU内核停止工作。进入DOZE模式,硬件自动关闭IHRC和XTOSC2,ILRC和XTOSC1的状态由软件决定。
从DOZE模式唤醒,自动选择过渡时钟作为系统时钟运行程序。
唤醒后,ILRC、XTOSC1、XTOSC2的最终开启状态和进入低功耗模式前由软件设置的开启状态保持一致(过渡时钟为IHRC/2)。
3、STOP模式
执行stop指令进入该模式。所有时钟源都被关闭,最大限度地降低数字电路功耗。只能通过外部中断、按键中断、定时器0使用外部时钟时产生的中断,或者外部复位、上电/掉电复位来唤醒。
从STOP模式唤醒,自动选择过渡时钟作为系统时钟运行程序。
唤醒后,ILRC、XTOSC1、XTOSC2的最终开启状态与进入低功耗模式前由软件设置的开启状态保持一致。
4、低功耗模式指令
低功耗测试没有专门的寄存器,它只有几个指令:WAIT、STOP、DOZE。打开示例程序,可以在SD931X.h文件中找到这三个指令。如下图1:
图1.低功耗指令
5、低功耗模式差异
WAIT模式下由于并没有关闭各模块的时钟源,所以每个模块还是处于工作状态,只是CPU内核停止工作,所以降低功耗有限。
DOZE模式下会硬件关闭IHRC和XTOSC2,ILRC和XTOSC1的状态由软件决定,由于大部分模块已停止工作,所以功耗已经非常低了,但ILRC和XTOSC1没有被关闭,所以还会有几个μA的功耗。
STOP模式下会硬件关闭IHRC、ILRC、XTOSC1、XTOSC2,此时所有模块都已停止工作,这是功耗最低的模式。
图2.低功耗模式差异表
注:上述表示为SD93F115-JBS在当前模式下典型值,不同的芯片存在差异。
功耗测试
1、软件配置
(1)STOP模式测试程序如下图所示:
图3.STOP测试程序
注:在测试STOP模式时,需要先把所有IO口进行默认设置,初始化为上拉输入,关闭各种功能如上图所示。同时PWR部分需要最后关闭,防止AVDDR,BG关闭后,影响其他功能的关闭。
(2)DOZE模式测试程序如下图所示:
图4.DOZE测试程序
(3)WAIT模式测试程序如下图所示:
图5.WAIT测试程序
按照上述程序的运行,芯片已进入了相应的低功耗模式,且使能了按键中断唤醒功能,所以在需要的时候可以将芯片唤醒,继续工作,由于不同低功耗模式下的唤醒中断并不一致,所以要选择合适的方式来唤醒芯片,具体唤醒方式见下图6。
图6.唤醒方式
本例采用的是按键中断唤醒,配置方式如下图所示:
图7. 按键中断配置程序
需要注意在中断服务函数中及时清除中断标志位。
2、低功耗模式功耗测试
(1)STOP模式功耗
图8. STOP模式功耗
(2)DOZE模式功耗
图9. DOZE模式功耗
(3)WAIT模式功耗
图10. WAIT模式功耗
(4)NORMAL模式功耗
图11.正常工作模式功耗
开发问题简析
开发过程中要特别注意以下几点:
1、不要上电直接进入低功耗模式,至少要做个模式进入选择或者使能低功耗唤醒。特别注意:如果上电直接进了低功耗模式,且没有设置低功耗唤醒,芯片会一直处于低功耗状态,CKLink显示连接失败,此时可通过以下方法先按住BOOT键不放,然后按下RESET键,再放开BOOT键即可强制唤醒低功耗模式,再连接调试器下载正确的程序。
2、在进入低功耗之前,建议大家手动关闭已开启的功能,如功耗测试异常可能是部分模块关闭异常,或者外围电路影响,需具体分析。
3、若是开启了独立看门狗,其不可在低功耗模式下工作。
总结
低功耗模式的合理运用可以大幅降低不必要的能量损耗,选择合适的唤醒方式,可以在不同方案上灵活使用。