summaryrefslogtreecommitdiff
path: root/ports/stm32/boardctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/boardctrl.c')
-rw-r--r--ports/stm32/boardctrl.c22
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);