42#define ERROR_HANDLER __attribute__((interrupt,no_auto_psv))
43#define FAILSAFE_STACK_GUARDSIZE 8
62 __builtin_software_breakpoint();
69 __asm__
volatile (
"reset");
78 static uint8_t failsafe_stack[32];
80 " mov %[pstack], W15\n"
82 : [pstack]
"r"(failsafe_stack)
94 INTCON1bits.ADDRERR = 0;
101 INTCON4bits.SGHT = 0;
108 if(INTCON3bits.DOOVR == 1)
110 INTCON3bits.DOOVR = 0;
115 if(INTCON3bits.DAE == 1)
122 if(INTCON3bits.NAE == 1)
129 if(INTCON3bits.CAN == 1)
136 if(INTCON3bits.APLL == 1)
138 INTCON3bits.APLL = 0;
150 INTCON1bits.OSCFAIL = 0;
157 INTCON1bits.MATHERR = 0;
170 INTCON1bits.STKERR = 0;
static void use_failsafe_stack(void)
void __attribute__((weak))
void ERROR_HANDLER _MathError(void)
void ERROR_HANDLER _StackError(void)
void ERROR_HANDLER _AddressError(void)
#define FAILSAFE_STACK_GUARDSIZE
void ERROR_HANDLER _SoftTrapError(void)
static uint16_t TRAPS_error_code
void ERROR_HANDLER _HardTrapError(void)
void ERROR_HANDLER _OscillatorFail(void)
void TRAPS_halt_on_error(uint16_t code)
Stores the trap error code and waits forever. This is a weak attribute function. The user can overrid...