/** ########################################################################## ** Filename : ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ /*--------------------------------------------------------------------------- - I N C L U D E F I L E S ----------------------------------------------------------------------------*/ #include "clk.h" #include "gpio.h" #include "queue_entity.h" #include "logic_timer.h" #include "wdog.h" //#include "rcm_check.h" /*--------------------------------------------------------------------------- - D E F I N E S / M A C R O S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - T Y P E D E F I N I T I O N S ----------------------------------------------------------------------------*/ typedef struct { u8 state; u16 count; #ifdef WDOG_DEBUG_EN u8 test[3]; #endif }wdt_s; typedef struct { u16 count; u32 flag_self_check; }wdt_check_s; /*--------------------------------------------------------------------------- - S T A T I C V A R I A B L E S ----------------------------------------------------------------------------*/ static wdt_s g_wdt; static wdt_check_s g_wdt_check; /*--------------------------------------------------------------------------- * G L O B A L V A R I A B L E S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - C O N S T A N T S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - F U N C T I O N P R O T O T Y P E ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void WDT_IRQHandler(void) { if(FL_WWDT_IsActiveFlag_NearOverflow(WWDT)) { FL_WWDT_ClearFlag_NearOverflow(WWDT); FL_WWDT_ReloadCounter(WWDT); /* LED0_TOG(); */ return; } /* 若程序进入此分支,则表示IWDT中断,请自行处理 */ } #if WDT_OPERATION_MODE == WDT_OPERATION_NORMAL /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ static void iwdt_in_init(void) { FL_IWDT_Init(IWDT, (FL_IWDT_InitTypeDef*)&g_IWDT_InitStruct); //FL_IWDT_EnableFreezeWhileSleep(IWDT); //在休眠时,冻结 FL_IWDT_DisableFreezeWhileSleep(IWDT); //在休眠时,不冻结 } #endif #if WDT_OPERATION_MODE == WDT_OPERATION_WINDOWS /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ static void wwdt_in_init(void) { FL_WWDT_Init(WWDT, (FL_WWDT_InitTypeDef*)&g_WWDT_InitStruct); NVIC_ClearPendingIRQ(WWDT_IRQn); NVIC_DisableIRQ(WWDT_IRQn); NVIC_SetPriority(WWDT_IRQn, NVIC_PRIORITY_WDOG); NVIC_EnableIRQ(WWDT_IRQn); FL_WWDT_ClearFlag_NearOverflow(WWDT); /* 开中断 */ FL_WWDT_EnableIT_NearOverflow(WWDT); } #endif /*--------------------------------------------------------------------------- |Prototype : 初始化 |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void wdog_init(void) { //TEST1_ON(); #if WDT_OPERATION_MODE == WDT_OPERATION_NORMAL iwdt_in_init(); #endif #if WDT_OPERATION_MODE == WDT_OPERATION_WINDOWS wwdt_in_init(); #endif //TEST1_OFF(); } /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void wdog_task(void) { #if 1 #if WDT_OPERATION_MODE == WDT_OPERATION_NORMAL #if 0//def WDOG_DEBUG_EN TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); #endif //if(g_wdt.state == 0u) { FL_IWDT_ReloadCounter(IWDT); } #endif #endif } /*--------------------------------------------------------------------------- |Prototype : 当使用窗口看门狗时的喂狗 |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void wdt_feed_windows(void) { #if 1 #if WDT_OPERATION_MODE == WDT_OPERATION_WINDOWS #if 0//def WDOG_DEBUG_EN TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); g_wdt.test[0]++; TEST1_TOGGLE(); #endif g_wdt_check.count++; g_wdt.count++; if(g_wdt.count>=WDT_WINDOWS_TIMEOUT) { g_wdt.count=0u; FL_WWDT_ReloadCounter(WWDT); } #ifdef WDT_ENABLE_SELF_CHECK else if(g_wdt.count >= (WDT_WINDOWS_TIMEOUT/2u)) { if(g_wdt_check.flag_self_check != WDT_SELF_CHECK_DATA) { g_wdt_check.flag_self_check = WDT_SELF_CHECK_DATA; FL_WWDT_ReloadCounter(WWDT); } } #endif #endif #endif } /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void wdt_enable(void) { // }/* End of function wdt_enable*/ /*--------------------------------------------------------------------------- |Prototype : 禁 |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void wdt_disable(void) { #if WDT_OPERATION_MODE == WDT_OPERATION_NORMAL FL_IWDT_DeInit(IWDT); #endif #if WDT_OPERATION_MODE == WDT_OPERATION_WINDOWS FL_WWDT_DeInit(WWDT); #endif } /*end line*/