ARM协处理器CP15寄存器详解-飞外

改自:https://blog.csdn.net/gameit/article/details/13169405

*C2描述的不对,bit[31-14]才是TTB,不是所有的bit去存储ttb。很明显,从C7开始,博主已经懒得打字了,直接书本截图*

MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2coproc 指令操作的协处理器名.标准名为pn,n,为0~15opcode1 协处理器的特定操作码. 对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知Rd 作为元寄存器的ARM寄存器。其值被读写到得协处理器寄存器中。
Rd 不能为PC。 当其为PC时。指令操作结果不可预知。CRn 存放表的基地址,即一级映射描述符表的基地址。其编码格如下所示:


CP15中的寄存器C3定义了ARM处理器的16个域的访问权限。


在CP15的C3寄存器中,划分了16个域,每个区域由两位构成,这两位说明了当前内存的检查权限:00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault,这时 AP位无效01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。这时AP位无效所以只有当相应域的编码为 01时,才会根据AP位和协处理器CP15中的C1寄存器的R,S位进行权限检查
(五)CP15的寄存器C5CP15中的寄存器C5是失效状态寄存器,分为指令状态失效和数据状态失效。
MRC p15, 0, Rd , c5, c0, 0 访问数据失效状态寄存器
MRC p15, 0, Rd , c5, c0, 1 访问指令状态失效寄存器
编码格式如下所示:

其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。

状态标识bit[3:0]表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。


CP15中的寄存器C6是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器

MRC p15, 0, Rd , c6, c0, 0 访问数据失效地址寄存器
MRC p15, 0, Rd , c6, c0, 2 访问指令失效地址寄存器

编码格式如下所示:


(七)CP15的寄存器C7CP15的C7寄存器用来控制cache和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。访问CP15的C7寄存器的指令格式如下所示:mcr p15, 0, rd , c7 , crm, opcode_2 ; rd 、 crm 和 opcode_2 的不同取值组合,实现不同功能表中的数据是指Rd中的数据:(八)CP15的寄存器C8

系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。

MCR p15,0,Rd,c8,CRm,opcode_2

Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。


注:只有ARM11和cortex-a 可以任意修改异常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中(十)CP15的寄存器C13

CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。

访问寄存器C13的指令格式如下所示。

MCRp15, 0, Rd , c13 ,c0,0

MRC P15, 0, Rd , c13 ,c0,0

其中, 在读操作时,结果中位[31::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。

当PID的值为0时,MVA = VA | (0(PID) 25),MVA=VA,相当于禁止了FCSE。系统复位后PID即为0.

当PID的值不为0时,相当于使能了FCSE。