【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】

发布时间:2024年01月19日

问题背景

由于在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 at 0xE002ED2A.
    The location 0xE002ED2A is RES0 to software executing in Non-secure state and the debugger.

HFSR (硬件故障状态寄存器)

在这里插入图片描述
HFSR 寄存器提供有关所有硬件故障的信息。它包括字段,如调试事件或向量表硬故障。

BFAR (总线故障地址寄存器)

在这里插入图片描述

BFSRBFARVALID 位被设置时,BFAR 寄存器包含了导致总线故障的地址。
在这里插入图片描述

MMFAR (内存管理故障地址寄存器)

在这里插入图片描述

MMFSRMMARVALID 位被设置时,MMFAR 寄存器包含了导致内存管理故障的地址。
在这里插入图片描述

文章来源:https://blog.csdn.net/sinat_32960911/article/details/135667798
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。