嵌入式学习笔记——ARM

发布于:2025-04-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

ARM 的工作模式

ARM 处理器具有 7 种工作模式,其中 1 种用户模式和 6 种特权模式。特权模式可以访问系统资源,而用户模式只能运行普通应用程序。


1. 用户模式(USR)

用途:运行普通用户程序,没有权限访问系统资源,也无法直接切换到其他模式。
特点

  • 运行在 用户态,受限于操作系统。
  • 无法直接访问硬件资源。
  • 只能通过 软中断(SWI)或异常 进入特权模式。

2. 系统模式(SYS)

用途:操作系统使用的一种特权模式,和用户模式共享相同的寄存器,但权限更高。
特点

  • 具备 完全的系统权限,可以访问所有硬件资源。
  • 与用户模式共用寄存器,但 比用户模式权限更高
  • 适用于 操作系统内核 运行时。

3. 一般中断模式(IRQ)

用途:用于处理 普通硬件中断,比如键盘、定时器等触发的中断。
特点

  • 发生 外部中断 时,自动进入该模式。
  • 是一种 特权模式,可以访问系统资源。
  • 需要保存寄存器状态,以便中断处理完成后恢复。

4. 快速中断模式(FIQ)

用途:处理 高优先级、低延迟的中断,如高速数据传输。
特点

  • 比 IRQ 模式更快,适用于时间敏感任务。
  • 额外提供 专用寄存器(R8-R14),减少保存和恢复寄存器的开销。
  • 优先级最高,可以屏蔽普通 IRQ 中断。

5. 管理模式(SVC)

用途CPU 上电后的默认模式,用于系统初始化和处理 软件中断(SWI)。
特点

  • 系统复位(开机)或 软中断 时,CPU 进入 SVC 模式。
  • 具有完整的 特权访问权限,可以管理所有资源。
  • 适用于 操作系统调用(系统 API)

6. 终止模式(ABT)

用途:当程序访问非法内存地址时,会进入 终止模式,通常用于支持 虚拟内存存储保护
特点

  • 程序异常(如访问非法地址)时触发
  • 在 Linux 系统中,如果程序崩溃导致 Segment Fault(段错误),通常就是进入了 ABT 模式。

7. 未定义模式(UND)

用途:用于处理 CPU 无法识别的指令,通常用于仿真未实现的协处理器指令。
特点

  • CPU 遇到 未知指令 时,进入该模式。
  • 主要用于 指令模拟或软件仿真

特权模式与异常模式

  • 特权模式:指除 用户模式(USR) 之外的 6 种模式,具备更高的权限。
  • 异常模式:特权模式中 不包括系统模式(SYS) 的 5 种模式(IRQ、FIQ、SVC、ABT、UND)。

特权模式可以执行特殊指令,如:

  • MRS(将状态寄存器内容存入通用寄存器)。
  • MSR(将通用寄存器的内容写入状态寄存器)。

总结

模式名称 类型 作用
用户模式(USR) 用户模式 运行用户程序,无特权
系统模式(SYS) 特权模式 OS 运行模式,可访问系统资源
一般中断模式(IRQ) 特权模式 处理普通硬件中断
快速中断模式(FIQ) 特权模式 处理高优先级、低延迟的中断
管理模式(SVC) 特权模式 CPU 启动后的默认模式,处理软中断
终止模式(ABT) 特权模式 访问非法地址或存储异常时触发
未定义模式(UND) 特权模式 执行未识别的指令时触发

ARM 处理器 37 个 32 位寄存器详解

ARM 处理器共有 37 个 32 位寄存器,可分为 通用寄存器(31 个)状态寄存器(6 个)。以下是详细分类及用途说明。


1. 通用寄存器(31 个)

寄存器 名称 数量 用途
R0-R12 通用寄存器 13 用于存储数据、运算、函数参数等
R13 SP(Stack Pointer,堆栈指针) 1 指向当前 堆栈顶,用于函数调用和中断
R14 LR(Link Register,链接寄存器) 1 存储函数返回地址,用于子程序跳转
R15 PC(Program Counter,程序计数器) 1 指向当前执行的指令,每次指令执行后自动更新
R8-R14(FIQ 模式专有) FIQ 模式专用寄存器 7 FIQ 模式独立寄存器,用于快速中断处理,避免保存恢复通用寄存器的开销
R13(SP) & R14(LR)(其他模式) 各模式独立的 SP 和 LR 8 除用户模式外,其他模式各自拥有独立的 SP 和 LR,防止模式切换时数据丢失

🔹 说明:

  • FIQ 模式(快速中断模式) 具有 R8-R14 专用寄存器,用于提高中断处理速度。
  • 不同模式(如 SVC、IRQ、ABT 等) 具有独立的 SP(R13)和 LR(R14),以便模式切换时保存寄存器状态。

2. 状态寄存器(6 个)

寄存器 名称 数量 用途
CPSR 当前程序状态寄存器(Current Program Status Register) 1 保存 CPU 当前状态(标志位、模式控制、中断使能等)
SPSR(FIQ) 快速中断模式的已保存状态寄存器 1 当 FIQ 模式发生异常时,存储 CPSR 以便恢复
SPSR(IRQ) 一般中断模式的已保存状态寄存器 1 当 IRQ 模式发生异常时,存储 CPSR 以便恢复
SPSR(SVC) 管理模式的已保存状态寄存器 1 进入 SVC 模式(软中断)时保存 CPSR
SPSR(ABT) 终止模式的已保存状态寄存器 1 发生存储器访问异常时保存 CPSR
SPSR(UND) 未定义模式的已保存状态寄存器 1 执行未识别指令时保存 CPSR

🔹 说明:

  • CPSR(当前程序状态寄存器):用于存储 CPU 当前状态,如:
    • N(负数标志)
    • Z(零标志)
    • C(进位标志)
    • V(溢出标志)
    • I(IRQ 禁用标志)
    • F(FIQ 禁用标志)
    • M(模式位)(指示当前 CPU 运行模式)
  • SPSR(已保存状态寄存器) 仅在特权模式(如 FIQ、IRQ、SVC、ABT、UND)下可用,用于 异常恢复

3. 37 个寄存器汇总

寄存器类型 数量 详细分类
通用寄存器 31 R0-R12(13 个),SP(R13),LR(R14),PC(R15),各模式专有寄存器(FIQ R8-R14,共 7 个),各模式独立 SP & LR(8 个)
状态寄存器 6 1 个 CPSR,5 个 SPSR(FIQ、IRQ、SVC、ABT、UND 模式各 1 个)

总结

  1. ARM 处理器共有 37 个 32 位寄存器,分为:
    • 通用寄存器 31 个
    • 状态寄存器 6 个
  2. 通用寄存器
    • R0-R12:基本数据处理
    • SP(R13):堆栈指针
    • LR(R14):链接寄存器(存储函数返回地址)
    • PC(R15):程序计数器
    • FIQ 专用 R8-R14(提高中断速度)
    • 不同模式下的 SP 和 LR(防止模式切换时丢失数据)
  3. 状态寄存器
    • CPSR(当前状态寄存器)
    • 5 个 SPSR(各模式保存的状态寄存器)

S3C2440 与 S3C6410 主要区别对比

S3C2440 和 S3C6410 都是三星(Samsung)推出的 ARM 处理器,但它们在 主频、架构、扩展接口、存储控制、图形处理、启动方式 等方面存在显著区别。以下是详细对比表格:


1. 基本参数对比

参数 S3C2440 S3C6410 区别
CPU 内核 ARM920T ARM1176ZJF 6410 采用更新的 ARM11 内核,性能更强
主频 400MHz 533/667MHz 6410 频率更高,处理能力更强
架构 单总线 双总线(内存总线 + Flash 总线) 6410 采用双总线,提高数据吞吐量

2. 存储与内存控制

参数 S3C2440 S3C6410 区别
内存控制器 SDRAM DDR 6410 采用 DDR,速度更快、功耗更低
NAND Flash 支持 SLC SLC + MLC 6410 支持 MLC,存储容量更大
启动方式 NOR / NAND Flash SD / NAND / NOR / OneFlash 6410 启动方式更灵活

3. 多媒体处理

功能 S3C2440 S3C6410 区别
视频解码 支持 MPEG4、H.264、WMV9、Xvid 硬解码 6410 内置视频解码器,支持更多格式
图形处理 2D 支持 2D / 3D 加速 6410 具备 3D 硬件加速,适合图形应用

4. 外设与接口

接口类型 S3C2440 S3C6410 区别
扩展接口 TV-out、串口、SPI、SD TV-out、S-Video、CF卡 6410 具备更多 扩展接口
DMA 通道 4 路 8 路(LCD、UART、Camera 专用) 6410 DMA 通道更多,数据传输更高效
SPI / UART / SD 支持 普通 更丰富 6410 提供 更多 SPI、串口、SD 接口

5. 适用场景

应用方向 S3C2440 S3C6410
嵌入式设备
多媒体播放 ✅(硬件解码更强)
智能终端 ✅(3D 图形处理更优)
工业控制
高性能应用

总结

  1. S3C6410 处理器性能更强

    • CPU 频率提升(400MHz → 533/667MHz)
    • ARM920T → ARM1176ZJF,架构升级
    • 双总线架构 提高数据吞吐能力
  2. 存储与启动方式更灵活

    • SDRAM → DDR,存取速度更快
    • 支持 SLC + MLC NAND Flash,存储容量更大
    • 支持 SD / NAND / NOR / OneFlash 启动
  3. 多媒体处理能力提升

    • 支持 H.264、MPEG4、WMV9、Xvid 硬解码
    • 支持 2D / 3D 图形加速
    • 适用于 视频播放、智能终端
  4. 外设接口更丰富

    • 增加 S-Video、CF 卡接口
    • SPI、UART、SD 接口更丰富
    • 8 路 DMA(LCD、UART、Camera 专用)

➡ 结论:
S3C2440 适用于低功耗嵌入式设备,S3C6410 适用于高性能多媒体终端和智能设备。

ARM 指令集分类

ARM 指令集主要分为 两类

  1. ARM 指令集(32 位)
  2. Thumb 指令集(16 位)

这种设计使得 ARM 处理器既可以执行 16 位指令(Thumb),也可以执行 32 位指令(ARM),从而在 代码密度、功耗和性能 之间取得平衡。


1. ARM 指令集

  • 指令长度32 位
  • 特点
    • 指令结构规整,性能更高
    • 提供更丰富的 寄存器访问指令种类
    • 适用于高性能计算场景
  • 优点
    • 执行效率高(完整的 32 位操作)
    • 支持条件执行(避免不必要的分支跳转,提高流水线效率)
  • 缺点
    • 代码体积较大,占用更多存储空间
  • 适用场景
    • 高性能计算、操作系统、复杂计算任务

2. Thumb 指令集

  • 指令长度16 位
  • 特点
    • 指令长度缩短,代码更紧凑
    • 只有 一部分 ARM 指令 能转换为 Thumb 指令
    • 适用于资源受限的嵌入式系统
  • 优点
    • 代码密度更高(减少存储空间占用)
    • 降低功耗
    • 存储和带宽受限 的情况下提高指令吞吐量
  • 缺点
    • 指令功能受限(部分复杂操作需要额外指令完成)
    • 部分运算需要多条指令才能实现,导致性能下降
  • 适用场景
    • 嵌入式系统、低功耗应用

3. ARM 与 Thumb 的对比

对比项 ARM 指令集 Thumb 指令集
指令长度 32 位 16 位
代码密度 (减少存储占用)
执行效率 (单条指令更强大) 较低(部分操作需要多条指令完成)
指令集 完整(支持所有 ARM 指令) 部分 ARM 指令的子集
功耗 较高 较低
适用场景 高性能计算 嵌入式、低功耗设备

ARM 协处理器指令的分类及功能

ARM 处理器支持 协处理器(Coprocessor),用于扩展处理能力,如 浮点运算、加密、安全、DSP 处理 等。ARM 处理器与协处理器通过 MCR、MRC、CDP、LDC、STC 等指令进行通信。

ARM 协处理器指令主要分为以下 3 类


1. 数据处理指令(CDP 指令)

功能

  • ARM 处理器协处理器 之间进行 数据计算初始化协处理器
  • 主要用于 浮点计算、DSP 运算 等任务。

指令格式

CDP pN, opcode1, CRd, CRn, CRm, opcode2
  • pN:协处理器编号
  • opcode1 & opcode2:操作码,定义具体操作
  • CRd, CRn, CRm:协处理器寄存器

示例

CDP p2, 0, CR0, CR1, CR2, 0   ; 在 p2 号协处理器中进行数据运算

应用场景

  • 浮点运算(如 ARM 的 VFP 协处理器)
  • 数字信号处理(如 ARM 的 DSP 协处理器)

2. 处理器与协处理器之间的数据传送指令(MCR/MRC 指令)

功能

  • 负责 ARM 处理器寄存器协处理器寄存器 之间的数据交换。
  • ARM 处理器可以读取或写入协处理器的寄存器,实现参数传递或数据交换。

指令格式

MCR pN, opcode1, Rd, CRn, CRm, opcode2  ; ARM → 协处理器
MRC pN, opcode1, Rd, CRn, CRm, opcode2  ; 协处理器 → ARM
  • MCR(Move to Coprocessor Register):将 ARM 处理器的寄存器值 传送到 协处理器寄存器
  • MRC(Move from Coprocessor Register):将 协处理器寄存器值 传送到 ARM 处理器寄存器

示例

MCR p2, 0, r0, CR1, CR2, 0   ; 传送 r0 到协处理器 p2 的 CR1
MRC p2, 0, r1, CR3, CR4, 0   ; 读取协处理器 p2 的 CR3 到 r1

应用场景

  • 写入/读取 浮点寄存器(如 VFP 协处理器)
  • 加密/解密 操作(如 TrustZone 安全协处理器)
  • 系统控制(如 MMU、Cache 控制)

3. 协处理器与存储器之间的数据传送指令(LDC/STC 指令)

功能

  • LDC(Load from Memory to Coprocessor):将数据从内存加载到协处理器寄存器
  • STC(Store from Coprocessor to Memory):将数据从协处理器寄存器存储到内存

指令格式

LDC pN, CRd, [Rn, #offset]  ; 从内存读取数据到协处理器
STC pN, CRd, [Rn, #offset]  ; 从协处理器存储数据到内存
  • pN:协处理器编号
  • CRd:协处理器寄存器
  • [Rn, #offset]:内存地址

示例

LDC p2, CR0, [r3, #4]   ; 从内存地址 r3 + 4 处加载数据到 p2 的 CR0
STC p2, CR1, [r4, #8]   ; 将 p2 的 CR1 存储到内存地址 r4 + 8 处

应用场景

  • 传输 大块数据 到协处理器(如 音视频解码
  • 存储计算结果(如 浮点运算结果存储到 RAM

总结

指令类型 指令 功能 应用场景
数据处理 CDP 在协处理器内部执行计算 浮点运算、DSP 计算
处理器 ↔ 协处理器 MCR/MRC ARM 处理器协处理器 之间的 数据交换 参数传递、寄存器访问
协处理器 ↔ 内存 LDC/STC 内存协处理器寄存器 之间的数据传输 数据存储、浮点计算

锁相环(PLL, Phase-Locked Loop)简介

锁相环(Phase-Locked Loop,简称 PLL)是一种自动控制系统,用于 使输出信号的相位与输入信号的相位保持一致

1. PLL 的基本概念

简单来说,PLL 主要用于生成与输入信号同步的输出信号,但其频率可以是输入信号的整数倍、分数倍,或者相同。

举个例子

  • 参考时钟(晶振)频率为 10MHz
  • 通过 PLL 频率合成器,可以生成 900MHz1GHz 时钟信号。
  • 这两个信号虽然频率不同,但因为使用相同的参考时钟,它们仍然是同源信号,不会产生频率漂移。

2. PLL 的基本组成

锁相环主要由以下 4 个核心部分 组成:

组件 功能
相位检测器(Phase Detector, PD) 比较输入信号与 VCO 输出信号的相位差,并生成误差信号。
环路滤波器(Loop Filter, LF) 滤除高频噪声,使误差信号平滑,提供稳定的控制电压。
压控振荡器(Voltage-Controlled Oscillator, VCO) 受控于误差信号,调整输出信号的频率,使其逐渐与输入信号同步。
反馈路径(Feedback Path) 通过分频器(或倍频器)调整 VCO 输出信号,使其满足系统要求。

3. PLL 的工作过程

  1. 初始状态

    • 假设输入信号与 VCO 输出信号的相位不一致,相位检测器(PD)会检测到相位差并输出误差信号。
  2. 误差信号处理

    • 误差信号通过环路滤波器(LF),滤除高频噪声,使误差信号更稳定。
  3. 调整输出频率

    • 误差信号控制压控振荡器(VCO),使其输出信号逐渐调整到与输入信号同步。
  4. 锁定状态(Locked State)

    • 当 VCO 输出信号的相位与输入信号完全一致,PLL 达到锁定状态,此时:
      • 误差信号趋于
      • 控制电压保持 稳定
      • VCO 稳定输出同步的信号

4. PLL 的框图

 输入信号    
    │    
    ▼
[相位检测器] ───► [环路滤波器] ───► [压控振荡器] ───► 输出信号    
     ▲                                                                  │
     │                                                                  │
     └────────[反馈]──────────────────┘

5. PLL 的应用

锁相环技术广泛用于以下领域:

  • 时钟合成:提供高精度时钟,如 CPU、GPU、DDR 存储器 的时钟信号。
  • 频率合成:产生多种不同频率的信号,如 无线通信、射频调制 等。
  • 数据恢复:如 硬盘、光盘读取数据 时,PLL 用于数据同步。
  • 无线通信:在 AM/FM 调制解调、锁定信号相位 等方面有关键作用。

网站公告

今日签到

点亮在社区的每一天
去签到