目录

  • 1、简介
  • 2、寄存器
  • 2.1 寄存器的总结
  • 2.1.1、通用寄存器,所有的都是32位:
  • 2.1.2、特殊寄存器:
  • 2.1.3、Memory-mapped寄存器
  • 2.2 、XPSR, APSR, IPSR, and EPSR的介绍
  • 2.2.1 、Interrupt Program Status Register (IPSR)
  • 2.2.2 、Execution Program Status Register (EPSR)
  • 2.3、CONTROL寄存器
  • 4、指令集ISA
  • 4、安全状态
  • 5、异常号和异常优先级


1、简介

Cortex-M 处理器系列基于 M-Profile 架构,可为深度嵌入式系统提供低延迟和高度确定性的操作。我们最新一代的 Cortex-M 处理器是 Cortex-M55。Cortex-M55 是第一款基于 Armv8.1-M 架构的处理器,采用向量处理扩展 Arm Helium

ARM v8处理器架构_M55

Cortex-M 处理器旨在支持微控制器市场

  • 基于 RISC 架构,大多数指令在单个周期内执行
  • 编程更简单——整个应用程序都可以用 C 语言编程
  • 所需的功能比Cortex-A少

其他 ARM 内核的寄存器和 ISA变化

  • 使用的是Thumb指令,不支持 ARM 指令集(即不支持A32,不支持A64)
  • 通用寄存器仅仅SP是banked
  • 两种操作模式:Thread模式和Handler模式

不同的模式和异常模型

  • 只有两种执行模式:Thread 和 Handler 模式
  • 向量表由地址组成,不包含指令
  • 异常自动将状态(R0-R3、R12、LR、ReturnAddress、RETPSR)保存在堆栈上

不同的系统控制/内存布局

  • 内核有一个固定的内存映射
  • 无协处理器 C15 – 通过内存映射控制寄存器控制 (MRS,MSR)

ARMv8-M 是 32 位加载/存储架构

  • 唯一允许的内存访问是加载和存储
  • 大多数内部寄存器都是 32 位宽

编程模型

两种模式: Thread mode 和 Handler mode

在Thread mode下又有2个执行级别: privileged 和 Unprivileged

ARM v8处理器架构_ARM v8处理器架构_02

2、寄存器
2.1 寄存器的总结

ARM v8处理器架构_cortex-m_03

2.1.1、通用寄存器,所有的都是32位:
  • R0-R12 (Rn).
  • R13 堆栈寄存器 (SP).
  • R14 链接寄存器 (LR).
  • R15 程序计数器 (PC)
2.1.2、特殊寄存器:
  • 掩码(MASK)寄存器:
    (1)、异常掩码寄存器:PRIMASK
    (2)、优先级掩码寄存器:BASEPRI.
    (3)、错误掩码寄存器:FAULTMASK
  • 控制寄存器:CONTROL
  • 2个栈指针限制寄存器:MSPLIM 和 PSPLIM
  • 程序状态寄存器:Program Status Register (XPSR), 包含:
    (1)、Application Program Status Register (APSR).
    (2)、Interrupt Program Status Register (IPSR).
    (3)、Execution Program Status Register (EPSR)
2.1.3、Memory-mapped寄存器

除此之外,还有一些memory-mapped的寄存器

2.2 、XPSR, APSR, IPSR, and EPSR的介绍

ARM v8处理器架构_M55_04


msrmrs 可以分段访问这些寄存器

ARM v8处理器架构_M55_05

2.2.1 、Interrupt Program Status Register (IPSR)
  • 当PE在Thread模式时, IPSR值是0
  • 当PE在Handler模式时,
    (1) 当一个异常进入是IPSR 保存着正在处理的异常的异常号
    (2) 当Secure state到Non-secure state 调用时,IPSR值是1
  • 使用MRS指令强行修改IPSR, 不会生效的
2.2.2 、Execution Program Status Register (EPSR)

主要是EPSR.T 比特位

  • 0 - 任何指令都将产生 INVSTATE错误 或 HardFault
  • 指令集使用T32
2.3、CONTROL寄存器
  • 仅仅Privileged execution状态可以写控制寄存器,Privileged和unPrivileged状态都可以读控制寄存器。
  • 该体系结构需要一个Context同步事件来保证对CONTROL寄存器更改的可见性
  • 当一个异常进入或者退出时,硬件会自动修改CONTROL.SPSEL, 当PE在Thread mode时CONTROL.SPSEL可用于选择栈指针
4、指令集ISA

所有 Cortex-M 处理器都支持称为 Thumb 的指令集。 当 Thumb-2 技术可用时,完整的 Thumb 指令集在扩展时变得相当大。 但是,不同的 Cortex-M 处理器支持 Thumb ISA 中可用的不同指令子集,如下图所示:

ARM v8处理器架构_STM32_06

4、安全状态

ARM v8处理器架构_arm_07

  • 如果实施了安全扩展,则标记为安全的内存区域和其他关键资源只有在 PE 以安全状态执行时才能访问
  • 如果实施了安全扩展, 则在 Cold reset 和 Warm reset时,PE将进入Secure状态
  • 如果实施了安全扩展, 则在 Cold reset 和 Warm reset时,PE将进入NON-Secure状态

实施了安全扩展后,下列寄存器都是banked by security:

  • 通用寄存器中的R13(SP)
  • 特殊寄存器中的 : MASK寄存器(PRIMASK, BASEPRI, FAULTMASK)、CONTROL 寄存器、栈指针限制寄存器(MSPLIM ,PSPLIM)
  • System Control Space (SCS)

MRSMSR指令编码中的bit[7]表示操作的是哪组寄存器(Secure or NON-Secure)

ARM v8处理器架构_arm_08


cortex-A Trustzone 和 cortex-M Trustzone的对比:

ARM v8处理器架构_ARM v8处理器架构_09


在cortex-M上,双系统的切换,使用的是 Secure Gateway (SG) 指令,但只允许在特殊的memory上调用SG,即使NSC(non-secure callable)

5、异常号和异常优先级

cortex-M中内置一个Nested Vectored Interrupt Controller (NVIC) 中断控制器

ARM v8处理器架构_ARM v8处理器架构_10


cortex-M的异常和中断具有以下优先级

ARM v8处理器架构_STM32_11


ARM v8处理器架构_arm_12