ARM处理器
ARM 处理器概述
- ARM(Advanced RISC Machine)既是对一类微处理器的统称,也是一个公司的名字,还是一类技术的名称
- ARM 处理器采用 RISC(精简指令集)架构,RISC 处理器简化了处理器结构、减少了复杂功能的指令,同时支持处理器扩展
特点
- 小体积、低功耗、低成本、高性能
- 支持 Thumb(16bit)/ ARM(32bit)双指令集,能很好地兼顾性能与代码密度
- 大量使用寄存器,指令执行速度更快
- 大多数数据操作都在寄存器中完成,更多单周期指令,便于指令流水线执行
- 寻址方式灵活简单,执行效率高
- 指令长度固定
发展历史
- 架构是“设计蓝图” :定义了指令集、编程模型等基础规则
- 处理器是“具体产品”:基于某一版本架构实现的具体硬件内核

- ARMv4:嵌入式时代的基石
- 首个被广泛采用的架构。其标志性创新是引入了 Thumb 指令集,它允许处理器在 16 位和 32 位指令之间切换。
- 在多数情况下,使用 16 位 Thumb 指令可以显著提高代码密度(节省约 30%的存储空间),这对成本敏感的嵌入式设备至关重要
- ARMv7:现代 Cortex 系列的开端
- 从 v7 开始,ARM 将架构与处理器内核的命名清晰地分开,并确立了三大系列:
- Cortex-A:面向高性能应用,支持复杂操作系统如 Linux 和 Android。
- Cortex-R:专为需要高实时性和高可靠性的场景设计。
- Cortex-M:主打微控制器市场,以极低的功耗和成本为特点
- 从 v7 开始,ARM 将架构与处理器内核的命名清晰地分开,并确立了三大系列:
- ARMv8:迈入 64 位时代
- 这是 ARM 近 20 年来最大的一次架构变革。它引入了全新的 AArch64 执行状态和 A64 指令集,不仅带来了 64 位寻址能力,还重新设计了指令集以提升效率。
- 更重要的是,它保持了与原有 ARMv7 AArch32 状态的兼容,确保了平滑过渡
- ARMv9:面向未来的计算
- ARMv9 在 v8 的基础上,重点增强了人工智能(AI)、数字信号处理(DSP)和安全性。其核心特性 SVE2 可以更灵活地处理数据,显著提升机器学习和多媒体处理的效率
Cortex 系列处理器
Cortex-A
- 用于复杂操作系统和用户应用程序,追求高时钟频率、高性能、合理功耗
- 主要处理器:Cortex-A5 、Cortex-A8 、Cortex-A9 、Cortex-A53 等
Cortex-R
- 追求实时性
- 高性能:与高时钟频率相结合的快速处理能力
- 实时:不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理
Cortex-M
- 追求最低成本、极低功耗
- 针对低成本应用优化的微控制器,可为超低功耗的嵌入式计算应用提供最佳解决方案
- 比 Cortex-R 处理器更加精简,有更短的流水线、更简单的指令集、更少的运算单元和调试单元
- 主要处理器:Cortex-M0/M0+、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33、Cortex-M55、Cortex-M85
工作模式和特权级别
处理器状态
ARM Cortex 处理器有 2 种操作状态:
- 调试状态:当处理器由于触发断点等原因被暂停后,进入调试状态并停止指令执行。
- Thumb 状态:若处理器在执行程序代码(Thumb 指令),则会处于此状态
处理器模式
ARM Cortex 处理器有 2 种处理器模式:
- 线程模式:用于执行应用程序软件。
- 处理模式:处理异常时工作于处理模式,完成异常处理后返回线程模式。
处理器特权级别
- 非特权级(也称为用户级)
- 有限访问 MSR 和 MRS 指令,并且不能使用 CPS 指令;
- 可以访问系统定时器、NVIC 或者系统控制块;
- 有对存储器或外设的限制访问。
- 特权级
- 非特权状态可以使用 SVC(Supervisor Calls)指令产生一个系统调用,把控制权转移到特权状态。
- 只有特权状态可以在线程模式下通过写控制寄存器来改变状态执行的特权等级。

寄存器
寄存器是 CPU(Central Processing Unit,中央处理器)内有限存储容量的高速存储部件,用来暂时存放参与运算的数据和运算结果。
ARM Cortex-M4 有 7 种 32 位主要寄存器

4 种通用寄存器
低组寄存器 Low Register
R0-R7:低组寄存器(Low Register)
- 所有访问通用寄存器的指令都可以访问
高组寄存器 High Register
R8-R12:高组寄存器(High Register)
- 所有 32 位通用寄存器指令都可以访问
- 但是所有的 16 位指令都不能访问
堆栈指针寄存器 SP
R13(SP):堆栈指针寄存器
- 用于访问堆栈
- 包括两个物理寄存器
- 主堆栈指针(Main Stack Pointer,MSP)寄存器
- 进程堆栈指针(Process Stack Pointer,PSP)寄存器
- 系统可以同时支持这两个堆栈寄存器。
链接寄存器 LR
R14(LR):链接寄存器
- 链接寄存器(LR)在执行分支(
B)和链接(BL)指令或带有交换分支(BX)和链接指令(BLX)时,PC 的返回地址自动保存进 LR。
程序计数寄存器 PC
R15(PC):程序计数寄存器
- 指向当前程序执行指令的地址程序,可以直接对寄存器进行操作,从而改变程序流程。
- 若用
BL指令来进行跳转,会更新 LR 和 PC 寄存器。 - 用
MOV(move,数据传送)指令来操作 PC 实现跳转时,不更新 LR。 - 由于 Cortex-M4 内部采用指令流水线技术,所以读 PC 时返回值是当前指令的地址+4。
3 种特殊功能寄存器
程序状态寄存器 PSR
xPSR:程序状态寄存器
- 应用状态寄存器(APSR)
- 中断状态寄存器(IPSR)
- 执行状态寄存器(EPSR)
- 3 种状态寄存器组合构成 32 位寄存器(xPSR)

中断屏蔽寄存器 PRIMASK
中断屏蔽寄存器分为 3 组,分别是 PRIMASK、FAULTMASK 和 BASEPRI。

控制寄存器 CONTROL

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!