协处理器(coprocessor)是一种芯片,用于减轻系统微处理器的某种处理任务。例如,数学协处理器可以控制数字处理;图形协处理器可以处理视频绘制。
ARM微处理器可支持多达16个协处理器,用于各种协处理器操作,例如协处理器15(CP15),ARM处理器使用CP15的寄存器来控制cache和存储器管理。
ARM协处理器操作指令包括以下5条:
CDP:数据操作指令,通常用于初始化协处理器。
LDC:数据加载指令,用于将存储器中的数据传送到协处理器寄存器中。
STC:数据存储器指令,用于将协处理器寄存器中的数据传送到存储器中。
MCR:ARM处理器寄存器到协寄存器寄存器的数据传送指令。
MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令。
CP15是ARM协处理器中十分重要的一个,接下来以CP15为例介绍其寄存器访问方法。访问CP15的寄存器的指令编码格式如下:
MCR指令将ARM处理器的寄存器中的数据传送到协处理器的CP15寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。
指令的语法格式:
MCR{<COND>} P15,<OPCODE_1>,<RD>,<CRN>,<CRM>,{<OPCODE_2>}
MRC:将CP15中的寄存器中的数据读到ARM处理器的寄存器中
格式:
MRC{<COND>} P15,<OPCODE_1>,<RD>,<CRN>,<CRM>,{<OPCODE_2>}
OPCODE_1:协处理器行为操作码,对于CP15来说,<OPCODE_1>永远为0,否则操作结果不确定。
RD:ARM核寄存器,不能是R15/PC,否则操作结果不确定。
CRN:协处理器寄存器,编号为C0-C15。
CRM:附加的协处理器寄存器或源操作数寄存器,如果不需要设置附加信息,将CRM设置为C0。
OPCODE_2:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号对应的不同物理寄存器,可以省略<0PCODE_2>或者将其设置为0。