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