2.5. 复位系统
下面分为7个部分来介绍系统复位功能:
系统的复位流程,为保证各系统的正确运行,主系统的复位可导致子系统复位,反之亦如此,如下图sys reset:
![]()
复位
2.5.1. 复位原因
系统复位的原因包括两种:
第一种为系统复位源;
第二种为自定义的复位源,例如断言软复位、异常软复位,是系统复位源的扩展,提供扩展信息、调试功能等
2.5.2. __reset_source_record
该接口为AW30N使用的查看复位源消息接口函数。打印及记录复位源,调用此函数之后才能够使用判断复位源接口。注意:开机时系统已经调用过此函数,用户可以直接查看开机时的打印,用户可以对照打印和本章最后的system_reset来查看是哪种复位源。后面再调用该函数已无法查看到复位原因,因为该函数已经把复位pend给清掉了。![]()
打印复位源
原型:
void *__reset_source_record(u32 arg);
2.5.3. reset_source_dump
该接口为AD16使用的查看复位源消息接口函数。打印及记录复位源,调用此函数之后才能够使用判断复位源接口。
原型:
void reset_source_dump();
2.5.4. is_reset_source
判断复位源是否为指定复位源。
原型:
u8 is_reset_source(enum RST_REASON index);
参数:
index
复位源
返回值
1:复位源是指定复位源 0:复位源不是指定复位源
2.5.5. is_system_reset
该函数接口为AW30N判断软复位源是否为指定复位源。常搭配system_reset函数使用
原型:
u8 is_system_reset(enum RESET_FLAG index);
参数:
index
软复位源
返回值
1:复位源是指定复位源 0:复位源不是指定复位源
2.5.6. system_reset
该函数为AW30N,调用该函数可以使系统软复位,并且可标记是什么类型的复位。常搭配is_system_reset函数使用
原型:
void system_reset(enum RESET_FLAG flag);
2.5.7. 系统各类复位信息源查看
用户可查看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
需要标记的复位信息
2.5.8. 接口函数使用示例:
1.调用system_reset(EXCEPTION_FLAG)后会复位;2.复位之后可通过is_reset_source(P33_EXCEPTION_SOFT_RST)判断,若返回值为1,则该复位源为异常复位(即1中的EXCEPTION_FLAG);