ARM協(xié)處理器CP15寄存器詳解
- 在基于ARM的嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)通常是通過(guò)系統(tǒng)控制協(xié)處理器CP15完成的。
- CP15可以包含16個(gè)32位的寄存器,其編號(hào)為0-15。實(shí)際上對(duì)于某些編號(hào)的寄存器可能對(duì)應(yīng)有多個(gè)物理寄存器。在指令中指定特定的標(biāo)志位來(lái)區(qū)分這些物理寄存器。有些類(lèi)似于ARM寄存器中,處于不同的處理器模式時(shí),ARM某些寄存器可能不同。
寄存器編號(hào) 本文引用地址:http://m.butianyuan.cn/article/201611/319524.htm | 基本作用 | 在 | 在 |
0 | ID | ID | |
1 | 控制位(可讀寫(xiě)) | 各種控制位 | |
2 | 存儲(chǔ)保護(hù)和控制 | 地址轉(zhuǎn)換表基地址 | Cachability |
3 | 存儲(chǔ)保護(hù)和控制 | 域訪問(wèn)控制位 | Bufferablity |
4 | 存儲(chǔ)保護(hù)和控制 | 保留 | 保 留 |
5 | 存儲(chǔ)保護(hù)和控制 | 內(nèi)存失效狀態(tài) | 訪問(wèn)權(quán)限控制位 |
6 | 存儲(chǔ)保護(hù)和控制 | 內(nèi)存失效地址 | 保護(hù)區(qū)域控制 |
7 | 高速緩存和寫(xiě)緩存 | 高速緩存和寫(xiě)緩存控制 | |
8 | 存儲(chǔ)保護(hù)和控制 | TLB | 保 留 |
9 | 高速緩存和寫(xiě)緩存 | 高速緩存鎖定 | |
10 | 存儲(chǔ)保護(hù)和控制 | TLB | 保 留 |
11 | 保留 | ||
12 | 保留 | ||
13 | 進(jìn)程標(biāo)識(shí)符 | 進(jìn)程標(biāo)識(shí)符 | |
14 | 保留 | ||
15 | 因不同設(shè)計(jì)而異 | 因不同設(shè)計(jì)而異 | 因不同設(shè)計(jì)而異 |
opcode2 | 對(duì)應(yīng)的標(biāo)識(shí)符號(hào)寄存器 |
0b000 | 主標(biāo)識(shí)符寄存器 |
0b001 | cache類(lèi)型標(biāo)識(shí)符寄存器 |
其 他 | 保留 |
對(duì)于AMR7之后的處理器,其主標(biāo)示符編碼格式如下 :
30 | 23 | 19 | 15 | 3 |
由生產(chǎn)商確定 | 產(chǎn)品子編號(hào) | ARM | 產(chǎn)品主編號(hào) | 處理器版本號(hào) |
位 | |
位 | 生產(chǎn)商定義的處理器版本號(hào) |
位 | 生產(chǎn)商定義的產(chǎn)品主編號(hào) 其中最高 因?yàn)椋?/p> 0x0表示 0x7 |
位 | ARM 0x1 0x2 0x3 0x4 0x5 其他 |
位 | 生產(chǎn)商定義的產(chǎn)品子編號(hào)。當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)來(lái)區(qū)分不同的產(chǎn)品子類(lèi),如產(chǎn)品中不 同的高速緩存的大小等 |
位 | 生產(chǎn)廠商的編號(hào),現(xiàn)在已經(jīng)定義的有以下值: 0x41 0x44 0x69 |
31 | 28 | 24 | 23 | 11 |
位 | 含義 |
位 | 主要用于定義對(duì)于寫(xiě)回類(lèi)型的cache的一些屬性 |
位 | 定義系統(tǒng)中的數(shù)據(jù) 0 1 |
位 | 定義數(shù)據(jù) 如果位 |
位 | 定義指令 如果位 |
控制字段位 [28 : 25] 的含義
cache
編 | cache | cache | cache |
0b0000 | 寫(xiě)通類(lèi)型 | 不需要內(nèi)容清除 | 不支持內(nèi)容鎖定 |
0b0001 | 寫(xiě)回類(lèi)型 | 數(shù)據(jù)塊讀取 | 不支持內(nèi)容鎖定 |
0b0010 | 寫(xiě)回類(lèi)型 | 由寄存器 | 不支持內(nèi)容鎖定 |
0b0110 | 寫(xiě)回類(lèi)型 | 由寄存器 | 支持格式 |
0b0111 | 寫(xiě)回類(lèi)型 | 由寄存器 | 支持格式 |
- 控制字段位
[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 | 沒(méi)有 |
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時(shí)含義 |
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以及其他與存儲(chǔ)系統(tǒng)相關(guān)的功能
- 配置存儲(chǔ)系統(tǒng)以及ARM處理器中的相關(guān)部分的工作
C1中的控制位 | 含義 |
M(bit[0]) | 0 1 如果系統(tǒng)中沒(méi)有MMU及PU,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略該位 |
A(bit[1]) | 0 1 |
C(bit[2]) | 當(dāng)數(shù)據(jù)cache和指令cache分開(kāi)時(shí),本控制位禁止/使能數(shù)據(jù)cache。當(dāng)數(shù)據(jù)cache和指令cache統(tǒng)一時(shí),該控制位禁止/使能整個(gè)cache。 0 1 如果系統(tǒng)中不含cache,讀取時(shí)該位返回0.寫(xiě)入時(shí)忽略 當(dāng)系統(tǒng)中不能禁止cache |
W(bit[3]) | 0 1 如果系統(tǒng)中不含寫(xiě)緩沖時(shí),讀取時(shí)該位返回0.寫(xiě)入時(shí)忽略 當(dāng)系統(tǒng)中不能禁止寫(xiě)緩沖時(shí),讀取時(shí)返回1.寫(xiě)入時(shí)忽略 |
P(bit[4]) | 對(duì)于向前兼容26位地址的ARM處理器,本控制位控制PROG32控制信號(hào) 0 1 如果本系統(tǒng)中不支持向前兼容26位地址,讀取該位時(shí)返回1,寫(xiě)入時(shí)忽略 |
D(bit[5]) | 對(duì)于向前兼容26位地址的ARM處理器,本控制位控制DATA32控制信號(hào) 0 1 如果本系統(tǒng)中不支持向前兼容26位地址,讀取該位時(shí)返回1,寫(xiě)入時(shí)忽略 |
L(bit[6]) | 對(duì)于ARMv3及以前的版本,本控制位可以控制處理器的中止模型 0 1 |
B(bit[7]) | 對(duì)于存儲(chǔ)系統(tǒng)同時(shí)支持big-endian和little-endian的ARM系統(tǒng),本控制位配置系統(tǒng)的存儲(chǔ)模式 0 1 對(duì)于只支持little-endian的系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略 對(duì)于只支持big-endian的系統(tǒng),讀取時(shí)該位返回1,寫(xiě)入時(shí)忽略 |
S(bit[8]) | 在基于 |
R(bit[9]) | 在基于 |
F(bit[10]) | 由生產(chǎn)商定義 |
Z(bit[11]) | 對(duì)于支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),本控制位禁止/使能跳轉(zhuǎn)預(yù)測(cè)功能 0 1 對(duì)于不支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),讀取該位時(shí)返回0,寫(xiě)入時(shí)忽略 |
I(bit[12]) | 當(dāng)數(shù)據(jù)cache和指令cache是分開(kāi)的,本控制位禁止/使能指令cache 0 1 如果系統(tǒng)中使用統(tǒng)一的指令cache和數(shù)據(jù)cache或者系統(tǒng)中不含cache,讀取該位時(shí)返回0,寫(xiě)入時(shí)忽略。當(dāng)系統(tǒng)中的指令cache不能禁止時(shí),讀取時(shí)該位返回1,寫(xiě)入時(shí)忽略 |
V(bit[13]) | 對(duì)于支持高端異常向量表的系統(tǒng),本控制位控制向量表的位置 0 1 對(duì)于不支持高端異常向量表的系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略 |
PR(bit[14]) | 如果系統(tǒng)中的cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法 0 1 如果系統(tǒng)中cache的淘汰算法不可選擇,寫(xiě)入該位時(shí)忽略。讀取該位時(shí),根據(jù)其淘汰算法是否可以比較簡(jiǎn)單地預(yù)測(cè)最壞情況返回0或者1 |
L4(bit[15]) | 對(duì)于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能 0 1 |
Bits[31:16]) | 這些位保留將來(lái)使用,應(yīng)為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:保留狀態(tài)(我們最好不要填寫(xiě)該值,以免引起不能確定的問(wèn)題)
11:當(dāng)前級(jí)別下,對(duì)該內(nèi)存區(qū)域的訪問(wèn)都不進(jìn)行權(quán)限檢查。
MRC p15, 0, , c5, c0, 0 訪問(wèn)數(shù)據(jù)失效狀態(tài)寄存器
MRC p15, 0, , c5, c0, 1訪問(wèn)指令狀態(tài)失效寄存器
編碼格式如下所示:
31 | 8 | 7 | 3 |
UNP/SBZP | 0 | 域標(biāo)識(shí) | 狀態(tài)標(biāo)識(shí) |
其中,域標(biāo)識(shí)bit[7:4]表示存放引起存儲(chǔ)訪問(wèn)失效的存儲(chǔ)訪問(wèn)所屬的域。狀態(tài)標(biāo)識(shí)bit[3:0] 表示放引起存儲(chǔ)訪問(wèn)失效的存儲(chǔ)訪問(wèn)類(lèi)型,該字段含義如下表所示(優(yōu)先級(jí)由上到下遞減)。
引起訪問(wèn)失效的原因 | 狀態(tài)標(biāo)識(shí) | 域標(biāo)識(shí) | C6 |
終端異常( | 0b0010 | 無(wú) 效 | 生 產(chǎn)商定義 |
中斷向量訪問(wèn)異常( | 0b0000 | 無(wú) 效 | 有 效 |
地 址對(duì)齊 | 0b00x1 | 無(wú) 效 | 有 效 |
一 級(jí)頁(yè)表訪問(wèn)失效 | 0b1100 | 無(wú) 效 | 有 效 |
二 級(jí)頁(yè)表訪問(wèn)失效 | 0b1110 | 有 效 | 有 效 |
基 于段的地址變換失效 | 0b0101 | 無(wú) 效 | 有 效 |
基 于頁(yè)的地址變換失效 | 0b0111 | 有 效 | 有 效 |
基 于段的存儲(chǔ)訪問(wèn)中域控制失效 | 0b1001 | 有 效 | 有 效 |
基 于頁(yè)的存儲(chǔ)訪問(wèn)中域控制失效 | 0b1101 | 有 效 | 有 效 |
基 于段的存儲(chǔ)訪問(wèn)中訪問(wèn)權(quán)限控制失效 | 0b1111 | 有 效 | 有 效 |
基 于頁(yè)的存儲(chǔ)訪問(wèn)中訪問(wèn)權(quán)限控制失效 | 0b0100 | 有 效 | 有 效 |
基于段的 | 0b0110 | 有 效 | 有 效 |
基于頁(yè)的 | 0b1000 | 有 效 | 有 效 |
基于段的非 | 0b1010 | 有 效 | 有 效 |
CP15
MRC p15, 0, , c6, c0, 0訪問(wèn)數(shù)據(jù)失效地址寄存器
MRC p15, 0, , c6, c0, 2 訪問(wèn)指令失效地址寄存器
編碼格式如下所示:
31 |
指令 | Rd | 含義 |
MCR p15, 0, Rd, c8, c5, 0 | 0 | 使無(wú)效整個(gè)指令TLB |
MCR p15, 0, Rd, c8, c5, 1 | 虛擬地址 | 使無(wú)效指令TLB中的單個(gè)地址變換條目 |
MCR p15, 0, Rd, c8, c6, 0 | 0 | 使無(wú)效整個(gè)數(shù)據(jù)TLB |
MCR p15, 0, Rd, c8, c6, 1 | 虛擬地址 | 使無(wú)效數(shù)據(jù)TLB中的單個(gè)地址變換條目 |
MCR p15, 0, , c8, c7, 0 | 0 | 使無(wú)效整個(gè)數(shù)據(jù)和指令TLB |
MCR p15, 0, , c8, c7, 1 | 虛擬地址 | 使無(wú)效數(shù)據(jù)和指令TLB中的單個(gè)地址變換條目 |
MCR p15, 0, , c12, c0, 0 ;Rd中存放要修改的異常向量基地址
31 | 4 |
異常向量基地址 | Reserve |
CP15中的寄存器C13用于快速上下文切換。其編碼格式如下所示。
訪問(wèn)寄存器C13的指令格式如下所示。
MCR
MRC
其中,在讀操作時(shí),結(jié)果中位[31::25]返回PID,其他位 的數(shù)值是不可以預(yù)知的。寫(xiě)操作將設(shè)置PID的值。
評(píng)論