fix: add conditional watchdog init to prevent reinitialization if already running in bootloader code

stable
Tej Sharma 2025-07-28 14:48:46 +05:30
parent f346070551
commit ca3d7ec555
3 changed files with 27 additions and 21 deletions

View File

@ -74,31 +74,29 @@ IVEC_McalStatus_e xMCAL_WatchdogInit(MCAL_WWDT_TIMER timer)
break; break;
default: return IVEC_MCAL_STATUS_INIT_FAIL; default: return IVEC_MCAL_STATUS_INIT_FAIL;
} }
DL_WWDT_disablePower(WATCHDOG_TIMER); if(b_WDInitFlag == false)
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))
{ {
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 else
{ {
return IVEC_MCAL_STATUS_INIT_FAIL;
return IVEC_MCAL_STATUS_TIMEOUT;
} }
b_WDInitFlag = true;
return IVEC_MCAL_STATUS_SUCCESS;
}
else
{;
return IVEC_MCAL_STATUS_INIT_FAIL;
}
} }
IVEC_McalStatus_e xMCAL_WatchdogDeInit(void) IVEC_McalStatus_e xMCAL_WatchdogDeInit(void)

View File

@ -162,7 +162,9 @@ void vMCAL_mcuInit(void)
{ {
SYSCFG_DL_initPower(); SYSCFG_DL_initPower();
vMCAL_WatchdogEnablePower(); 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(); SYSCFG_DL_GPIO_init();
} }
@ -228,3 +230,8 @@ void vMCAL_WatchdogEnablePower(void)
{ {
DL_WWDT_enablePower(WATCHDOG_TIMER); DL_WWDT_enablePower(WATCHDOG_TIMER);
} }
bool bMCAL_IsWatchdogRunning(void)
{
return DL_WWDT_isRunning(WATCHDOG_TIMER);
}

View File

@ -109,5 +109,6 @@ IVEC_McalStatus_e xMCAL_vrefInit(void);
void vMCAL_WDG_Refresh(void); void vMCAL_WDG_Refresh(void);
void vMCAL_WatchdogDisablePower(void); void vMCAL_WatchdogDisablePower(void);
void vMCAL_WatchdogEnablePower(void); void vMCAL_WatchdogEnablePower(void);
bool bMCAL_IsWatchdogRunning(void);
#endif /* UTILS_IVEC_UTILS_H_ */ #endif /* UTILS_IVEC_UTILS_H_ */