The Cortex-M4 Processor
ARM DUI 0553A
Copyright © 2010 ARM. All rights reserved.
2-30
ID121610
Non-Confidential
2.4.2
Fault escalation and hard faults
All faults exceptions except for HardFault have configurable exception priority, see
. Software can disable execution of the handlers for
these faults, see
System Handler Control and State Register
.
Usually, the exception priority, together with the values of the exception mask registers,
determines whether the processor enters the fault handler, and whether a fault handler can
preempt another fault handler. as described in
.
In some situations, a fault with configurable priority is treated as a HardFault. This is called
priority escalation
, and the fault is described as
escalated to HardFault
. Escalation to HardFault
occurs when:
•
A fault handler causes the same kind of fault as the one it is servicing. This escalation to
HardFault occurs because a fault handler cannot preempt itself because it must have the
same priority as the current priority level.
•
A fault handler causes a fault with the same or lower priority as the fault it is servicing.
This is because the handler for the new fault cannot preempt the currently executing fault
handler.
•
An exception handler causes a fault for which the priority is the same as or lower than the
currently executing exception.
•
A fault occurs and the handler for that fault is not enabled.
If a BusFault occurs during a stack push when entering a BusFault handler, the BusFault does
not escalate to a HardFault. This means that if a corrupted stack causes a fault, the fault handler
executes even though the stack push for the handler failed. The fault handler operates but the
stack contents are corrupted.
Note
Only Reset and NMI can preempt the fixed priority HardFault. A HardFault can preempt any
exception other than Reset, NMI, or another HardFault.
Attempt to access a coprocessor
UsageFault
NOCP
Undefined instruction
UNDEFINSTR
Attempt to enter an invalid instruction set state
b
INVSTATE
Invalid EXC_RETURN value
INVPC
Illegal unaligned load or store
UNALIGNED
Divide By 0
DIVBYZERO
a. Occurs on an access to an XN region even if the processor does not include an MPU or if the MPU is disabled.
b. Attempting to use an instruction set other than the Thumb instruction set or returns to a non load/store-multiple instruction with
ICI continuation.
Table 2-18 Faults (continued)
Fault
Handler
Bit name
Fault status register