一、定义
ARM协处理器是辅助主CPU处理特定任务的专用硬件,通过扩展指令集和硬件加速,提升ARM架构在特定场景的性能与效率,主CPU可通过协处理器指令(如CP15、CP10等)调度其工作。
- 核心功能与分类
-
系统控制类(如CP15):负责内存管理(MMU)、缓存控制、异常处理配置,是ARM内核的核心辅助单元,贯穿从ARMv4到ARMv8的架构演进。
-
浮点运算类(如VFP、NEON):VFP专注浮点计算(替代早期软件模拟),NEON(高级SIMD)支持多媒体、信号处理等并行计算,广泛用于手机、嵌入式设备。
-
专用功能类:包括加密协处理器(加速AES、SHA)、图形协处理器(早期GPU雏形)、传感器协处理器(处理传感器数据,降低主CPU功耗)。
二、关键特性
-
与主CPU共享系统总线,指令通过ARM指令集的协处理器操作码(如MCR、MRC)交互,延迟低。
-
采用"按需激活"设计,仅处理主CPU不擅长的任务(如复杂浮点运算、加密解密),降低整体功耗。
-
现代ARM架构(如ARMv8-A)中,部分协处理器功能已集成进主CPU核心(如NEON内置),但专用协处理器(如加密模块)仍独立存在。
三. 典型应用场景
-
移动端:NEON加速视频编解码、游戏图形渲染;
-
嵌入式设备:CP15负责内存保护,加密协处理器保障数据安全;
-
服务器:浮点协处理器支持科学计算、AI推理等高性能场景。
四、在arm中的架构
ARM 架构支持最多 16 个协处理器,编号为 CP0 到 CP15 。每个协处理器只执行针对自身的协处理指令 。
下表概括了这些协处理器的主要功能(请注意,并非所有系统都完全实现全部协处理器)

五、 访问协处理器的指令
ARM 架构提供了一组专门的指令用于与协处理器交互 ,其中最基本和最常用的是 MCR 和 MRC :
MCR :将数据从 ARM 核心寄存器 移动到 协处理器寄存器 。
MRC :将数据从 协处理器寄存器 移动到 ARM 核心寄存器 。
这些指令的典型操作流程是"读取-修改-写回":先使用 MRC 将协处理器寄存器的值读到通用寄存器,修改特定位后,再用 MCR 写回 。
六、汇编代码示例:操作 CP15 启用缓存
下面的汇编代码演示了如何使用 MRC 和 MCR 指令,通过配置 CP15 的控制寄存器(c1)来启用指令缓存和数据缓存 。
.global _start
_start:
@ 1. 使用MRC指令读取CP15的控制寄存器c1的值到通用寄存器r0中
MRC p15, 0, r0, c1, c0, 0 @ [6,8](@ref)
@ 2. 启用指令缓存(I Cache),设置第12位为1
ORR r0, r0, #(1 << 12) @ 设置位12以启用I Cache [8](@ref)
@ 3. 启用数据缓存(D Cache),设置第2位为1
ORR r0, r0, #(1 << 2) @ 设置位2以启用D Cache [6,8](@ref)
@ 4. 启用MMU(内存管理单元),设置第0位为1(通常缓存需与MMU配合工作)
ORR r0, r0, #(1 << 0) @ 设置位0以启用MMU [8](@ref)
@ 5. 使用MCR指令将修改后的配置值从r0写回CP15的控制寄存器c1
MCR p15, 0, r0, c1, c0, 0 @ [6,8](@ref)
@ 6. 确保所有配置生效(内存屏障指令)
ISB @ 指令同步屏障 [7](@ref)
@ ... (后续可以执行其他代码)
@ 示例:禁用数据缓存
MRC p15, 0, r0, c1, c0, 0 @ 再次读取控制寄存器
BIC r0, r0, #(1 << 2) @ 清除第2位以禁用D Cache [6](@ref)
MCR p15, 0, r0, c1, c0, 0 @ 写回配置
ISB
@ 程序循环
B .
七、关键点解析与注意事项
指令作用:代码通过 MRC 和 MCR 指令操作 CP15 的 c1 寄存器(系统控制寄存器),通过设置其中的特定控制位来启用或禁用相应的系统功能 。
内存屏障:在对系统关键配置进行修改后,使用 ISB 等内存屏障指令非常重要,它能确保在屏障之后的指令能够看到配置更改后的效果 。
特权级别:操作协处理器(尤其是 CP15)的指令通常需要在特权模式下运行,如果在非特权模式执行,可能会引发异常 。
硬件差异:不同型号的 ARM 处理器,其协处理器(特别是 CP15)寄存器的具体定义和行为可能存在差异。在实际开发中,务必参考对应芯片的详细技术参考手册 。
八、总结与演进
协处理器是 ARM 架构中用于扩展和增强核心 CPU 功能的重要组件 。通过专用的协处理器指令,我们可以精细地控制系统行为,这在操作系统底层开发、驱动编写和性能优化中至关重要 。
需要注意的是,在 ARMv8 开始的 64 位架构中,协处理器的概念有所弱化,许多功能被集成到核心指令集或通过新的系统寄存器进行控制 。