- 在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
- CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。
寄存器编号 |
基本作用 |
在 |
在 |
0 |
ID |
ID |
|
1 |
控制位(可读写) |
各种控制位 |
|
2 |
存储保护和控制 |
地址转换表基地址 |
Cachability |
3 |
存储保护和控制 |
域访问控制位 |
Bufferablity |
4 |
存储保护和控制 |
保留 |
保 留 |
5 |
存储保护和控制 |
内存失效状态 |
访问权限控制位 |
6 |
存储保护和控制 |
内存失效地址 |
保护区域控制 |
7 |
高速缓存和写缓存 |
高速缓存和写缓存控制 |
|
8 |
存储保护和控制 |
TLB |
保 留 |
9 |
高速缓存和写缓存 |
高速缓存锁定 |
|
10 |
存储保护和控制 |
TLB |
保 留 |
11 |
保留 |
|
|
12 |
保留 |
|
|
13 |
进程标识符 |
进程标识符 |
|
14 |
保留 |
|
|
15 |
因不同设计而异 |
因不同设计而异 |
因不同设计而异 |
opcode2 |
对应的标识符号寄存器 |
0b000 |
主标识符寄存器 |
0b001 |
cache类型标识符寄存器 |
其 他 |
保留 |
对于AMR7之后的处理器,其主标示符编码格式如下 :
30 |
23 |
19 |
15 |
3 |
由生产商确定 |
产品子编号 |
ARM |
产品主编号 |
处理器版本号 |
位 |
|
位 |
生产商定义的处理器版本号 |
位 |
生产商定义的产品主编号 其中最高 因为: 0x0表示 0x7 |
位 |
ARM 0x1 0x2 0x3 0x4 0x5 其他 |
位 |
生产商定义的产品子编号。当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不 同的高速缓存的大小等 |
位 |
生产厂商的编号,现在已经定义的有以下值: 0x41 0x44 0x69 |
31 |
28 |
24 |
23 |
11 |
|
|
|
|
|
位 |
含义 |
位 |
主要用于定义对于写回类型的cache的一些属性 |
位 |
定义系统中的数据 0 1 |
位 |
定义数据 如果位 |
位 |
定义指令 如果位 |
-
控制字段位 [28 : 25] 的含义
cache
编 |
cache |
cache |
cache |
0b0000 |
写通类型 |
不需要内容清除 |
不支持内容锁定 |
0b0001 |
写回类型 |
数据块读取 |
不支持内容锁定 |
0b0010 |
写回类型 |
由寄存器 |
不支持内容锁定 |
0b0110 |
写回类型 |
由寄存器 |
支持格式 |
0b0111 |
写回类型 |
由寄存器 |
支持格式 |
- 控制字段位
[23 : 12] 及控制字段位 [11 : 0] 含义
11 |
8 |
5 |
2 |
1 |
000 |
cache |
cache |
M |
块大小 |
编 |
cache |
0b00 |
2 |
0b01 |
4 |
0b10 |
8 |
0b11 |
16 |
编 |
M=0 |
M=1 |
0b000 |
1 |
没有 |
0b001 |
2 |
3 |
0b010 |
4 |
6 |
0b011 |
8 |
12 |
0b100 |
16 |
24 |
0b101 |
32 |
48 |
0b110 |
64 |
96 |
0b111 |
128 |
192 |
编 |
M=0 |
M=1时含义 |
0b000 |
0.5KB |
0.75 |
0b001 |
1 |
1.5 |
0b010 |
2 |
3 |
0b011 |
4 |
6 |
0b100 |
8 |
12 |
0b101 |
16 |
24 |
0b110 |
32 |
48 |
0b111 |
64 |
96 |
- 禁止或使能MMU以及其他与存储系统相关的功能
- 配置存储系统以及ARM处理器中的相关部分的工作
C1中的控制位 |
含义 |
M(bit[0]) |
0 1 如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位 |
A(bit[1]) |
0 1 |
C(bit[2]) |
当数据cache和指令cache分开时,本控制位禁止/使能数据cache。当数据cache和指令cache统一时,该控制位禁止/使能整个cache。 0 1 如果系统中不含cache,读取时该位返回0.写入时忽略 当系统中不能禁止cache |
W(bit[3]) |
0 1 如果系统中不含写缓冲时,读取时该位返回0.写入时忽略 当系统中不能禁止写缓冲时,读取时返回1.写入时忽略 |
P(bit[4]) |
对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号 0 1 如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略 |
D(bit[5]) |
对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号 0 1 如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略 |
L(bit[6]) |
对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型 0 1 |
B(bit[7]) |
对于存储系统同时支持big-endian和little-endian的ARM系统,本控制位配置系统的存储模式 0 1 对于只支持little-endian的系统,读取时该位返回0,写入时忽略 对于只支持big-endian的系统,读取时该位返回1,写入时忽略 |
S(bit[8]) |
在基于 |
R(bit[9]) |
在基于 |
F(bit[10]) |
由生产商定义 |
Z(bit[11]) |
对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能 0 1 对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略 |
I(bit[12]) |
当数据cache和指令cache是分开的,本控制位禁止/使能指令cache 0 1 如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略 |
V(bit[13]) |
对于支持高端异常向量表的系统,本控制位控制向量表的位置 0 1 对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略 |
PR(bit[14]) |
如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法 0 1 如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1 |
L4(bit[15]) |
对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能 0 1 |
Bits[31:16]) |
这些位保留将来使用,应为UNP/SBZP |
(三)CP15
C2寄存器的别名:Translation table base (TTB) register
31 |
|
CP15
31 |
|||||||||||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。
MRC p15, 0, , c5, c0, 0 访问数据失效状态寄存器
MRC p15, 0, , c5, c0, 1访问指令状态失效寄存器
编码格式如下所示:
31 |
8 |
7 |
3 |
UNP/SBZP |
0 |
域标识 |
状态标识 |
其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。 状态标识bit[3:0] 表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。
引起访问失效的原因 |
状态标识 |
域标识 |
C6 |
终端异常( |
0b0010 |
无 效 |
生 产商定义 |
中断向量访问异常( |
0b0000 |
无 效 |
有 效 |
地 址对齐 |
0b00x1 |
无 效 |
有 效 |
一 级页表访问失效 |
0b1100 |
无 效 |
有 效 |
二 级页表访问失效 |
0b1110 |
有 效 |
有 效 |
基 于段的地址变换失效 |
0b0101 |
无 效 |
有 效 |
基 于页的地址变换失效 |
0b0111 |
有 效 |
有 效 |
基 于段的存储访问中域控制失效 |
0b1001 |
有 效 |
有 效 |
基 于页的存储访问中域控制失效 |
0b1101 |
有 效 |
有 效 |
基 于段的存储访问中访问权限控制失效 |
0b1111 |
有 效 |
有 效 |
基 于页的存储访问中访问权限控制失效 |
0b0100 |
有 效 |
有 效 |
基于段的 |
0b0110 |
有 效 |
有 效 |
基于页的 |
0b1000 |
有 效 |
有 效 |
基于段的非 |
0b1010 |
有 效 |
有 效 |
CP15
MRC p15, 0, , c6, c0, 0访问数据失效地址寄存器
MRC p15, 0, , c6, c0, 2 访问指令失效地址寄存器
编码格式如下所示:
31 |
|
指令 |
Rd |
含义 |
MCR p15, 0, Rd, c8, c5, 0 |
0 |
使无效整个指令TLB |
MCR p15, 0, Rd, c8, c5, 1 |
虚拟地址 |
使无效指令TLB中的单个地址变换条目 |
MCR p15, 0, Rd, c8, c6, 0 |
0 |
使无效整个数据TLB |
MCR p15, 0, Rd, c8, c6, 1 |
虚拟地址 |
使无效数据TLB中的单个地址变换条目 |
MCR p15, 0, , c8, c7, 0 |
0 |
使无效整个数据和指令TLB |
MCR p15, 0, , c8, c7, 1 |
虚拟地址 |
使无效数据和指令TLB中的单个地址变换条目 |
MCR p15, 0, , c12, c0, 0 ;Rd中存放要修改的异常向量基地址
31 |
4 |
异常向量基地址 |
Reserve |
CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。
访问寄存器C13的指令格式如下所示。
MCR
MRC
其中,在读操作时,结果中位[31::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。
上一篇:ARM汇编指令——TST和BNE、BEQ解析
下一篇:ARM指令中如何判断一个立即数是有效立即数
推荐阅读最新更新时间:2024-03-16 14:48