低功耗与唤醒 =================================== .. _低功耗flash电源保持配置flash_pg_keep: 低功耗相关参数配置 ######################### AD16N支持Soft off和Power down低功耗流程,同时支持多种唤醒方式;Soft off模式功耗为1.8uA+,Soft off唤醒后芯片需要从MASKROM开始重新跑流程,约等同于复位;Power down模式功耗为38uA+,Power down唤醒后芯片会从进入powerdown的函数后开始跑。 =============== ========= ======== ============== ============== 低功耗方式 RAM保持 功耗 唤醒后状态 唤醒时间 =============== ========= ======== ============== ============== Power down 保持 38uA+ 原地唤醒 2.15ms+ Soft off 不保持 1.8uA+ 复位 7.72ms+ =============== ========= ======== ============== ============== 在apps/app/bsp/cpu/uc03/power_api.c文件中,配置power_param结构体以下成员可实现相关功能: | 1、vddiom_lev:系统正常运行时的VDDIO电压; | 2、vddiow_lev:系统低功耗时的VDDIO电压,该电压值需要比正常运行时的VDDIO电压低至少200mV; | 3、flash_pg_keep:FLASH电源配置,A0芯片使用VDDIO给外接FLASH供电时需要配置为1,以降低关机功耗;使用PD口供电不用配置; 本章着重介绍Soft off、Power down以及唤醒。 | Soft off及Power down相关函数: | void sys_softoff(); | void sys_power_down(u32 usec); 唤醒相关函数: | void wakeup_callback(u8 index); | u8 is_wakeup_source(enum WAKEUP_REASON index); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 唤醒相关参数配置 ####################### Soft off与Power down共用唤醒模块,AD16N最多可以设置12个IO唤醒源。可以在power_api.c的wkup_param中增加port_wakeup类型成员来增加唤醒源。 在apps/app/bsp/cpu/uc03/power_api.c文件中,配置以下const变量可实现相关功能: | 1、config_record_wkup:使能唤醒源记录 | 2、config_record_reset:使能复位源记录 | 3、config_max_wakeup_port:设置数字I/O唤醒数量 唤醒前需要先配置唤醒参数结构体wakeup_param,内容包含PORT_FLT和port_wakeup结构体: PORT_FLT:边沿唤醒选择消抖的脉冲时长,仅模拟端口有效 | ① PORT_FLT_NULL; | ② PORT_FLT_256us; | ③ PORT_FLT_512us; | ④ PORT_FLT_1ms; | ⑤ PORT_FLT_2ms; | ⑥ PORT_FLT_4ms; | ⑦ PORT_FLT_8ms; | ⑧ PORT_FLT_16ms; port_wakeup结构体:唤醒端口的参数配置 | ① pullup_down_enable:上/下拉使能; | ② edge:边沿触发方式; | ③ filter:滤波方式; iomap:I/O口选择; .. image:: 13-1-wakeup_init_config.png :alt: "图13-1 唤醒初始化配置参数“ :align: center .. centered:: 图13-1 唤醒初始化配置参数 ^^^^^^^^^^^^^^^^^^^^^^ 低功耗相关函数 ########################## 函数void music_idle_deal(void)(OTP工程) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 应用层函数,此函数实现进入powerdown的处理以及退出powerdown的恢复。 函数void app_powerdown_deal(u8 is_busy)(FLASH工程) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 应用层函数,此函数实现在系统空闲时,指定超时时间进入powerdown的处理以及退出powerdown的恢复,其中参数: 1、is_busy:系统繁忙标志位 | ① 0:系统空闲; | ② 1:系统繁忙中; 函数void sys_softoff(void) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此函数实现使系统进入软关机。 函数void board_set_soft_poweroff(void) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此函数实现在进入软关机之前将IO口设置成高阻,并将唤醒引脚设为对应的待唤醒状态,若需要保留某些I/O口原来状态,可调用函数void soff_gpio_protect(u32 gpio)。 函数void sys_power_down(u32 usec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此函数实现进入系统power down,并通过延时或者触发唤醒。其中参数: | 1、usec:唤醒时间(微秒),该时间不可超过看门狗复位时间的一半; | 2、返回值:无; 唤醒相关函数 ########################### 函数u8 is_wakeup_source(enum WAKEUP_REASON index) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此函数实现查询传入的唤醒源参数,是否与系统soft off的唤醒源一致。该接口需要在系统初始化sys_power_init()之前调用,否则获取的唤醒源不准确,其中参数: 1、index:唤醒端口; | ① PWR_WK_REASON_EDGE_INDEX0:唤醒源0~11; | ② 具体可传入的唤醒源请查看power_wakeup.h中的WAKEUP_REASON枚举; 2、返回值: | 1 传入的唤醒源为本次系统的唤醒源; | 0 传入的唤醒源非本次系统的唤醒源; 函数void wakeup_callback(u8 index) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此函数为powerdown唤醒的回调函数,通过其传入的index值即可知道唤醒源,其中参数: | 1、index:唤醒端口; 返回值:无