聲明:本文所有的內容轉載於網路上,對原作者表示感謝 用於系統存儲管理的協處理器CP15 MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2 coproc 指令操作的協處理器名 ...
聲明:本文所有的內容轉載於網路上,對原作者表示感謝
用於系統存儲管理的協處理器CP15
MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2
coproc 指令操作的協處理器名.標準名為pn,n,為0~15
opcode1 協處理器的特定操作碼. 對於CP15寄存器來說,opcode1永遠為0,不為0時,操作結果不可預知
CRd 作為目標寄存器的協處理器寄存器.
CRn 存放第1個操作數的協處理器寄存器.
CRm 存放第2個操作數的協處理器寄存器. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為C0)
opcode2 可選的協處理器特定操作碼. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為0)
- 在基於ARM的嵌入式系統中,存儲系統通常是通過系統控制協處理器CP15完成的。
- CP15可以包含16個32位的寄存器,其編號為0-15。實際上對於某些編號的寄存器可能對應有多個物理寄存器。在指令中指定特定的標誌位來區分這些物理寄存器。有些類似於ARM寄存器中,處於不同的處理器模式時,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 中的寄存器指令中的 <opcode2> 指定要訪問哪個具體物理寄存器, <opcode2> 與兩個標識符寄存器的對應關係如下所示:
opcode2 編碼 |
對應的標識符號寄存器 |
0b000 |
主標識符寄存器 |
0b001 |
cache類型標識符寄存器 |
其 他 |
保留 |
(1)主標識符寄存器
指令如下:
MRC P15,0,R0,C0,C0,0 #將主標示符寄存器的內容讀到AMR寄存器R0中
主標示符的編碼格式對於不同的ARM處理器版本有所不同。
對於AMR7之後的處理器,其主標示符編碼格式如下 :
30 24 |
23 20 |
19 16 |
15 4 |
3 0 |
由生產商確定 |
產品子編號 |
ARM 體系版本號 |
產品主編號 |
處理器版本號 |
各部分的編碼詳細含義如下表所示:
位 |
說 明 |
位 [3: 0] |
生產商定義的處理器版本號 |
位 [15: 4] |
生產商定義的產品主編號 其中最高 4 位即位 [15:12] 可能的取值為0x0~0x7 但不能是 0x0 或 0x7 因為: 0x0表示 ARM7之前的處理器 0x7 表示ARM7處理器 |
位 [19: 16] |
ARM 體系的版本號,可能的取值如 下: 0x1 ARM 體系版本 4 0x2 ARM 體系版本 4T 0x3 ARM 體系版本 5 0x4 ARM 體系版本 5T 0x5 ARM 體系版本 5TE 其他 由 ARM 公司保留將來使用 |
位 [23: 20] |
生產商定義的產品子編號。當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不 同的高速緩存的大小等 |
位 [31: 24] |
生產廠商的編號,現在已經定義的有以下值: 0x41 =A ARM 公司 0x44 =D Digital Equipment 公司 0x69 =I intel 公司 |
(2)cache類型標識符寄存器
指令如下:
MRC P15,0,R0,C0,C0,1 #將cache類型標識符寄存器的內容讀到AMR寄存器R0中
ARM 處理器中 cache 類型標識符寄存器的編碼格式如下所示:
31 29 |
28 25 |
24 |
23 12 |
11 0 |
000 |
屬性欄位 |
S |
數據 cache 相關屬性 |
指令cache 相關屬性 |
各部分的編碼詳細含義如下表所示:
位 |
含義 |
位 [28: 25] |
主要用於定義對於寫回類型的cache的一些屬性 |
位 [24] |
定義系統中的數據 cache 和指令 cache 是分開的還是統一的: 0 系統的數據 cache 和指令 cache 是統一的; 1 系統的數據 cache 和指令 cache 是分開的 |
位 [23: 12] |
定義數據 cache 的相關屬性 如果位 [24] 為 0 ,本欄位定義整個cache 的屬性 |
位 [31: 24] |
定義指令 cache 的相關屬性 如果位 [24] 為 0 ,本欄位定義整個cache 的屬性 |
- 控制欄位位 [28 : 25] 的含義
主要用於定義對於寫回類型的cache的一些屬性
cache 類型標識符寄存器的控制欄位位 [28 : 25]:
編 碼 |
cache 類型 |
cache 內容清除方法 |
cache 內容鎖定方法 |
0b0000 |
寫通類型 |
不需要內容清除 |
不支持內容鎖定 |
0b0001 |
寫回類型 |
數據塊讀取 |
不支持內容鎖定 |
0b0010 |
寫回類型 |
由寄存器 C7 定義 |
不支持內容鎖定 |
0b0110 |
寫回類型 |
由寄存器 C7 定義 |
支持格式 A |
0b0111 |
寫回類型 |
由寄存器 C7 定義 |
支持格式 B |
- 控制欄位位 [23 : 12] 及控制欄位位 [11 : 0] 含義
[23:12]用於定義數據cache的屬性,[11: 0]用於定義指令cache的屬性
編碼格式如下:
11 9 |
8 6 |
5 3 |
2 |
1 0 |
000 |
cache 容量 |
cache 相聯特性 |
M |
塊大小 |
其中bits[1:0]含義如下:
編 碼 |
cache 塊大小 |
0b00 |
2 個 字( 8 位元組) |
0b01 |
4 個 字( 16 位元組) |
0b10 |
8 個 字( 32 位元組) |
0b11 |
16 個 字( 64 位元組) |
其中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 路相聯 |
其中bits[8:6]含義如下:
編 碼 |
M=0 時含義 |
M=1時含義 |
0b000 |
0.5KB |
0.75 KB |
0b001 |
1 KB |
1.5 KB |
0b010 |
2 KB |
3 KB |
0b011 |
4 KB |
6 KB |
0b100 |
8 KB |
12 KB |
0b101 |
16 KB |
24 KB |
0b110 |
32 KB |
48 KB |
0b111 |
64 KB |
96 KB |
(二)CP15 的寄存器 C1
CP15中的寄存器C1是一個控制寄存器,它包括以下控制功能:
- 禁止或使能MMU以及其他與存儲系統相關的功能
- 配置存儲系統以及ARM處理器中的相關部分的工作
指令如下:
mrc p15, 0, r0, c1, c0{, 0} ;將 CP15 的寄存器 C1 的值讀到 r0 中
mcr p15, 0, r0, c1, c0{, 0} ;將 r0 的值寫到 CP15 的寄存器 C1 中
CP15 中的寄存器 C1 的編碼格式及含義說明如下:
C1中的控制位 |
含義 |
M(bit[0]) |
0 :禁止 MMU 或者 PU 1 :使能 MMU 或者 PU 如果系統中沒有MMU及PU,讀取時該位返回0,寫入時忽略該位 |
A(bit[1]) |
0 :禁止地址對齊檢查 1 :使能地址對齊檢查 |
C(bit[2]) |
當數據cache和指令cache分開時,本控制位禁止/使能數據cache。當數據cache和指令cache統一時,該控制位禁止/使能整個cache。 0 :禁止數據 / 整個 cache 1 :使能數據 / 整個 cache 如果系統中不含cache,讀取時該位返回0.寫入時忽略 當系統中不能禁止cache 時,讀取時返回1.寫入時忽略 |
W(bit[3]) |
0 :禁止寫緩衝 1 :使能寫緩衝 如果系統中不含寫緩衝時,讀取時該位返回0.寫入時忽略 當系統中不能禁止寫緩衝時,讀取時返回1.寫入時忽略 |
P(bit[4]) |
對於向前相容26位地址的ARM處理器,本控制位控制PROG32控制信號 0 :異常中斷處理程式進入 32 位地址模式 1 :異常中斷處理程式進入26 位地址模式 如果本系統中不支持向前相容26位地址,讀取該位時返回1,寫入時忽略 |
D(bit[5]) |
對於向前相容26位地址的ARM處理器,本控制位控制DATA32控制信號 0 :禁止 26 位地址異常檢查 1 :使能 26 位地址異常檢查 如果本系統中不支持向前相容26位地址,讀取該位時返回1,寫入時忽略 |
L(bit[6]) |
對於ARMv3及以前的版本,本控制位可以控制處理器的中止模型 0 :選擇早期中止模型 1 :選擇後期中止模型 |
B(bit[7]) |
對於存儲系統同時支持big-endian和little-endian的ARM系統,本控制位配置系統的存儲模式 0 : little endian 1 : big endian 對於只支持little-endian的系統,讀取時該位返回0,寫入時忽略 對於只支持big-endian的系統,讀取時該位返回1,寫入時忽略 |
S(bit[8]) |
在基於 MMU 的存儲系統中,本位用作系統保護 |
R(bit[9]) |
在基於 MMU 的存儲系統中,本位用作 ROM 保護 |
F(bit[10]) |
由生產商定義 |
Z(bit[11]) |
對於支持跳轉預測的ARM系統,本控制位禁止/使能跳轉預測功能 0 :禁止跳轉預測功能 1 :使能跳轉預測功能 對於不支持跳轉預測的ARM系統,讀取該位時返回0,寫入時忽略 |
I(bit[12]) |
當數據cache和指令cache是分開的,本控制位禁止/使能指令cache 0 :禁止指令 cache 1 :使能指令 cache 如果系統中使用統一的指令cache和數據cache或者系統中不含cache,讀取該位時返回0,寫入時忽略。當系統中的指令cache不能禁止時,讀取時該位返回1,寫入時忽略 |
V(bit[13]) |
對於支持高端異常向量表的系統,本控制位控制向量表的位置 0 :選擇低端異常中斷向量 0x0~0x1c 1 :選擇高端異常中斷向量0xffff0000~ 0xffff001c 對於不支持高端異常向量表的系統,讀取時該位返回0,寫入時忽略 |
PR(bit[14]) |
如果系統中的cache的淘汰演算法可以選擇的話,本控制位選擇淘汰演算法 0 :常規的 cache 淘汰演算法,如隨機淘汰 1 :預測性淘汰演算法,如round-robin 淘汰演算法 如果系統中cache的淘汰演算法不可選擇,寫入該位時忽略。讀取該位時,根據其淘汰演算法是否可以比較簡單地預測最壞情況返回0或者1 |
L4(bit[15]) |
對於ARM版本5及以上的版本,本控制位可以提供相容以前的ARM版本的功能 0 :保持 ARMv5 以上版本的正常功能 1 :將 ARMv5 以上版本與以前版本處理器 相容,不根據跳轉地址的 bit[0] 進行 ARM 指令和 Thumb 狀態切換: bit[0] 等於 0 表示 ARM 指令,等於 1 表示 Thumb 指令 |
Bits[31:16]) |
這些位保留將來使用,應為UNP/SBZP |
(三)CP15 的寄存器 C2
C2寄存器的別名:Translation table base (TTB) register
C2寄存器用來保存頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:
31 0 |
一級映射描述符表的基地址(物理地址) |
(四)CP15 的寄存器 C3
CP15 中的寄存器 C3 定義了 ARM 處理器的 16 個域的訪問許可權。
31 0 |
|||||||||||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
在 CP15的C3寄存器中,劃分了 16個域,每個區域由兩位構成,這兩位說明瞭當前記憶體的檢查許可權:
00:當前級別下,該記憶體區域不允許被訪問,任何的訪問都會引起一個domain fault,這時 AP位無效
01:當前級別下,該記憶體區域的訪問必須配合該記憶體區域的段描述符中AP位進行權檢查
10:保留狀態(我們最好不要填寫該值,以免引起不能確定的問題)
11:當前級別下,對該記憶體區域的訪問都不進行許可權檢查。 這時 AP位無效
所以只有當相應域的編碼為 01 時,才會根據 AP位 和協處理器CP15中的C1寄存器的R,S位進行許可權檢查
(五)CP15 的寄存器 C5
CP15 中的寄存器 C5 是失效狀態寄存器,分為指令狀態失效和數據狀態失效。
MRC p15, 0, <Rd>, c5, c0, 0 訪問數據失效狀態寄存器
MRC p15, 0, <Rd>, c5, c0, 1 訪問指令狀態失效寄存器
編碼格式如下所示:
31 9 |
8 |
7 4 |
3 0 |
UNP/SBZP |
0 |
域標識 |
狀態標識 |
其中,域標識bit[7:4]表示存放引起存儲訪問失效的存儲訪問所屬的域。
狀態標識 bit[3:0] 表示放引起存儲訪問失效的存儲訪問類型,該欄位含義如下表所示(優先順序由上到下遞減)。