目录
- 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
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
2、寄存器
2.1 寄存器的总结
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的介绍
msr
、mrs
可以分段访问这些寄存器
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 中可用的不同指令子集,如下图所示:
4、安全状态
- 如果实施了安全扩展,则标记为安全的内存区域和其他关键资源只有在 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)
MRS
和MSR
指令编码中的bit[7]表示操作的是哪组寄存器(Secure or NON-Secure)
cortex-A Trustzone 和 cortex-M Trustzone的对比:
在cortex-M上,双系统的切换,使用的是 Secure Gateway (SG) 指令,但只允许在特殊的memory上调用SG,即使NSC(non-secure callable)
5、异常号和异常优先级
cortex-M中内置一个Nested Vectored Interrupt Controller (NVIC) 中断控制器
cortex-M的异常和中断具有以下优先级