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);