mtkernel_3/kernel/sysdepend/cpu/core/armv7m/exc_hdr.c | bare source | permlink (0.01 seconds) |
1: /* 2: *---------------------------------------------------------------------- 3: * micro T-Kernel 3.00.03 4: * 5: * Copyright (C) 2006-2021 by Ken Sakamura. 6: * This software is distributed under the T-License 2.2. 7: *---------------------------------------------------------------------- 8: * 9: * Released by TRON Forum(http://www.tron.org) at 2021/03/31. 10: * 11: *---------------------------------------------------------------------- 12: */ 13: 14: #include <sys/machine.h> 15: #ifdef CPU_CORE_ARMV7M 16: 17: /* 18: * exc_hdr.c (ARMv7-M) 19: * Exception handler 20: */ 21: 22: #include <tk/tkernel.h> 23: #include <tm/tmonitor.h> 24: #include <kernel.h> 25: #include "../../../sysdepend.h" 26: 27: #if (USE_EXCEPTION_DBG_MSG && USE_TMONITOR) 28: #define EXCEPTION_DBG_MSG(a) tm_putstring((UB*)a) 29: #else 30: #define EXCEPTION_DBG_MSG(a) 31: #endif 32: 33: /* 34: * NMI handler 35: */ 36: WEAK_FUNC EXPORT void NMI_Handler(void) 37: { 38: EXCEPTION_DBG_MSG("NMI\n"); 39: while(1); 40: } 41: 42: /* 43: * Hard fault handler 44: */ 45: WEAK_FUNC EXPORT void HardFault_Handler(void) 46: { 47: #if (USE_EXCEPTION_DBG_MSG && USE_TMONITOR) 48: 49: UW hfsr, cfsr; 50: ID ctskid; 51: 52: hfsr = *(_UW *)SCB_HFSR; 53: if(knl_ctxtsk != NULL) { 54: ctskid = knl_ctxtsk->tskid; 55: } else { 56: ctskid = 0; 57: } 58: 59: if(hfsr & 0x40000000) { 60: cfsr = *(_UW*)SCB_CFSR; 61: tm_printf((UB*)"*** Hard fault *** ctxtsk:%d HFSR:%x CFSR:%x\n", ctskid, hfsr, cfsr); 62: } else { 63: tm_printf((UB*)"*** Hard fault *** ctxtsk:%d HFSR:%x%x\n", ctskid, hfsr); 64: } 65: #endif 66: while(1); 67: } 68: 69: /* 70: * MPU Fault Handler 71: */ 72: WEAK_FUNC EXPORT void MemManage_Handler(void) 73: { 74: EXCEPTION_DBG_MSG("MPU Fault\n"); 75: while(1); 76: } 77: 78: /* 79: * Bus Fault Handler 80: */ 81: WEAK_FUNC EXPORT void BusFault_Handler(void) 82: { 83: EXCEPTION_DBG_MSG("Bus Fault\n"); 84: while(1); 85: } 86: 87: /* 88: * Usage Fault Handler 89: */ 90: WEAK_FUNC EXPORT void UsageFault_Handler(void) 91: { 92: EXCEPTION_DBG_MSG("Usage Fault\n"); 93: while(1); 94: } 95: 96: /* 97: * Svcall 98: */ 99: WEAK_FUNC EXPORT void Svcall_Handler(void) 100: { 101: EXCEPTION_DBG_MSG("SVCall\n"); 102: while(1); 103: } 104: 105: /* 106: * Debug Monitor 107: */ 108: WEAK_FUNC EXPORT void DebugMon_Handler(void) 109: { 110: EXCEPTION_DBG_MSG("Debug Monitor\n"); 111: while(1); 112: } 113: 114: /* 115: * Default Handler 116: */ 117: WEAK_FUNC EXPORT void Default_Handler(void) 118: { 119: #if (USE_EXCEPTION_DBG_MSG && USE_TMONITOR) 120: INT i; 121: _UW *icpr; 122: 123: icpr = (_UW*)NVIC_ICPR_BASE; 124: 125: EXCEPTION_DBG_MSG("Undefine Exceptio ICPR: "); 126: for(i=0; i < 8; i++) { 127: tm_printf((UB*)"%x ", *icpr++); 128: } 129: EXCEPTION_DBG_MSG("\n"); 130: #endif 131: while(1); 132: } 133: 134: #endif /* CPU_CORE_ACM4F */