diff --git a/cpu/sam3x8e/include/cpu-conf.h b/cpu/sam3x8e/include/cpu-conf.h index 70c774f9cb..bf5d646d7f 100644 --- a/cpu/sam3x8e/include/cpu-conf.h +++ b/cpu/sam3x8e/include/cpu-conf.h @@ -50,6 +50,16 @@ extern "C" { #endif /** @} */ +/** + * @brief Definition of different panic modes + */ +typedef enum { + HARD_FAULT, + BUS_FAULT, + USAGE_FAULT, + DUMMY_HANDLER +} panic_t; + #ifdef __cplusplus } #endif diff --git a/cpu/sam3x8e/startup.c b/cpu/sam3x8e/startup.c index dff540fae5..0df580f59c 100644 --- a/cpu/sam3x8e/startup.c +++ b/cpu/sam3x8e/startup.c @@ -18,10 +18,9 @@ * @} */ -#include #include -#include "board.h" +#include "crash.h" /** * memory markers as defined in the linker script @@ -81,7 +80,7 @@ void reset_handler(void) */ void dummy_handler(void) { - while (1) {asm ("nop");} + core_panic(DUMMY_HANDLER, "DUMMY HANDLER"); } void isr_nmi(void) @@ -101,23 +100,17 @@ void isr_debug_mon(void) void isr_hard_fault(void) { - puts("\n### HARD FAULT ###\n"); - while (1) { - LED_RED_TOGGLE; - for (int i = 0; i < 2000000; i++) { - asm ("nop"); - } - } + core_panic(HARD_FAULT, "HARD FAULT"); } void isr_bus_fault(void) { - while (1) {asm ("nop");} + core_panic(BUS_FAULT, "BUS FAULT"); } void isr_usage_fault(void) { - while (1) {asm ("nop");} + core_panic(USAGE_FAULT, "USAGE FAULT"); } /* Cortex-M specific interrupt vectors */