1. 低功耗
1.1低功耗模式
在系统或电源复位以后,微控制器处于正常模式运行状态,系统所用时钟为 256KHz 内部 RC 振荡器输出。当 CPU 不需继续运行时,可以利用进入多种低功耗模式来节省功耗。例如等待某个外部事件时, 用户需要根据低电源消耗、快启动时间和可用的唤醒源等条件,选定一个低功耗模式。
三种低功耗模式
• 待机模式(Idle Mode)
• 停止模式(Stop Mode)
• 睡眠模式(Sleep Mode)
1.2进入低功耗
进入低功耗模式(Sleep)步骤:
• Step1: 关闭低功耗下不需要工作的模拟模块
• Step2: 系统时钟切换到 LIRC_256K,并且关闭除 LIRC_256K 以外的时钟源
• Step3: 配置 PMU_LPDOS 使其电压档位比 PMU_HPLDOS 电压档位高
• Step4: 把 PMU_HPXCP, PMU_HPPDI, PMU_HPPDLI 配置为 0
• Step5(可选): 配置 LPCON[7]为 1,并且配置 PMUBK 寄存器设置低功耗下 LPLDO 电压
• Step6: 配置 PMU_HPV2I 为 0(如果执行了 step5,则无需执行 step6)
• Step7: 配置空闲的 IO 为模拟模式。
• Step8: 进入 Sleep 前的准备工作:包括配置唤醒源,初始化唤醒中断服务函数,关闭看门狗(可选),
使能进入 Sleep 时自动关闭 256K 内部 RC 振荡器(可选),使能 SLEEP_GOON_EN 唤醒时不复位 (可选)
• Step9: 配置 LP_CON0[0]进入 Sleep
1.3低功耗唤醒
支持多种唤醒方式
• 端口唤醒
总共有 4 个 IO 唤醒源(由 WKUP_CON[3:0]控制使能)
这些唤醒源唤醒之后是会产生中断并且有对应的中断状态位,中断是不可屏蔽的(即有中断状态就一定有中断)。另外,由 SLEEP_GOON_EN(SYS_CON0[30])决定用端口唤醒时是产生系统复位还是继续运行。
IO 唤醒初始化步骤:配置 IO 模式->配置唤醒边沿->清除唤醒标志位->中断初始化使能(根据需要)
->使能唤醒位->清除唤醒标志位->配置 LP_CON 进入低功耗模式。后续只需要在进入低功耗模式之前,切换 IO 模式->清除唤醒标志位->进入低功耗模式。
注意:
如果选择了上升沿/下降沿唤醒,而此时 IO 为高电平/低电平,则唤醒标志位马上会置 1。使能后 IO保持为高电平/低电平不会重复触发,唤醒标志位保持为 1,上升沿/下降沿才会触发。
只要唤醒标志位为 1,则无法进入低功耗模式。
对于唤醒 IO 的电平翻转时间无法确定的应用场景,如果在主程序中使能wkup_en/int_en,在唤醒中断函数中关闭 wkup_en/int_en,会存在以下风险:使能 wkup_en/int_en 时马上触发 wkup_pend 导致进入中断,然后在中断中关闭 wkup_en/int_en,退出中断后进入低功耗模式,导致无法唤醒/唤醒后不进入唤醒中断。因此唤醒中断要慎重使用。
• 内部源唤醒
支持看门狗(WDT)唤醒,TIMER7_TRGO 唤醒,比较器(COMP)唤醒,flash_wkup(STOP 模式下 prog_ram_done),LVDVCC 唤醒。
注:
1. 如果不使能 WKUP_CON[3:0],即只使用内部唤醒源时,进入 sleep 之前,系统时钟要配置成选择内部 LIRC(256KHz), LIRC 在 sleep 期间不能关闭,且把系统时钟分频配置成大于等于 2.
2. 使能 WKUP_CON[3:1]时,除了对应的 GPIO 可以唤醒外,还复用了内部唤醒源,其中 WKUP_CON[3]复用 LVDVCC唤醒,WKUP_CON[2]复用比较器唤醒,WKUP_CON[1]复用 TIMER7_TRGO 唤醒。即,当使能了 WKUP_CON[3:1],但对应的 GPIO 没有配置为相应的 function 模式时,复用的内部唤醒源可以代替 GPIO 触发唤醒。
文章评论(0条评论)
登录后参与讨论