4. 低功耗与唤醒
4.1. 低功耗相关参数配置
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);
4.2. 唤醒相关参数配置
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口选择;
![]()
图13-1 唤醒初始化配置参数
4.3. 低功耗相关函数
4.3.1. 函数void music_idle_deal(void)(OTP工程)
应用层函数,此函数实现进入powerdown的处理以及退出powerdown的恢复。
4.3.2. 函数void app_powerdown_deal(u8 is_busy)(FLASH工程)
应用层函数,此函数实现在系统空闲时,指定超时时间进入powerdown的处理以及退出powerdown的恢复,其中参数:
- 1、is_busy:系统繁忙标志位
① 0:系统空闲;② 1:系统繁忙中;
4.3.3. 函数void sys_softoff(void)
此函数实现使系统进入软关机。
4.3.4. 函数void board_set_soft_poweroff(void)
此函数实现在进入软关机之前将IO口设置成高阻,并将唤醒引脚设为对应的待唤醒状态,若需要保留某些I/O口原来状态,可调用函数void soff_gpio_protect(u32 gpio)。
4.3.5. 函数void sys_power_down(u32 usec)
- 此函数实现进入系统power down,并通过延时或者触发唤醒。其中参数:
1、usec:唤醒时间(微秒),该时间不可超过看门狗复位时间的一半;2、返回值:无;
4.4. 唤醒相关函数
4.4.1. 函数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 传入的唤醒源非本次系统的唤醒源;
4.4.2. 函数void wakeup_callback(u8 index)
- 此函数为powerdown唤醒的回调函数,通过其传入的index值即可知道唤醒源,其中参数:
1、index:唤醒端口;返回值:无