diff options
| author | Scott Shawcroft <scott@adafruit.com> | 2020-06-02 10:33:24 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-02 10:33:24 -0700 |
| commit | db04fd1725d375d7f9110c35f9346b32cb99b19e (patch) | |
| tree | 652ffb11481a29bd424de8de05a8ab42ab042b99 /supervisor | |
| parent | aae7a459f37c284445eb68b5d691238f212a12a4 (diff) | |
| parent | 7e632c9414073a36db0b74d891ee0408a2fdb565 (diff) | |
Merge pull request #2933 from simmel-project/wdt-nrf
Add Watchdog timer and add support for NRF watchdog
Diffstat (limited to 'supervisor')
| -rw-r--r-- | supervisor/shared/safe_mode.c | 3 | ||||
| -rw-r--r-- | supervisor/shared/safe_mode.h | 1 | ||||
| -rw-r--r-- | supervisor/shared/tick.c | 10 |
3 files changed, 13 insertions, 1 deletions
diff --git a/supervisor/shared/safe_mode.c b/supervisor/shared/safe_mode.c index c957aee53..a167ab392 100644 --- a/supervisor/shared/safe_mode.c +++ b/supervisor/shared/safe_mode.c @@ -160,6 +160,9 @@ void print_safe_mode_message(safe_mode_t reason) { case MEM_MANAGE: serial_write_compressed(translate("Invalid memory access.")); break; + case WATCHDOG_RESET: + serial_write_compressed(translate("Watchdog timer expired.")); + break; default: serial_write_compressed(translate("Unknown reason.")); break; diff --git a/supervisor/shared/safe_mode.h b/supervisor/shared/safe_mode.h index 5b09c4b54..c160739ae 100644 --- a/supervisor/shared/safe_mode.h +++ b/supervisor/shared/safe_mode.h @@ -41,6 +41,7 @@ typedef enum { NORDIC_SOFT_DEVICE_ASSERT, FLASH_WRITE_FAIL, MEM_MANAGE, + WATCHDOG_RESET, } safe_mode_t; safe_mode_t wait_for_safe_mode_reset(void); diff --git a/supervisor/shared/tick.c b/supervisor/shared/tick.c index dc38e76f6..23516799f 100644 --- a/supervisor/shared/tick.c +++ b/supervisor/shared/tick.c @@ -44,6 +44,13 @@ static volatile uint64_t PLACE_IN_DTCM_BSS(background_ticks); #include "shared-bindings/microcontroller/__init__.h" +#if CIRCUITPY_WATCHDOG +#include "shared-bindings/watchdog/__init__.h" +#define WATCHDOG_EXCEPTION_CHECK() (MP_STATE_VM(mp_pending_exception) == &mp_watchdog_timeout_exception) +#else +#define WATCHDOG_EXCEPTION_CHECK() 0 +#endif + void supervisor_tick(void) { #if CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS > 0 filesystem_tick(); @@ -96,7 +103,8 @@ void mp_hal_delay_ms(mp_uint_t delay) { RUN_BACKGROUND_TASKS; // Check to see if we've been CTRL-Ced by autoreload or the user. if(MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)) || - MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception))) { + MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_reload_exception)) || + WATCHDOG_EXCEPTION_CHECK()) { break; } remaining = end_tick - port_get_raw_ticks(NULL); |
