3. PMU 复位功能介绍
3.1. 主动复位
用户可以调取
chip_reset()
system_reset()
3.2. 长按复位
用户调用power_reset_init()初始化长按复位功能。
3.2.1. AD14N / AD15N / AC104N 长按复位功能
函数
void power_reset_init(const struct reset_param *rs_param)实现长按复位初始化。此函数,该接口需要在电源初始化的最后调用(必须要在唤醒口设置后设置)
其中rs_param结构体为:
1struct reset_param { 2 u8 en; //是否使能长按复位功能 3 u8 mode;//0:等待io电平翻转后复位,1:长按时间到了立即复位; 4 u8 level;//长按复位高低电平选择,0:低电平,1:高电平; 5 u8 iomap;//长按复位io选择(如IO_PORTA_01) 6 int hold_time;//复位最小门槛时间选择 7};
参数mode:释放模式参考AD18N的复位模式说明”->“参数:release - 释放模式”;
hold_time value
复位最小门槛时间
0
1s
1
2S
2
4S
3
8S
4~7
16S
other
非法
SDK默认没有打开该功能。用户若需要该功能,只需在唤醒IO设置后配置即可。![]()
长按复位配置
3.2.2. AD17N / AD18N 长按复位功能
函数void gpio_longpress_pin0_reset_config(u32 pin, u32 level, u32 time, u8 release, u8 protect)长按复位初始化。
该接口需要在电源初始化的最后调用:
1void gpio_longpress_pin0_reset_config(u32 pin, u32 level, u32 time, u8 release, u8 protect)参数:
1.pin: 任意GPIO; 2.level: 0(下降沿触发) 1(上升沿触发); 3.time: 0(disable) 1 2 4 8 16单位为秒; 4.release:0(等待电平翻转后复位) 1(立即复位) 5.protect:0(关闭写 保护) 1(打开写保护); 6.返回值:无示例:
1// 配置:PA5,下降沿触发,长按4秒,等待释放后复位,关闭写保护 2gpio_longpress_pin0_reset_config(IO_PORTA_05, 0, 4, 0, 0);
3.2.2.1. 参数:pin - GPIO引脚
类型:u32(32位无符号整数)
说明:指定用于长按复位的GPIO引脚编号
示例:IO_PORTA_05 等
3.2.2.2. 参数:level - 触发电平
类型:u32
取值:
0:下降沿触发(从高电平变为低电平) 1:上升沿触发(从低电平变为高电平)说明:指定什么电平变化会开始计时
3.2.2.3. 参数:time - 长按时间
类型:u32
取值:
time value |
复位最小门槛时间 |
|---|---|
0 |
disable |
1 |
1S |
2 |
2S |
4 |
4S |
8 |
8S |
16 |
16S |
other |
非法 |
3.2.2.4. 参数:release - 释放模式
类型:u8(8位无符号字符)
取值:
0:等待电平翻转后复位(按键释放后才执行复位) 1:立即复位(达到时间后立即执行复位,不管按键是否释放)备注
release = 0:等待电平翻转后复位
用户操作流程:1.用户按下复位按键(GPIO变为低电平)2.系统开始计时4秒3.用户保持按下状态4秒以上4.系统检测到已满4秒,但不立即复位5.用户释放按键(GPIO变回高电平)6. 此时系统执行复位结果:用户必须完成”按下-保持-释放”的完整动作才会复位备注
release = 1 立即复位模式
用户操作流程:1.用户按下复位按键(GPIO变为低电平)2.系统开始计时4秒3.用户保持按下状态达到4秒4.系统立即执行复位,不管用户是否还在按住按键5.系统复位后,按键状态被忽略结果:只要按下时间达到4秒,系统就立即复位
3.2.2.5. 参数:protect - 写保护(AD17N无此功能)
AD18N 默认的长按复位IO为PA0;
类型:u8
取值::
0:关闭写保护(可以直接修改配置) 1:打开写保护(防止意外修改配置)备注
protect = 1, 开机首次调用函数
gpio_longpress_pin0_reset_config后,再次调用此函数将无效,并会锁定默认长按复位IO状态。1.示例1,默认长按复位 IO (PA0)
1// 场景:配置默认复位引脚 PA0 并开启写保护 2gpio_longpress_pin0_reset_config(IO_PORTA_00, 0, 4, 1, 1);备注
配置默认长按复位IO,上电首次调用函数后
✅ 配置锁定: 无法再次调用此函数修改复位配置✅ IO状态锁定: PA5 引脚的电平状态也无法被其他代码修改✅ 双重保护: 配置和硬件状态都被锁定2.示例2,普通 GPIO 引脚并开启写保护:
1// 场景:配置默认复位引脚 PA5 并开启写保护 2gpio_longpress_pin0_reset_config(IO_PORTA_05, 0, 4, 1, 1);备注
配置其他 GPIO 引脚,上电首次调用函数后
✅ 配置锁定: 无法再次调用此函数修改复位配置❌ IO状态未锁定: PA5 引脚的电平状态可以被其他代码修改⚠️ 单层保护: 只锁定配置,不锁定硬件状态
3.2.3. AD24N / AD23N 长按复位功能
函数void gpio_longpress_pin0_reset_config(u32 pin, u32 level, u32 time, u32 release, enum gpio_mode pullup_down_mode)
此函数实现长按复位初始化,该接口需要在电源初始化的最后调用,其中参数:
1、pin:复位I/O;(如:IO_PORTA_01) 2、level:触发方式 ①、0:下降沿触发; ②、1:上升沿触发; 3、time:时间 ①、0:disable; ②、1:1s复位; ③、2:2s复位; ④、4:4s复位; ⑤、8:8s复位; ⑥、16:16s复位 3、release:系统释放方式 ①、0:等待电平翻转后复位; ②、1:立即复位; 4、pullup_down_mode:该IO初始状态;f 用户根据gpio_mode枚举选择对应的IO状态即可; 选择PORT_KEEP_STATE 即不操作该IO状态。
3.3. MCLR短按复位
AD24N / AD23N 支持MCLR复位(MCLR与PA8绑定)。
用户可以在power_app.c里打开p33_mclr_sw(1)即可。
![]()
AD24N_MCLR复位配置
3.4. 复位源获取
一、AD24N / AD23N 复位源函数如下:
函数bool is_reset_source(enum RST_REASON index);
获取复位源需要在电源初始化power_early_flowing()之后调用,否则获取的唤醒源不准确,其中参数:
1、index:复位源; 2、返回值:1:传入的参数是本次的复位源,0:传入的参数非本次复位源;