3. PMU 复位功能介绍

本章节介绍PMU的复位功能。

芯片复位功能有以下几种:
  1. 主动复位 -> “主动复位”;

  2. 长按复位 -> “长按复位”;

  3. MCLR短按复位 -> “MCLR短按复位”;


3.1. 主动复位

用户可以调取

  1. chip_reset()

  2. 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};

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复位配置“

AD24N_MCLR复位配置

3.4. 复位源获取

一、AD24N / AD23N 复位源函数如下:

函数bool is_reset_source(enum RST_REASON index);

获取复位源需要在电源初始化power_early_flowing()之后调用,否则获取的唤醒源不准确,其中参数:

1、index:复位源;
2、返回值:1:传入的参数是本次的复位源,0:传入的参数非本次复位源;