.. _复位系统: 复位系统 ####################### 下面分为7个部分来介绍系统复位功能: 1. ":ref:`AW30 查看复位消息源 __reset_source_record`" 2. ":ref:`AD16 查看复位消息源 __reset_source_dump`" 3. ":ref:`查看是否为指定复位消息源 is_reset_source`" 4. ":ref:`AW30 判断是否为指定复位消息源 is_system_reset`" 5. ":ref:`AW30 带标记复位 system_reset`" 6. ":ref:`系统各类复位信息源查看`" 7. ":ref:`接口函数使用示例`" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 系统的复位流程,为保证各系统的正确运行,主系统的复位可导致子系统复位,反之亦如此,如下图sys reset: .. image:: file/reset.png :alt: "复位“ :align: center .. centered:: 复位 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 复位原因 --------------- | 系统复位的原因包括两种: | 第一种为系统复位源; | 第二种为自定义的复位源,例如断言软复位、异常软复位,是系统复位源的扩展,提供扩展信息、调试功能等 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _AW30 查看复位消息源 __reset_source_record: __reset_source_record ------------------------------ | 该接口为AW30N使用的查看复位源消息接口函数。 | 打印及记录复位源,调用此函数之后才能够使用判断复位源接口。 | 注意:开机时系统已经调用过此函数,用户可以直接查看开机时的打印,用户可以对照打印和本章最后的system_reset来查看是哪种复位源。 | 后面再调用该函数已无法查看到复位原因,因为该函数已经把复位pend给清掉了。 .. image:: file/reset_source.png :alt: "打印复位源“ :align: center .. centered:: 打印复位源 原型: .. code-block:: c void *__reset_source_record(u32 arg); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _AD16 查看复位消息源 __reset_source_dump: reset_source_dump ------------------------------ | 该接口为AD16使用的查看复位源消息接口函数。 | 打印及记录复位源,调用此函数之后才能够使用判断复位源接口。 原型: .. code-block:: c void reset_source_dump(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _查看是否为指定复位消息源 is_reset_source: is_reset_source ------------------------------ 判断复位源是否为指定复位源。 原型: .. code-block:: c u8 is_reset_source(enum RST_REASON index); 参数: ========== ====================== index 复位源 返回值 1:复位源是指定复位源 0:复位源不是指定复位源 ========== ====================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _AW30 判断是否为指定复位消息源 is_system_reset: is_system_reset ------------------------------ | 该函数接口为AW30N判断软复位源是否为指定复位源。 | 常搭配system_reset函数使用 原型: .. code-block:: c u8 is_system_reset(enum RESET_FLAG index); 参数: ========== ====================== index 软复位源 返回值 1:复位源是指定复位源 0:复位源不是指定复位源 ========== ====================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _AW30 带标记复位 system_reset: system_reset -------------- | 该函数为AW30N,调用该函数可以使系统软复位,并且可标记是什么类型的复位。 | 常搭配is_system_reset函数使用 原型: .. code-block:: c void system_reset(enum RESET_FLAG flag); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _系统各类复位信息源查看: 系统各类复位信息源查看 ---------------------------- 用户可查看power_reset.h文件 :: enum RST_REASON { /*主系统*/ MSYS_P11_RST, //P11复位(本芯片不支持P11) MSYS_P33_RST, //P33复位 MSYS_P33_SOFF_RST, //低功耗唤醒复位(soff legacy) MSYS_DVDD2_POR_RST, //DVDD2上电 MSYS_DVDD_POR_RST, //DVDD上电 MSYS_SOFT_RST, //主系统软件复位 MSYS_P2M_RST, //低功耗唤醒复位(softoff advance && deepsleep) MSYS_PLM_RST, MSYS_POWER_RETURN, //主系统未被复位 /*P11(本芯片不支持P11)*/ P11_PVDD_POR_RST, //pvdd上电 P11_IVS_RST, //低功耗唤醒复位(softoff legacy) P11_P33_RST, //p33复位 P11_WDT_RST, //看门狗复位 P11_SOFT_RST, //软件复位 P11_MSYS_RST, //主系统复位P11 P11_POWER_RETURN, //P11系统未被复位 /*P33*/ P33_VDDIO_POR_RST, //vddio上电复位(电池/vpwr供电) P33_VDDIO_LVD_RST, //vddio低压复位、上电复位(电池/vpwr供电) P33_WDT_RST, //看门狗复位 P33_VCM_RST, //vcm高电平短接复位 P33_MCLR_RST, //mclr低电平短接复位 P33_PPINR_RST, //数字io输入长按复位 P33_P11_RST, //p11系统复位p33,rset_mask=0(本芯片不支持P11) P33_MSYS_RST, //msys系统复位p33,rset_mask=0 P33_SOFT_RST, //p33软件复位,一般软件复位指此系统复位源,所有系统会直接复位。 P33_PPINR1_RST, //模拟io输入长按复位,包括charge_full、vatch、ldoint、vabt_det(本芯片不支持模拟复位) P33_PPINR1_SOFT_RST, //PINR1保护机制使能时,当软件清PINR PND1的操作发生在窗口外时产生的复位 P33_POWER_RETURN, //p33系统未被复位。 /*RTC(本芯片没有硬件RTC)*/ R3_VDDIO_RST, R3_SOFT_RST, R3_POWER_RETURN, //BIT(32)~BIT(50)预留给软复位使用 P33_EXCEPTION_SOFT_RST = 32, //异常软件复位 P33_ASSERT_SOFT_RST, //断言软件复位 P33_SOFT_RST_RESERVER = 50, //软件复位 RST_REASON_RESERVE = 63, }; enum RESET_FLAG { RESET_FLAG_NULL, EXCEPTION_FLAG, ASSERT_FLAG, }; //RESET_FLAG在RESET_REASON中偏移32位来标记 //即: //EXCEPTION_FLAG ---- RESET_REASON的32位 //ASSERT_FLAG ---- RESET_REASON的32位 void system_reboot(enum RESET_FLAG flag); 参数: ========== ====================== flag 需要标记的复位信息 ========== ====================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _接口函数使用示例: 接口函数使用示例: ---------------------- | 1.调用system_reset(EXCEPTION_FLAG)后会复位; | 2.复位之后可通过is_reset_source(P33_EXCEPTION_SOFT_RST)判断,若返回值为1,则该复位源为异常复位(即1中的EXCEPTION_FLAG);