From 900463ee5c360f1def5f4d1bcd6755bae4a5c1ce Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 6 Oct 2012 17:35:11 -0700 Subject: [PATCH] Added fault handler code which can be optionally compiled/linked for debugging. --- firmware/common/fault_handler.c | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 firmware/common/fault_handler.c diff --git a/firmware/common/fault_handler.c b/firmware/common/fault_handler.c new file mode 100644 index 00000000..f82742f7 --- /dev/null +++ b/firmware/common/fault_handler.c @@ -0,0 +1,55 @@ +/* + * Copyright 2012 Jared Boone + * + * This file is part of HackRF. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +__attribute__((naked)) +void hard_fault_handler(void) { + __asm__("TST LR, #4"); + __asm__("ITE EQ"); + __asm__("MRSEQ R0, MSP"); + __asm__("MRSNE R0, PSP"); + __asm__("B hard_fault_handler_c"); +} + +void hard_fault_handler_c(uint32_t* args) { + // args[0-7]: r0, r1, r2, r3, r12, lr, pc, psr + // Other interesting registers to examine: + // CFSR: Configurable Fault Status Register + // HFSR: Hard Fault Status Register + // DFSR: Debug Fault Status Register + // AFSR: Auxiliary Fault Status Register + // MMAR: MemManage Fault Address Register + // BFAR: Bus Fault Address Register + while(1); +} + +void mem_manage_handler() { + while(1); +} + +void bus_fault_handler() { + while(1); +} + +void usage_fault_handler() { + while(1); +}