Low Power¶
1 功能概述¶
本例程默认演示 Deepsleep 模式 的进入与唤醒:
使用
LP_EnterDeepSleep()进入 Deepsleep例程代码中提供了 GPIO 唤醒口、SleepTimer(32k) 唤醒 和 WDT(看门狗)唤醒 的配置示例
2 环境准备¶
硬件设备与线材:
PAN271x EVB 核心板与底板各一块
JLink 仿真器(用于烧录例程程序)
USB-TypeC 线一条(用于底板供电和查看串口打印 Log)
杜邦线数根或跳线帽数个(用于连接各个硬件设备)
逻辑分析仪,用于抓取debug io状态
硬件接线:
将 EVB 核心板插到底板上
连接串口转USB调试模块:
使用 USB-TypeC 线,将 PC USB 插口与 EVB 底板 USB->UART 插口相连
使用杜邦线或跳线帽将 EVB 底板
J8排针对 (P06 & TXD) 和J9排针对 (P05 & RXD) 分别短接起来
连接 Jlink,使用杜邦线将 JLink 仿真器的:
SWD_CLK 引脚与 EVB 底板的 P00 排针相连
SWD_DAT 引脚与 EVB 底板的 P01 排针相连
SWD_GND 引脚与 EVB 底板的 GND 排针相连
PC 软件:
串口调试助手(UartAssist)或终端工具(SecureCRT),波特率 115200(用于串口交互)
4 例程演示说明¶
4.1 可选唤醒源:GPIO 唤醒口¶
例程中提供了 LP_WakeUpPinConfig(),用于把某个 GPIO 配置成上升沿唤醒源。若要启用 GPIO 唤醒:
取消 main 循环中如下语句的注释:
LP_WakeUpPinConfig(P1, GPIO_Pin_6); /* 配置P1.6为唤醒口 */
将对应引脚接到可产生上升沿的外部信号。
唤醒后会进入对应端口的 GPIO 中断服务函数(例程实现了 GPIO1_IRQHandler),并打印:
P1 interrupt
4.2 可选唤醒源:SleepTimer(32k) 定时唤醒¶
例程中提供了 SleepTimer 的配置示例,用于在 Deepsleep 下按 32k 时钟计数定时唤醒:
LP_SetUsrSleepTimer(32000 * 3, 1); /* 设置睡眠时间为3秒(约) */
LP_EnableDeepsleepTimer1(); /* 使能睡眠定时器1作为唤醒源 */
当 SleepTimer 触发时,会进入 SLPTMR1_IRQHandler,并打印:
slptmr1 int
4.3 可选唤醒源: WDT(看门狗)唤醒¶
打开看门狗配置:
/* 配置WDT唤醒功能:关闭看门狗复位,打开唤醒功能 */ SYS_UnlockReg(); WDT_Open(WDT_TIMEOUT_2POW14, WDT_RESET_DELAY_1025CLK, FALSE, TRUE); WDT_EnableInt(); NVIC_EnableIRQ(WDT_IRQn); SYS_LockReg();
进入 Deepsleep 并等待 WDT 唤醒:
例程在循环中进入 Deepsleep,WDT 超时后会把芯片从 Deepsleep 唤醒。 可以参考如下写法:
while (true) { /* 低功耗前可按需关闭UART RX数字通路降低漏电(按实际RX引脚调整) */ GPIO_DisableDigitalPath(P0, GPIO_Pin_6); LP_EnterDeepSleep(); GPIO_EnableDigitalPath(P0, GPIO_Pin_6); /* 唤醒后刷新WDT计数,避免很快再次超时 */ WDT_ResetCounter(); SYS_delay_10nop(100); // 延迟66us }
唤醒后现象与中断处理:
当 WDT 超时发生,会进入
WDT_IRQHandler(),例程会打印:WDT interrupt
为避免中断/唤醒标志残留导致重复进入中断,例程在
WDT_IRQHandler()中会清除:Timeout Interrupt Flag
Timeout Flag
Timeout Wakeup Flag
注意事项:
WDT_Open(..., enableReset=FALSE, enableWakeup=TRUE)这种配置是“只唤醒不复位”。如果把enableReset配成TRUE,WDT 超时将导致复位而不是按当前流程继续执行。如果修改了 WDT 超时时间(
WDT_TIMEOUT_xxx),记得同步评估实际唤醒周期;周期越长,便于观察但响应会更慢。WDT_ResetCounter()喂狗完毕后,至少要等待66us以上,才能再次进入低功耗模式。建议先喂狗再进行其他操作后进入低功耗模式,其他操作要保证在66us以上,这样CPU可以手动空转等待66us。
4.4 主要 API 说明¶
LP_EnterDeepSleep():进入 Deepsleep 模式。WDT_Open(timeout, resetDelay, enableReset, enableWakeup):配置 WDT。例程将
enableReset置为FALSE(不复位),将enableWakeup置为TRUE(作为唤醒源)。
LP_WakeUpPinConfig(GPIO_T *Port, GPIO_PinDef pin):配置GPIO唤醒源。LP_SetUsrSleepTimer(sleepTime, idx):设置用户睡眠定时器比较值(单位为 32k 时钟周期)。LP_EnableDeepsleepTimer1():使能 SleepTimer1,并打开中断与唤醒能力。GPIO_DisableDigitalPath()/GPIO_EnableDigitalPath():关闭/恢复数字输入通路,常用于降低低功耗漏电。
4.5 低功耗调试建议¶
若目标是评估低功耗电流,建议断开不必要的外设连接(如逻辑分析仪、某些调试接口),并按板卡电路实际情况关闭相关引脚的数字通路/上下拉。
进入低功耗前可关闭串口接收数字通路,防止漏电(根据接收串口引脚更改)。例如例程默认 UART0_RX 为
P0.6,进入低功耗前调用GPIO_DisableDigitalPath(P0, GPIO_Pin_6),唤醒后再恢复GPIO_EnableDigitalPath(P0, GPIO_Pin_6)。例程中对下载口相关引脚(
P0.0/P0.1)关闭数字通路与上拉,是为了降低待机漏电。