ARM协处理器CP15寄存器详解
Posted schips
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM协处理器CP15寄存器详解相关的知识,希望对你有一定的参考价值。
ref:http://blog.csdn.net/gameit/article/details/13169405
背景:
在uboot中,start.s中涉及到了 CP15 的有关操作。查阅有关资料,进行学习。
用于系统存储管理的协处理器CP15,可以通过 下面两条汇编指令控制
MCR cond coproc,opcode1,Rd,CRn,CRm,opcode2
MRC cond coproc,opcode1,Rd,CRn,CRm,opcode2
*这2条指令仅适用于32位寄存器,因为64位寄存器仅由CRm,opc1标识。
<coproc> 指令操作的协处理器名,标准名为pn,n,为0~15
<opcode1> 协处理器的特定操作码,对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
<Rd> 作为元寄存器的ARM寄存器。其值被读写到得协处理器寄存器中。
<Rd>不能为PC, 当其为PC时。指令操作结果不可预知。
<Rd>不能为PC, 当其为PC时。指令操作结果不可预知。
<CRn> 存放第1个操作数的协处理器寄存器。
<CRm> 存放第2个操作数的协处理器寄存器。 (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
<opcode2> 可选的协处理器特定操作码。 (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。
以 该命令为例:
mrc p15, 0, r0, c1, c0, 0
coproc,opcode1,Rd, CRn, CRm,opcode2
p15: coproc 指令操作的协处理器名
0: opcode1 opcode1永远为0,不为0时,操作结果不可预知
R0: Rd 作为 指令读写有关用的寄存器
c1: CRn
c0: CRm
0: opcode2
以上是关于ARM协处理器CP15寄存器详解的主要内容,如果未能解决你的问题,请参考以下文章