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