关于MCU工作模式说明¶
1. 摘要¶
本篇应用笔记主要介绍 pan262x 系列工作模式,着重介绍深度休眠模式模块工作状态。 本篇应用笔记主要包括:
工作模式介绍
工作模式切换介绍
深度休眠模式下 WakeupCounter/GPIO 模块介绍
注意:
本应用笔记为 PAN262x 系列的应用补充材料, 不能代替用户手册,具体功能及寄存器 的操作等相关事项请以用户手册为准。
2. 功能介绍¶
PAN262x 系列有三种工作模式,用户可以根据产品需要及功耗要求进行相应模式切换,深 度休眠模式下 WakeupCounter/GPIO 等模块都可正常工作。
3. 工作模式¶
3.1. 工作模式介绍¶
PAN262x 系列三种工作模式:
运行模式: CPU 运行,周边功能模块运行
休眠模式: CPU 停止,周边功能模块运行,所有中断均可唤醒MCU
深度休眠模式: CPU 停止,高速时钟停止,个别模块可工作,WakeupCounter/GPIO可唤醒MCU
深度休眠模式下工作模块:
GPIO 端口(所有GPIO均可作为唤醒引脚)
WakeupCounter 模块(RCL作为时钟源)
3.2. 工作模式切换介绍¶
3.2.1 系统控制寄存器¶
PCON.IDLE 置1时,系统进入 sleep 模式;
PCON.STOP 置1时,系统进入 deepsleep 模式;
3.2.2 模式切换¶
由运行模式进入sleep状态
LP_GotoSleep(); /**< mcu goto sleep state */
由运行模式进入deepsleep状态
DeepsleepConfig(); /**< Switch souce clock to RCH */
LP_GotoDeepsleep(); /**< mcu goto deepsleep state */
RCC_SysClkInit(); /**< Switch souce clock to DPLL-16M */
4. 深度休眠模式 WakeupCounter/GPIO 模块介绍¶
4.1 WakeupCounter模块¶
在deepsleep模式下,高速时钟停止运行, WakeupCounter模块需要选择内部低速 RCL 作为 计数时钟源。用户可编程WakeupCounter的定时时间,最长支持16.384秒唤醒时间。
WakeupCounter定时溢出中断可以唤醒deepsleep模式。
4.2 GPIO模块¶
在deepsleep模式下,所有GPIO端口均可配置为唤醒引脚,用户可以配置GPIO高电平或者低电平的方式唤醒MCU,GPIO引脚配置状态在deepsleep期间保持不会丢失。
注意:
wakeup中断源配置:将51单片机原生的INT0,INT1中断源分别配置为WakeupCounter中断、GPIO Wakeup中断。通过调用以下函数来实现:
/** Config EXTERN_INT0/1 as wakeup interrupt */
LP_ExIntSourceSelect(INT_SEL_WAKEUP);
Wakeup中断处理函数如下:
void EXTERN_INT0_IRQHandler(void) interrupt INT0_VECTOR
{
/** clear lp counter wakeup interrupt flag */
SET_WREG_BIT(ANA, WAKEUP_INT_CTRL, LP_WAKEUP_CNT_FLG_POS, 1);
}
void EXTERN_INT1_IRQHandler(void) interrupt INT1_VECTOR
{
/** clear gpio wakeup interrupt flag */
SET_WREG_BIT(ANA, WAKEUP_INT_CTRL, GPIO_WAKEUP_FLG_POS, 1);
}
5. 参考样例及驱动¶
通过上述介绍,我们对PAN262x的低功耗模块功能及操作方法有了进一步的掌握。
pan262x-dk开发包同时提供了该模块的应用样例及驱动库,用户可通过打开样例的 工程进一步直观地熟悉该模块以及驱动库的应用,在实际开发中也可以直接参考样例和使用 驱动库来快速实现对该模块的操作。
样例参考:
01_SDK\example_basic\lp\lp_sleep
01_SDK\example_basic\lp\lp_deepsleep
驱动库参考
01_SDK\driver\inc\lp.h
01_SDK\driver\src\lp.c