CN / EN
CN / EN

提问

设计支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR533x如何记录和分析复位原因 GR533x

LGY

汇顶员工
2024-04-23 15:51

GR533x通过调用以下函数可以获取系统复位的原因:

uint8_t gr533x_get_reset_reason(void)//For GR533x, add it before platform_init().
{
       /*获取复位原因*/
    uint8_t reset_reason = AON_CTL->DBG_REG_RST_SRC & 0x3F;//reset reason:bit0~bit5


       /*如有,则写1清除;由于慢速时钟域,故延时一段时间*/
       if (reset_reason)
       {
           AON_CTL->DBG_REG_RST_SRC = 0x0000003F;
           delay_us(100);
       }


       /*重新使能reset reason record*/
       AON_CTL->DBG_REG_RST_SRC = (1 << 24) | (1 << 31);//bit24 to enable reset reason record
       while ((AON_CTL->DBG_REG_RST_SRC & (1 << 30)) || !(AON_CTL->DBG_REG_RST_SRC & ( 1 << 16)));
       delay_us(100);

       return reset_reason;
}


系统中记录和分析复位原因记录的具体方法:

1. 在gr_soc.c 的soc_init函数里面, platform_init() 之前调用上述复位原因记录函数,把复位原因记录到全局变量。

2. 在用户main函数里面,可以对复位原因这个全局变量进行打印输出或存储等,便于后续分析。

3. 对照datasheet 3.4.5 Reset Reason Recorder 章节 Table 3-49,结合记录的复位原因的值,可以得到具体什么原因导致系统的复位。

0收藏

0赞成

LGY

汇顶员工
2024-04-23 15:52

补充说明:

1. 调用NVIC_SystemReset()接口复位的原因不准确,会存在0/1交替出现的现象;

2. 请勿使用NVIC_SystemReset()函数进行复位,该接口存在复位不完全的问题,需要用SDK封装的hal_nvic_sysytem_reset()接口进行复位,该接口采用AON WDT方式复位;

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注