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

Merge 'Fix watchdog bootloop'

See merge request card10/firmware!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