diff --git a/epicardium/main.c b/epicardium/main.c index c7f58a05c889fc0c47eafb97d1f2995a8afce881..84dea0319fa3a7302b3e00b70884b8cf77ded74d 100644 --- a/epicardium/main.c +++ b/epicardium/main.c @@ -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(); diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c index 6148513eb03014b19ff01873701ae3aedefb582f..cb983dae9ad8a696596c28f5317f7587574f1e7b 100644 --- a/epicardium/modules/hardware.c +++ b/epicardium/modules/hardware.c @@ -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(); diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h index 144b18fb765a78580d66a8e8b59a9593d8127a77..9eea0cb6130dbe3e94492e402620100714177af5 100644 --- a/epicardium/modules/modules.h +++ b/epicardium/modules/modules.h @@ -36,6 +36,7 @@ int personal_state_enabled(); void vPmicTask(void *pvParameters); /* ---------- Watchdog ----------------------------------------------------- */ +void watchdog_init(); void watchdog_clearer_init(); /* Critical battery voltage */ diff --git a/epicardium/modules/watchdog.c b/epicardium/modules/watchdog.c index a538035d685673ff1e3976037211c1e8e766bb3c..7256d21b565c5735371e33012b506e90b292b431 100644 --- a/epicardium/modules/watchdog.c +++ b/epicardium/modules/watchdog.c @@ -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,