Cortex-M33 浮点单元(FPU)深度解析
1. 相关寄存器介绍
1.1 浮点上下文地址寄存器(FPU->FPCAR)
为了减少中断延迟,Cortex - M 处理器引入了惰性堆叠(Lazy Stacking)特性。当异常发生且当前上下文存在活跃的浮点上下文(即 FPU 已被使用)时,异常堆栈帧会包含整数寄存器组(R0 - R3、R12、LR、返回地址和 xPSR)以及 FPU 寄存器(S0 - S15、FPSCR,若实现了 TrustZone 且安全软件也使用 FPU,则还包括 S16 - S31)。
FPCAR 寄存器是惰性堆叠机制的一部分,它保存着堆栈帧中为 FPU 寄存器分配的空间地址。这样,当需要时,惰性堆叠机制就知道将 FPU 寄存器推送到何处。由于堆栈帧是双字对齐的,所以 FPCAR 寄存器的第 2 到 0 位未被使用。当实现了 TrustZone 安全扩展时,FPCAR 寄存器会在安全状态之间进行分组。在惰性堆叠期间发生异常时,FPCAR 会更新为堆栈帧中 FPU S0 寄存器空间的地址。
1.2 浮点默认状态控制寄存器(FPU->FPDSCR)
FPDSCR 寄存器保存着浮点状态控制数据的默认配置信息(即操作模式)。在异常进入时,这些值会被复制到 FPSCR 中。系统复位时,AHP、DN、FZ 和 RMode 会被复位为 0。当实现了 TrustZone 安全扩展时,该寄存器会在安全状态之间进行分组。
在复杂系统中,可能会有不同类型的应用程序并行运行,每个应用程序可能具有不同的 FPU 配置(例如舍入模式)。为了应对这种情况,FPU 配置需要在异常进入和异常返回之间自动切换。F
超级会员免费看
订阅专栏 解锁全文
3113

被折叠的 条评论
为什么被折叠?



