全部博文(30)
分类: LINUX
2012-01-01 18:38:53
31 28 | 27 24 | 23 21 | 20 | 19 16 | 15 12 | 11 8 | 7 5 | 4 | 3 0 |
cond | 1 1 1 0 | opcode_1 | L | cr n | rd | 1 1 1 1 | opcode_2 | 1 | crm |
说明:
令 | 说 明 | 语法格式 |
mcr | 将ARM处理器的寄存器中的数据写到CP15中的寄存器中 | mcr{ |
mrc | 将CP15中的寄存器中的数据读到ARM处理器的寄存器中 | mcr{ |
< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />4.1.2 CP15寄存器介绍
CP15的寄存器列表如表4-1所示。
表4-1 ARM处理器中CP15协处理器的寄存器
寄存器编号 | 基本作用 | 在MMU中的作用 | 在PU中的作用 |
0 | ID编码(只读) | ID编码和cache类型 |
|
1 | 控制位(可读写) | 各种控制位 |
|
2 | 存储保护和控制 | 地址转换表基地址 | Cachability的控制位 |
3 | 存储保护和控制 | 域访问控制位 | Bufferablity控制位 |
4 | 存储保护和控制 | 保留 | 保留 |
5 | 存储保护和控制 | 内存失效状态 | 访问权限控制位 |
6 | 存储保护和控制 | 内存失效地址 | 保护区域控制 |
7 | 高速缓存和写缓存 | 高速缓存和写缓存控制 |
|
8 | 存储保护和控制 | TLB控制 | 保留 |
9 | 高速缓存和写缓存 | 高速缓存锁定 |
|
10 | 存储保护和控制 | TLB锁定 | 保留 |
11 | 保留 |
|
|
12 | 保留 |
|
|
13 | 进程标识符 | 进程标识符 |
|
14 | 保留 |
|
|
15 | 因不同设计而异 | 因不同设计而异 | 因不同设计而异 |
· CP15的寄存器C0
CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的
opcode_2编码 | 对应的标识符号寄存器 |
0b000 | 主标识符寄存器 |
0b001 | cache类型标识符寄存器 |
其他 | 保留 |
1)主标识符寄存器
访问主标识符寄存器的指令格式如下所示:
mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中
ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:
31 24 23 20 19 16 15 4 3 0 | ||||
由生产商确定 | 产品子编号 | ARM体系版本号 | 产品主编号 | 处理器版本号 |
位 | 说 明 |
位[3: 0] | 生产商定义的处理器版本号 |
位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7 |
位[19: 16] | ARM体系的版本号,可能的取值如下: |
位[23: 20] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 |
位[31: 24] | 生产厂商的编号,现在已经定义的有以下值: |
ARM7处理器的主标识符寄存器编码格式如下所示:
31 24 23 22 16 15 4 3 0 | ||||
由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 |
位 | 说 明 |
位[3: 0] | 生产商定义的处理器版本号 |
位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7 |
位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 |
续表
位 | 说 明 |
位[23] | ARM7支持下面两种ARM体系的版本号: |
位[31: 24] | 生产厂商的编号,现在已经定义的有以下值: |
ARM7之前处理器的主标识符寄存器编码格式如下所示:
31 24 23 22 16 15 4 3 0 | ||||
由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 |
位 | 说 明 |
位[3: 0] | 生产商定义的处理器版本号 |
位[15: 4] | 生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7 |
位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 |
位[23] | ARM7支持下面两种ARM体系的版本号: |
位[31: 24] | 生产厂商的编号,现在已经定义的有以下值: |
2)cache类型标识符寄存器
访问cache类型标识符寄存器的指令格式如下所示:
mrc p15, 0, r0, c0, c0, 1 ;将cache类型标识符寄存器C0,1的值读到r0中
ARM处理器中cache类型标识符寄存器的编码格式如下所示:
31 29 28 25 24 23 12 11 0 | ||||
0 0 0 | 属性字段 | S | 数据cache相关属性 | 指令cache相关属性 |
位 | 说明 |
位[28: 25] | 指定控制字段位[24: 0]指定的属性之外的cache的其他属性,详见表4-2 |
位[24] | 定义系统中的数据cache和指令cache是分开的还是统一的: |
位[23: 12] | 定义数据cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 |
位[31: 24] | 定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 |
其中控制字段位[28:25]的含义说明如下:
表4-2 cache类型标识符寄存器的控制字段位[28:25]
编 码 | cache类型 | cache内容清除方法 | cache内容锁定方法 |
0b0000 | 写通类型 | 不需要内容清除 | 不支持内容锁定 |
0b0001 | 写回类型 | 数据块读取 | 不支持内容锁定 |
0b0010 | 写回类型 | 由寄存器C7定义 | 不支持内容锁定 |
0b0110 | 写回类型 | 由寄存器C7定义 | 支持格式A |
0b0111 | 写回类型 | 由寄存器C7定义 | 支持格式B |
控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:
11 9 8 6 5 3 2 1 0 | ||||
0 0 0 | cache容量 | cache相联特性 | M | 块大小 |
cache容量字段bits[8: 6]的含义如下所示:
编 码 | M=0时含义(单位KB) | M=1时含义(单位KB) |
0b000 | 0.5 | 0.75 |
0b001 | 1 | 1.5 |
0b010 | 2 | 3 |
0b011 | 4 | 6 |
0b100 | 8 | 12 |
0b101 | 16 | 24 |
0b110 | 32 | 48 |
0b111 | 64 | 96 |
cache相联特性字段bits[5: 3]的含义如下所示:
编 码 | M=0时含义 | M=1时含义 |
0b000 | 1路相联(直接映射) | 没有cache |
0b001 | 2路相联 | 3路相联 |
0b010 | 4路相联 | 6路相联 |
0b011 | 8路相联 | 12路相联 |
0b100 | 16路相联 | 24路相联 |
0b101 | 32路相联 | 48路相联 |
0b110 | 64路相联 | 96路相联 |
0b111 | 128路相联 | 192路相联 |
cache块大小字段bits[1: 0]的含义如下所示:
编 码 | cache块大小 |
0b00 | 2个字(8字节) |
0b01 | 4个字(16字节) |
0b10 | 8个字(32字节) |
0b11 | 16个字(64字节) |