32void logHardFault(uint32_t type, uintptr_t faultAddress,
void* sp,
struct port_extctx* ctx, uint32_t csfr);
37 struct port_extctx ctx;
38 memcpy(&ctx, sp,
sizeof(
struct port_extctx));
44 volatile uint32_t faultAddress = SCB->BFAR;
48 volatile bool isFaultPrecise = ((SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos) & (1 << 1) ? true :
false);
49 volatile bool isFaultImprecise = ((SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos) & (1 << 2) ? true :
false);
50 volatile bool isFaultOnUnstacking = ((SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos) & (1 << 3) ? true :
false);
51 volatile bool isFaultOnStacking = ((SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos) & (1 << 4) ? true :
false);
52 volatile bool isFaultAddressValid = ((SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos) & (1 << 7) ? true :
false);
54 (void)isFaultImprecise;
55 (void)isFaultOnUnstacking;
56 (void)isFaultOnStacking;
57 (void)isFaultAddressValid;
59 logHardFault(faultType, faultAddress, sp, &ctx, SCB->CFSR >> SCB_CFSR_BUSFAULTSR_Pos);
62 if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
72 struct port_extctx ctx;
73 memcpy(&ctx, sp,
sizeof(
struct port_extctx));
80 volatile bool isUndefinedInstructionFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 0) ? true :
false);
81 volatile bool isEPSRUsageFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 1) ? true :
false);
82 volatile bool isInvalidPCFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 2) ? true :
false);
83 volatile bool isNoCoprocessorFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 3) ? true :
false);
84 volatile bool isUnalignedAccessFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 8) ? true :
false);
85 volatile bool isDivideByZeroFault = ((SCB->CFSR >> SCB_CFSR_USGFAULTSR_Pos) & (1 << 9) ? true :
false);
86 (void)isUndefinedInstructionFault;
87 (void)isEPSRUsageFault;
88 (void)isInvalidPCFault;
89 (void)isNoCoprocessorFault;
90 (void)isUnalignedAccessFault;
91 (void)isDivideByZeroFault;
96 if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
106 struct port_extctx ctx;
107 memcpy(&ctx, sp,
sizeof(
struct port_extctx));
113 volatile uint32_t faultAddress = SCB->MMFAR;
117 volatile bool isInstructionAccessViolation = ((SCB->CFSR >> SCB_CFSR_MEMFAULTSR_Pos) & (1 << 0) ? true :
false);
118 volatile bool isDataAccessViolation = ((SCB->CFSR >> SCB_CFSR_MEMFAULTSR_Pos) & (1 << 1) ? true :
false);
119 volatile bool isExceptionUnstackingFault = ((SCB->CFSR >> SCB_CFSR_MEMFAULTSR_Pos) & (1 << 3) ? true :
false);
120 volatile bool isExceptionStackingFault = ((SCB->CFSR >> SCB_CFSR_MEMFAULTSR_Pos) & (1 << 4) ? true :
false);
121 volatile bool isFaultAddressValid = ((SCB->CFSR >> SCB_CFSR_MEMFAULTSR_Pos) & (1 << 7) ? true :
false);
122 (void)isInstructionAccessViolation;
123 (void)isDataAccessViolation;
124 (void)isExceptionUnstackingFault;
125 (void)isExceptionStackingFault;
126 (void)isFaultAddressValid;
128 logHardFault(faultType, faultAddress, sp, &ctx, SCB->CFSR);
131 if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk)
void UsageFault_Handler_C(void *sp)
void MemManage_Handler_C(void *sp)
void logHardFault(uint32_t type, uintptr_t faultAddress, void *sp, struct port_extctx *ctx, uint32_t csfr)
void HardFault_Handler_C(void *sp)