Skip to content
Snippets Groups Projects
Commit 0a535cf0 authored by rahix's avatar rahix
Browse files

Merge 'Fix watchdog bootloop'

See merge request !200
parents a5c5e87e ab363fde
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,8 @@
int main(void)
{
watchdog_init();
LOG_INFO("startup", "Epicardium startup ...");
LOG_INFO("startup", "Version " CARD10_VERSION);
......@@ -127,14 +129,6 @@ int main(void)
abort();
}
/* Watchdog petting */
#if 0
/*
* Disabled for this release.
*/
watchdog_clearer_init();
#endif
LOG_DEBUG("startup", "Starting FreeRTOS ...");
vTaskStartScheduler();
......
......@@ -32,24 +32,7 @@ int hardware_early_init(void)
/*
* Watchdog timer
*/
#if 0
/*
* Disabled for this release.
*/
sys_cfg_wdt_t wdt_cfg = NULL;
WDT_Init(MXC_WDT0, wdt_cfg);
if (WDT_GetResetFlag(MXC_WDT0)) {
WDT_ClearResetFlag(MXC_WDT0);
LOG_INFO("watchdog", "Reset due to watchdog timeout");
}
WDT_Enable(MXC_WDT0, 1);
WDT_SetResetPeriod(
MXC_WDT0,
WDT_PERIOD_2_27); /* Clocked by PCLK at 50MHz, reset at 2^27 ticks = 2.7 seconds */
WDT_EnableReset(MXC_WDT0, 1);
#endif
watchdog_init();
/*
* I2C bus for onboard peripherals (ie. PMIC, BMA400, BHI160, BME680,
......@@ -207,6 +190,9 @@ int hardware_early_init(void)
*/
int hardware_init(void)
{
/* Watchdog clearer software timer */
watchdog_clearer_init();
/* Light Sensor */
LOG_DEBUG("init", "Starting light sensor ...");
epic_light_sensor_run();
......
......@@ -36,6 +36,7 @@ int personal_state_enabled();
void vPmicTask(void *pvParameters);
/* ---------- Watchdog ----------------------------------------------------- */
void watchdog_init();
void watchdog_clearer_init();
/* Critical battery voltage */
......
......@@ -14,8 +14,27 @@ static void watchdog_clearer_callback()
WDT_ResetTimer(MXC_WDT0);
}
void watchdog_init()
{
sys_cfg_wdt_t wdt_cfg = NULL;
WDT_Init(MXC_WDT0, wdt_cfg);
if (WDT_GetResetFlag(MXC_WDT0)) {
WDT_ClearResetFlag(MXC_WDT0);
LOG_INFO("watchdog", "Last reset was due to watchdog timeout");
}
WDT_Enable(MXC_WDT0, 1);
WDT_SetResetPeriod(
MXC_WDT0,
WDT_PERIOD_2_28); /* Clocked by PCLK at 50MHz, reset at 2^28 ticks = 5.4 seconds */
WDT_EnableReset(MXC_WDT0, 1);
}
void watchdog_clearer_init()
{
WDT_ResetTimer(MXC_WDT0);
clearer_timer = xTimerCreateStatic(
"watchdog_clearer_timer",
CLEAR_PERIOD,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment