文章目录
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 个) |
总结
- ARM 处理器共有 37 个 32 位寄存器,分为:
- 通用寄存器 31 个
- 状态寄存器 6 个
- 通用寄存器
- R0-R12:基本数据处理
- SP(R13):堆栈指针
- LR(R14):链接寄存器(存储函数返回地址)
- PC(R15):程序计数器
- FIQ 专用 R8-R14(提高中断速度)
- 不同模式下的 SP 和 LR(防止模式切换时丢失数据)
- 状态寄存器
- 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 图形处理更优) |
工业控制 | ✅ | ✅ |
高性能应用 | ❌ | ✅ |
总结
-
S3C6410 处理器性能更强
- CPU 频率提升(400MHz → 533/667MHz)
- ARM920T → ARM1176ZJF,架构升级
- 双总线架构 提高数据吞吐能力
-
存储与启动方式更灵活
- SDRAM → DDR,存取速度更快
- 支持 SLC + MLC NAND Flash,存储容量更大
- 支持 SD / NAND / NOR / OneFlash 启动
-
多媒体处理能力提升
- 支持 H.264、MPEG4、WMV9、Xvid 硬解码
- 支持 2D / 3D 图形加速
- 适用于 视频播放、智能终端
-
外设接口更丰富
- 增加 S-Video、CF 卡接口
- SPI、UART、SD 接口更丰富
- 8 路 DMA(LCD、UART、Camera 专用)
➡ 结论:
S3C2440 适用于低功耗嵌入式设备,S3C6410 适用于高性能多媒体终端和智能设备。
ARM 指令集分类
ARM 指令集主要分为 两类:
- ARM 指令集(32 位)
- 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 频率合成器,可以生成 900MHz 或 1GHz 时钟信号。
- 这两个信号虽然频率不同,但因为使用相同的参考时钟,它们仍然是同源信号,不会产生频率漂移。
2. PLL 的基本组成
锁相环主要由以下 4 个核心部分 组成:
组件 | 功能 |
---|---|
相位检测器(Phase Detector, PD) | 比较输入信号与 VCO 输出信号的相位差,并生成误差信号。 |
环路滤波器(Loop Filter, LF) | 滤除高频噪声,使误差信号平滑,提供稳定的控制电压。 |
压控振荡器(Voltage-Controlled Oscillator, VCO) | 受控于误差信号,调整输出信号的频率,使其逐渐与输入信号同步。 |
反馈路径(Feedback Path) | 通过分频器(或倍频器)调整 VCO 输出信号,使其满足系统要求。 |
3. PLL 的工作过程
-
初始状态:
- 假设输入信号与 VCO 输出信号的相位不一致,相位检测器(PD)会检测到相位差并输出误差信号。
-
误差信号处理:
- 误差信号通过环路滤波器(LF),滤除高频噪声,使误差信号更稳定。
-
调整输出频率:
- 误差信号控制压控振荡器(VCO),使其输出信号逐渐调整到与输入信号同步。
-
锁定状态(Locked State):
- 当 VCO 输出信号的相位与输入信号完全一致,PLL 达到锁定状态,此时:
- 误差信号趋于 零。
- 控制电压保持 稳定。
- VCO 稳定输出同步的信号。
- 当 VCO 输出信号的相位与输入信号完全一致,PLL 达到锁定状态,此时:
4. PLL 的框图
输入信号
│
▼
[相位检测器] ───► [环路滤波器] ───► [压控振荡器] ───► 输出信号
▲ │
│ │
└────────[反馈]──────────────────┘
5. PLL 的应用
锁相环技术广泛用于以下领域:
- 时钟合成:提供高精度时钟,如 CPU、GPU、DDR 存储器 的时钟信号。
- 频率合成:产生多种不同频率的信号,如 无线通信、射频调制 等。
- 数据恢复:如 硬盘、光盘读取数据 时,PLL 用于数据同步。
- 无线通信:在 AM/FM 调制解调、锁定信号相位 等方面有关键作用。