当前文档版本为 v0.3.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

MCU工作模式说明

1. 摘要

本篇应用笔记主要介绍 pan2628 系列工作模式,着重介绍深度休眠模式模块工作状态。 本篇应用笔记主要包括:

  • 工作模式介绍

  • 工作模式切换介绍

  • 深度休眠模式下 WakeupCounter/GPIO 模块介绍

注意:

本应用笔记为 PAN2628 系列的应用补充材料, 不能代替用户手册,具体功能及寄存器 的操作等相关事项请以用户手册为准。

2. 功能介绍

PAN2628 系列有三种工作模式,用户可以根据产品需要及功耗要求进行相应模式切换,深 度休眠模式下 WakeupCounter/GPIO 等模块都可正常工作。

3. 工作模式

3.1. 工作模式介绍

PAN2628 系列三种工作模式:

  • 运行模式: CPU 运行,周边功能模块运行

  • 休眠模式: CPU 停止,周边功能模块运行,所有中断均可唤醒MCU

  • 深度休眠模式: CPU 停止,高速时钟停止,个别模块可工作,WakeupCounter/GPIO可唤醒MCU

深度休眠模式下工作模块:

  • GPIO 端口(所有GPIO均可作为唤醒引脚)

  • WakeupCounter 模块(RCL作为时钟源)

3.2. 工作模式切换介绍

3.2.1 系统控制寄存器

image-20230110104326110

  • 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 */

3.2.3. 休眠模式唤醒

  • 在sleep模式下

所有中断均可唤醒MCU系统

  • 在deepsleep模式下

只有WakeupCounter/GPIO 高/低电平 可唤醒MCU

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. 参考样例及驱动

通过上述介绍,我们对PAN2628的低功耗模块功能及操作方法有了进一步的掌握。

pan2628-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