ARMV8-M学习笔记-入门

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

说明:
本文总结的仅限于armv8-M架构,实现main extension,支持Trustzone

目录

        • 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-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
在这里插入图片描述

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的介绍

在这里插入图片描述
msrmrs 可以分段访问这些寄存器
在这里插入图片描述

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)

MRSMSR指令编码中的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的异常和中断具有以下优先级
在这里插入图片描述

Published by

风君子

独自遨游何稽首 揭天掀地慰生平