diff options
| author | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-05-13 09:17:43 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-05-15 15:29:04 -0700 |
| commit | 974847ac8d9fc2f64b43953da1731612840bb171 (patch) | |
| tree | 5d675c02108514a32492ae431ac95d8ac8961cea /atmel-samd/asf/sam0/utils/cmsis/samd21/source | |
| parent | 790c38e18c2b6417a05155ed7697a5bf29f1d31e (diff) | |
atmel-samd: Add a safe mode which detects hard faults and reboots without running user code again.
Diffstat (limited to 'atmel-samd/asf/sam0/utils/cmsis/samd21/source')
| -rw-r--r-- | atmel-samd/asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/atmel-samd/asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c b/atmel-samd/asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c index 8e14b991f..487712270 100644 --- a/atmel-samd/asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c +++ b/atmel-samd/asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c @@ -275,6 +275,8 @@ __attribute__ ((used))void Reset_Handler(void) while (true); } +extern uint32_t _ezero; + void HardFault_Handler(void) { #ifdef ENABLE_MICRO_TRACE_BUFFER @@ -282,6 +284,14 @@ void HardFault_Handler(void) // loop below. REG_MTB_MASTER = 0x00000000 + 6; #endif +#ifdef CIRCUITPY_CANARY_WORD + // If the canary is intact, then kill it and reset so we have a chance to + // read our files. + if (_ezero == CIRCUITPY_CANARY_WORD) { + _ezero = CIRCUITPY_SAFE_RESTART_WORD; + NVIC_SystemReset(); + } +#endif while(true) {} } |
