全部博文(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字节) |