diff --git a/Core/Source/ivec_mcal_wdt.c b/Core/Source/ivec_mcal_wdt.c index 047dfba..38bfbc1 100644 --- a/Core/Source/ivec_mcal_wdt.c +++ b/Core/Source/ivec_mcal_wdt.c @@ -74,31 +74,29 @@ IVEC_McalStatus_e xMCAL_WatchdogInit(MCAL_WWDT_TIMER timer) break; default: return IVEC_MCAL_STATUS_INIT_FAIL; } - DL_WWDT_disablePower(WATCHDOG_TIMER); - if(b_WDInitFlag == false) - { - /* Set Window0 as active window */ - DL_WWDT_setActiveWindow(WATCHDOG_TIMER, DL_WWDT_WINDOW0); - - DL_WWDT_initWatchdogMode(WATCHDOG_TIMER, Clk_Div,Tmr_Per, DL_WWDT_RUN_IN_SLEEP, DL_WWDT_WINDOW_PERIOD_0, DL_WWDT_WINDOW_PERIOD_0); // DL_WWDT_WINDOW_PERIOD_0 is for selecting the closed percentage of the watchdog - if(DL_WWDT_isPowerEnabled(WATCHDOG_TIMER)) + if(b_WDInitFlag == false) { - while ((DL_SYSCTL_getClockStatus() & (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD))!= (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD)); + /* Set Window0 as active window */ + DL_WWDT_setActiveWindow(WATCHDOG_TIMER, DL_WWDT_WINDOW0); + + DL_WWDT_initWatchdogMode(WATCHDOG_TIMER, Clk_Div,Tmr_Per, DL_WWDT_RUN_IN_SLEEP, DL_WWDT_WINDOW_PERIOD_0, DL_WWDT_WINDOW_PERIOD_0); // DL_WWDT_WINDOW_PERIOD_0 is for selecting the closed percentage of the watchdog + if(DL_WWDT_isPowerEnabled(WATCHDOG_TIMER)) + { + while ((DL_SYSCTL_getClockStatus() & (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD))!= (DL_SYSCTL_CLK_STATUS_LFOSC_GOOD)); + } + else + { + + return IVEC_MCAL_STATUS_TIMEOUT; + } + b_WDInitFlag = true; + + return IVEC_MCAL_STATUS_SUCCESS; } else { - - return IVEC_MCAL_STATUS_TIMEOUT; + return IVEC_MCAL_STATUS_INIT_FAIL; } - b_WDInitFlag = true; - - return IVEC_MCAL_STATUS_SUCCESS; - } - else - {; - return IVEC_MCAL_STATUS_INIT_FAIL; - } - } IVEC_McalStatus_e xMCAL_WatchdogDeInit(void) diff --git a/utils/utils.c b/utils/utils.c index e0cd99f..09c65bb 100644 --- a/utils/utils.c +++ b/utils/utils.c @@ -162,7 +162,9 @@ void vMCAL_mcuInit(void) { SYSCFG_DL_initPower(); vMCAL_WatchdogEnablePower(); - xMCAL_WatchdogInit(MCAL_WDT_4_SEC_TIMER); // Timer Inputs can be : 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 in seconds + // if watchDog is not initilized previoulsy in bootloader code then only initilize watchdog with 4sec timer + if(bMCAL_IsWatchdogRunning()==false) + xMCAL_WatchdogInit(MCAL_WDT_4_SEC_TIMER); // Timer Inputs can be : 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 in seconds SYSCFG_DL_GPIO_init(); } @@ -228,3 +230,8 @@ void vMCAL_WatchdogEnablePower(void) { DL_WWDT_enablePower(WATCHDOG_TIMER); } + +bool bMCAL_IsWatchdogRunning(void) +{ + return DL_WWDT_isRunning(WATCHDOG_TIMER); +} diff --git a/utils/utils.h b/utils/utils.h index 1e2c0a7..f048ebc 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -109,5 +109,6 @@ IVEC_McalStatus_e xMCAL_vrefInit(void); void vMCAL_WDG_Refresh(void); void vMCAL_WatchdogDisablePower(void); void vMCAL_WatchdogEnablePower(void); +bool bMCAL_IsWatchdogRunning(void); #endif /* UTILS_IVEC_UTILS_H_ */