ARM存储器之:协处理器CP15
15.1.2CP15中的寄存器
表15.1给出了CP15主要寄存器的功能和作用。
表15.1CP15寄存器
寄存器编号 |
基本作用 |
特殊用途 |
0 |
ID编号(只读) |
ID和Cache类型 |
1 |
控制位 |
各种控制位 |
2 |
存储器保护和控制 |
MMU:地址转换表基地址 PU:Cache属性设置 |
3 |
内存保护和控制 |
MMU:域访问控制 PU:写缓存控制 |
4 |
内存保护和控制 |
保留 |
5 |
内存保护和控制 |
MMU:错误状态 PU:访问权限控制 |
6 |
内存保护和控制 |
MMU:错误状态 PU:保护区域控制 |
7 |
Cache和写缓存 |
Cache和写缓存控制 |
8 |
内存保护和控制 |
MMU:TLB控制 PU:保留 |
9 |
Cache和写缓存 |
Cache锁定 |
续表
寄存器编号 |
基本作用 |
特殊用途 |
10 |
内存保护和控制 |
MMU:TLB锁定 PU:保留 |
11 |
保留 |
保留 |
12 |
保留 |
保留 |
13 |
进程ID |
进程ID |
14 |
保留 |
保留 |
15 |
芯片生产厂商定义 |
芯片生产厂商定义 |
15.1.3寄存器c0
寄存器c0包含的是ARM本身或芯片生产厂商的一些标识信息。当使用MRC指令读c0寄存器时,根据第二个操作码opcode2的不同,读出的标识符也是不同的。操作码与标识符的对应关系如表15.2所示。寄存器c0是只读寄存器,当用MCR指令对其进行写操作时,指令的执行结果不可预知。
表15.2 操作码和标识符的对应关系
操作码opcode2 |
对应的标识符寄存器 |
0b000 |
主标识符寄存器 |
0b001 |
Cache类型寄存器 |
其他 |
保留 |
在操作码opcode2的取值中,主标识符(opcode2=0)是强制定义的,其他标识符由芯片的生产厂商定义。如果操作码opcode2指定的值未定义,指令将返回主标识符。其他标识符的值应与主标识符的值不同,可以由软件编程来实现,同时读取主标识符和其他标识符,并将两者的值进行比较。如果两个标识符值相同,说明未定义该标识符;如果两个标识符值不同,说明定义了该标识符,并且得到该标识符的值。
(1)主标识符寄存器
当协处理器指令对CP15进行操作,并且操作码opcode=2时,处理器的主标识符将被读出。从主标识符中,可以确定ARM体系结构的版本型号。同时也可以参考由芯片生产厂商定义的其他标识符,来获得更详细的信息。
在主标识信息中,bit[15:12]区分了不同的处理器版本:
·如果bit[15:12]为0x0,说明处理器是ARM7之前的处理器;
·如果bit[15:12]为0x7,说明处理器为ARM7处理器;
·如果bit[15:12]为其他值,说明处理器为ARM7之后的处理器。
对于ARM7之后的处理器,其标识符的编码格式如图15.2所示。
其中各部分的编码含义说明如下。
bit[3:0]:包含生产厂商定义的处理器版本型号。
bit[15:4]:生产厂商定义的产品主编号,可能的取值为0x0~0x7。
bit[19:16]:ARM体系的版本号,可能的取值如表15.3(其他值由ARM公司保留将来使用)所示。
图15.2ARM7之后处理器标识符编码
表15.3 bit[19:16]与ARM版本号
可能的取值 |
版本号 |
0x1 |
ARM体系版本4 |
0x2 |
ARM体系版本4T |
0x3 |
ARM体系版本5 |
0x4 |
ARM体系版本5T |
0x5 |
ARM体系版本5TE |
评论