请阅读【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】
文章目录
- 问题背景
- Cortex-M33 Fault 寄存器介绍
- xPSR (程序状态寄存器)
- CFSR (可配置故障状态寄存器)
- HFSR (硬件故障状态寄存器)
- BFAR (总线故障地址寄存器)
- MMFAR (内存管理故障地址寄存器)
问题背景
由于在RA4M2(Cortex-M33)移植RT-Thread OS的时候遇到了 Hardfault,不知道如何分析错误原因,后参考以前写的文章【ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析】 来查找原因。
Cortex-M33 Fault 寄存器介绍
在 ARM Cortex-M33 微控制器上,当发生异常或错误时,一些特殊的寄存器提供了用于调试和错误处理的关键信息。这些寄存器包括程序状态寄存器 (xPSR)、可配置故障状态寄存器 (CFSR)、硬件故障状态寄存器 (HFSR)、总线故障地址寄存器 (BFAR) 和内存管理故障地址寄存器 (MMFAR) 以及 UFSR(UsageFault Status Register)。
xPSR (程序状态寄存器)
xPSR 寄存器包含多个状态字段,包括程序状态、中断或异常返回状态以及其他系统状态。
其中最重要的字段是:
- APSR (应用程序状态子字段): 包括 Negative, Zero, Carry, Overflow 和 Saturation 状态标志。
- IPSR (中断程序状态子字段): 表示当前激活的异常编号。
- EPSR (执行程序状态子字段): 包括 Thumb状态位,它应始终被设置为1,因为 Cortex-M33 只能执行 Thumb 指令集。
CFSR (可配置故障状态寄存器)
32-bit read/write-one-to-clear register located at 0xE000ED28.
CFSR 寄存器用于提供有关内存管理、总线和使用错误的详细信息。它分为三个部分:
- MFSR (内存管理故障状态寄存器子字段): 提供内存管理故障信息,例如违反内存保护单元 (MPU) 规则。
- BFSR (总线故障状态寄存器子字段): 提供总线访问故障信息,如非法地址访问或总线错误。
- UFSR (使用错误状态寄存器子字段): 提供特定错误的信息,例如非法指令、未对齐的访问或除零操作。
Secure software can access the Non-secure version of this register via UFSR_NS located at0xE002ED2A
.
The location0xE002ED2A
is RES0 to software executing in Non-secure state and the debugger.
HFSR (硬件故障状态寄存器)
HFSR 寄存器提供有关所有硬件故障的信息。它包括字段,如调试事件或向量表硬故障。
BFAR (总线故障地址寄存器)
当 BFSR 的 BFARVALID 位被设置时,BFAR 寄存器包含了导致总线故障的地址。
MMFAR (内存管理故障地址寄存器)
当 MMFSR 的 MMARVALID 位被设置时,MMFAR 寄存器包含了导致内存管理故障的地址。