diff options
Diffstat (limited to 'ports/stm32/boardctrl.c')
| -rw-r--r-- | ports/stm32/boardctrl.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ports/stm32/boardctrl.c b/ports/stm32/boardctrl.c index 02a375999..406a98381 100644 --- a/ports/stm32/boardctrl.c +++ b/ports/stm32/boardctrl.c @@ -24,6 +24,8 @@ * THE SOFTWARE. */ +#include <string.h> + #include "py/runtime.h" #include "py/objstr.h" #include "py/mphal.h" @@ -33,6 +35,26 @@ #include "led.h" #include "usrsw.h" +NORETURN void boardctrl_fatal_error(const char *msg) { + for (volatile uint delay = 0; delay < 10000000; delay++) { + } + led_state(1, 1); + led_state(2, 1); + led_state(3, 1); + led_state(4, 1); + mp_hal_stdout_tx_strn("\nFATAL ERROR:\n", 14); + mp_hal_stdout_tx_strn(msg, strlen(msg)); + for (uint i = 0;;) { + led_toggle(((i++) & 3) + 1); + for (volatile uint delay = 0; delay < 10000000; delay++) { + } + if (i >= 16) { + // to conserve power + __WFI(); + } + } +} + STATIC void flash_error(int n) { for (int i = 0; i < n; i++) { led_state(PYB_LED_RED, 1); |
