新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM協(xié)處理器CP15寄存器詳解

ARM協(xié)處理器CP15寄存器詳解

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
用于系統(tǒng)存儲(chǔ)管理的協(xié)處理器CP15
MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2
coproc 指令操作的協(xié)處理器名.標(biāo)準(zhǔn)名為pn,n,為0~15
opcode1 協(xié)處理器的特定操作碼. 對(duì)于CP15寄存器來(lái)說(shuō),opcode1永遠(yuǎn)為0,不為0時(shí),操作結(jié)果不可預(yù)知
CRd 作為目標(biāo)寄存器的協(xié)處理器寄存器.
CRn 存放第1個(gè)操作數(shù)的協(xié)處理器寄存器.
CRm 存放第2個(gè)操作數(shù)的協(xié)處理器寄存器. (用來(lái)區(qū)分同一個(gè)編號(hào)的不同物理寄存器,當(dāng)不需要提供附加信息時(shí),指定為C0)
opcode2 可選的協(xié)處理器特定操作碼. (用來(lái)區(qū)分同一個(gè)編號(hào)的不同物理寄存器,當(dāng)不需要提供附加信息時(shí),指定為0)
  • 在基于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某些寄存器可能不同。
CP15的寄存器列表如表所示:

寄存器編號(hào)

本文引用地址:http://m.butianyuan.cn/article/201611/319524.htm

基本作用

MMU中的作用

PU中的作用

0

ID編碼(只讀)

ID編碼和cache類(lèi)型

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ì)而異

注:以下寄存器中相應(yīng)位的含義在不同的處理器中可能不同,但總體功能不變
(一)CP15的寄存器C0
CP15中寄存器C0對(duì)應(yīng)兩個(gè)標(biāo)識(shí)符寄存器,由訪問(wèn)CP15中的寄存器指令中的指定要訪問(wèn)哪個(gè)具體物理寄存器,與兩個(gè)標(biāo)識(shí)符寄存器的對(duì)應(yīng)關(guān)系如下所示:

opcode2編碼

對(duì)應(yīng)的標(biāo)識(shí)符號(hào)寄存器

0b000

主標(biāo)識(shí)符寄存器

0b001

cache類(lèi)型標(biāo)識(shí)符寄存器

其 他

保留

(1)主標(biāo)識(shí)符寄存器
指令如下:
MRC P15,0,R0,C0,C0,0 #將主標(biāo)示符寄存器的內(nèi)容讀到AMR寄存器R0中
主標(biāo)示符的編碼格式對(duì)于不同的ARM處理器版本有所不同。

對(duì)于AMR7之后的處理器,其主標(biāo)示符編碼格式如下 :

30 24

23 20

19 16

15 4

3 0

由生產(chǎn)商確定

產(chǎn)品子編號(hào)

ARM體系版本號(hào)

產(chǎn)品主編號(hào)

處理器版本號(hào)

各部分的編碼詳細(xì)含義如下表所示:

說(shuō)

[3: 0]

生產(chǎn)商定義的處理器版本號(hào)

[15: 4]

生產(chǎn)商定義的產(chǎn)品主編號(hào)

其中最高4位即位[15:12]可能的取值為0x0~0x7但不能是0x00x7

因?yàn)椋?/p>

0x0表示ARM7之前的處理器

0x7表示ARM7處理器

[19: 16]

ARM體系的版本號(hào),可能的取值如 下:

0x1ARM體系版本4

0x2ARM體系版本4T

0x3ARM體系版本5

0x4ARM體系版本5T

0x5ARM體系版本5TE

其他ARM公司保留將來(lái)使用

[23: 20]

生產(chǎn)商定義的產(chǎn)品子編號(hào)。當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)來(lái)區(qū)分不同的產(chǎn)品子類(lèi),如產(chǎn)品中不 同的高速緩存的大小等

[31: 24]

生產(chǎn)廠商的編號(hào),現(xiàn)在已經(jīng)定義的有以下值:

0x41=AARM公司

0x44=DDigital Equipment公司

0x69=Iintel公司

(2)cache類(lèi)型標(biāo)識(shí)符寄存器
指令如下:
MRC P15,0,R0,C0,C0,1 #將cache類(lèi)型標(biāo)識(shí)符寄存器的內(nèi)容讀到AMR寄存器R0中
ARM處理器中cache類(lèi)型標(biāo)識(shí)符寄存器的編碼格式如下所示:

31 29

28 25

24

23 12

11 0

000

屬性字段

S

數(shù)據(jù)cache相關(guān)屬性

指令cache相關(guān)屬性

各部分的編碼詳細(xì)含義如下表所示:

含義

[28: 25]

主要用于定義對(duì)于寫(xiě)回類(lèi)型的cache的一些屬性

[24]

定義系統(tǒng)中的數(shù)據(jù)cache和指令cache是分開(kāi)的還是統(tǒng)一的:

0系統(tǒng)的數(shù)據(jù)cache和指令cache是統(tǒng)一的;

1系統(tǒng)的數(shù)據(jù)cache和指令cache是分開(kāi)的

[23: 12]

定義數(shù)據(jù)cache的相關(guān)屬性

如果位[24]0,本字段定義整個(gè)cache的屬性

[31: 24]

定義指令cache的相關(guān)屬性

如果位[24]0,本字段定義整個(gè)cache的屬性

  • 控制字段位[2825]的含義
主要用于定義對(duì)于寫(xiě)回類(lèi)型的cache的一些屬性

cache類(lèi)型標(biāo)識(shí)符寄存器的控制字段位[2825]:

cache類(lèi)型

cache內(nèi)容清除方法

cache內(nèi)容鎖定方法

0b0000

寫(xiě)通類(lèi)型

不需要內(nèi)容清除

不支持內(nèi)容鎖定

0b0001

寫(xiě)回類(lèi)型

數(shù)據(jù)塊讀取

不支持內(nèi)容鎖定

0b0010

寫(xiě)回類(lèi)型

由寄存器C7定義

不支持內(nèi)容鎖定

0b0110

寫(xiě)回類(lèi)型

由寄存器C7定義

支持格式A

0b0111

寫(xiě)回類(lèi)型

由寄存器C7定義

支持格式B

  • 控制字段位[2312]及控制字段位[110]含義
[23:12]用于定義數(shù)據(jù)cache的屬性,[11: 0]用于定義指令cache的屬性
編碼格式如下:

11 9

8 6

5 3

2

1 0

000

cache容量

cache相聯(lián)特性

M

塊大小

其中bits[1:0]含義如下:

cache塊大小

0b00

2個(gè)字(8字節(jié))

0b01

4個(gè)字(16字節(jié))

0b10

8個(gè)字(32字節(jié))

0b11

16個(gè)字(64字節(jié))

其中bits[5:3]含義如下:

M=0時(shí)含義

M=1時(shí)含義

0b000

1路相聯(lián)(直接映射)

沒(méi)有cache

0b001

2路 相聯(lián)

3路 相聯(lián)

0b010

4路 相聯(lián)

6路 相聯(lián)

0b011

8路 相聯(lián)

12路 相聯(lián)

0b100

16路 相聯(lián)

24路 相聯(lián)

0b101

32路 相聯(lián)

48路 相聯(lián)

0b110

64路 相聯(lián)

96路 相聯(lián)

0b111

128路相聯(lián)

192路相聯(lián)

其中bits[8:6]含義如下:

M=0時(shí)含義

M=1時(shí)含義

0b000

0.5KB

0.75KB

0b001

1KB

1.5KB

0b010

2KB

3KB

0b011

4KB

6KB

0b100

8KB

12KB

0b101

16KB

24KB

0b110

32KB

48KB

0b111

64KB

96KB


(二)CP15的寄存器C1
CP15中的寄存器C1是一個(gè)控制寄存器,它包括以下控制功能:
  • 禁止或使能MMU以及其他與存儲(chǔ)系統(tǒng)相關(guān)的功能
  • 配置存儲(chǔ)系統(tǒng)以及ARM處理器中的相關(guān)部分的工作
指令如下:
mrcp15, 0, r0, c1, c0{, 0};將CP15的寄存器C1的值讀到r0
mcrp15, 0, r0, c1, c0{, 0};將r0的值寫(xiě)到CP15的寄存器C1
CP15中的寄存器C1的編碼格式及含義說(shuō)明如下:

C1中的控制位

含義

M(bit[0])

0:禁止MMU或者PU

1:使能MMU或者PU

如果系統(tǒng)中沒(méi)有MMU及PU,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略該位

A(bit[1])

0:禁止地址對(duì)齊檢查

1:使能地址對(duì)齊檢查

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:禁止數(shù)據(jù)/整個(gè)cache

1:使能數(shù)據(jù)/整個(gè)cache

如果系統(tǒng)中不含cache,讀取時(shí)該位返回0.寫(xiě)入時(shí)忽略

當(dāng)系統(tǒng)中不能禁止cache時(shí),讀取時(shí)返回1.寫(xiě)入時(shí)忽略

W(bit[3])

0:禁止寫(xiě)緩沖

1:使能寫(xiě)緩沖

如果系統(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:異常中斷處理程序進(jìn)入32位地址模式

1:異常中斷處理程序進(jìn)入26位地址模式

如果本系統(tǒng)中不支持向前兼容26位地址,讀取該位時(shí)返回1,寫(xiě)入時(shí)忽略

D(bit[5])

對(duì)于向前兼容26位地址的ARM處理器,本控制位控制DATA32控制信號(hào)

0:禁止26位地址異常檢查

1:使能26位地址異常檢查

如果本系統(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ǔ)模式

0little endian

1big endian

對(duì)于只支持little-endian的系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

對(duì)于只支持big-endian的系統(tǒng),讀取時(shí)該位返回1,寫(xiě)入時(shí)忽略

S(bit[8])

在基于MMU的存儲(chǔ)系統(tǒng)中,本位用作系統(tǒng)保護(hù)

R(bit[9])

在基于MMU的存儲(chǔ)系統(tǒng)中,本位用作ROM保護(hù)

F(bit[10])

由生產(chǎn)商定義

Z(bit[11])

對(duì)于支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),本控制位禁止/使能跳轉(zhuǎn)預(yù)測(cè)功能

0:禁止跳轉(zhuǎn)預(yù)測(cè)功能

1:使能跳轉(zhuǎn)預(yù)測(cè)功能

對(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:禁止指令cache

1:使能指令cache

如果系統(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:選擇低端異常中斷向量0x0~0x1c

1:選擇高端異常中斷向量0xffff0000~ 0xffff001c

對(duì)于不支持高端異常向量表的系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

PR(bit[14])

如果系統(tǒng)中的cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法

0:常規(guī)的cache淘汰算法,如隨機(jī)淘汰

1:預(yù)測(cè)性淘汰算法,如round-robin淘汰算法

如果系統(tǒng)中cache的淘汰算法不可選擇,寫(xiě)入該位時(shí)忽略。讀取該位時(shí),根據(jù)其淘汰算法是否可以比較簡(jiǎn)單地預(yù)測(cè)最壞情況返回0或者1

L4(bit[15])

對(duì)于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能

0:保持ARMv5以上版本的正常功能

1:將ARMv5以上版本與以前版本處理器兼容,不根據(jù)跳轉(zhuǎn)地址的bit[0]進(jìn)行ARM指令和Thumb狀態(tài)切換:bit[0]等于0表示ARM指令,等于1表示Thumb指令

Bits[31:16])

這些位保留將來(lái)使用,應(yīng)為UNP/SBZP

(三)CP15的寄存器C2

C2寄存器的別名:Translation table base (TTB) register

C2寄存器用來(lái)保存頁(yè)表的基地址,即一級(jí)映射描述符表的基地址。其編碼格如下所示:

310

一級(jí)映射描述符表的基地址(物理地址)

(四)CP15的寄存器C3

CP15中的寄存器C3定義了ARM處理器的16個(gè)域的訪問(wèn)權(quán)限。

310

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

CP15的C3寄存器中,劃分了16個(gè)域,每個(gè)區(qū)域由兩位構(gòu)成,這兩位說(shuō)明了當(dāng)前內(nèi)存的檢查權(quán)限:
00:當(dāng)前級(jí)別下,該內(nèi)存區(qū)域不允許被訪問(wèn),任何的訪問(wèn)都會(huì)引起一個(gè)domain fault,這時(shí) AP位無(wú)效
01:當(dāng)前級(jí)別下,該內(nèi)存區(qū)域的訪問(wèn)必須配合該內(nèi)存區(qū)域的段描述符中AP位進(jìn)行權(quán)檢查
10:保留狀態(tài)(我們最好不要填寫(xiě)該值,以免引起不能確定的問(wèn)題)
11:當(dāng)前級(jí)別下,對(duì)該內(nèi)存區(qū)域的訪問(wèn)都不進(jìn)行權(quán)限檢查。這時(shí)AP位無(wú)效
所以只有當(dāng)相應(yīng)域的編碼為 01時(shí),才會(huì)根據(jù)AP位和協(xié)處理器CP15中的C1寄存器的R,S位進(jìn)行權(quán)限檢查

(五)CP15的寄存器C5
CP15中的寄存器C5是失效狀態(tài)寄存器,分為指令狀態(tài)失效和數(shù)據(jù)狀態(tài)失效。
MRC p15, 0, , c5, c0, 0 訪問(wèn)數(shù)據(jù)失效狀態(tài)寄存器 
MRC p15, 0, , c5, c0, 1 訪問(wèn)指令狀態(tài)失效寄存器 
編碼格式如下所示: 

31 9

8

7 4

3 0

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

終端異常(Terminal Exception

0b0010

無(wú) 效

生 產(chǎn)商定義

中斷向量訪問(wèn)異常(Vector Exception)

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

有 效

有 效

基于段的cache預(yù) 取時(shí)外部存儲(chǔ)系統(tǒng)失效

0b0110

有 效

有 效

基于頁(yè)的cache預(yù) 取時(shí)外部存儲(chǔ)系統(tǒng)失效

0b1000

有 效

有 效

基于段的非cache預(yù) 取時(shí)外部存儲(chǔ)系統(tǒng)失效

0b1010

有 效

有 效

(六)CP15的寄存器C6

CP15中的寄存器C6是失效地址寄存器,其中保存了引起存儲(chǔ)訪問(wèn)失效的地址,分為數(shù)據(jù)失效地址寄存器和指令失效地址寄存器

MRC p15, 0, , c6, c0, 0 訪問(wèn)數(shù)據(jù)失效地址寄存器 
MRC p15, 0, , c6, c0, 2 訪問(wèn)指令失效地址寄存器 

編碼格式如下所示:

310

失效地址(虛擬地址)

(七)CP15的寄存器C7
CP15C7寄存器用來(lái)控制cache和寫(xiě)緩存,它是一個(gè)只寫(xiě)寄存器,讀操作將產(chǎn)生不可預(yù)知的后果。
訪問(wèn)CP15C7寄存器的指令格式如下所示:
mcr p15, 0, , , crm, ;的不同取值組合,實(shí)現(xiàn)不同功能
表中的數(shù)據(jù)是指Rd中的數(shù)據(jù):
(八)CP15的寄存器C8

系統(tǒng)協(xié)處理器CP15的寄存器C8就是清除TLB內(nèi)容的相關(guān)操作。它是一個(gè)只寫(xiě)的寄存器。

MCR p15,0,Rd,c8,CRm,opcode_2

Rd中為要寫(xiě)入C8寄存器的內(nèi)容,CRm和opcode_2的不同組合決定指令執(zhí)行的不同操作。

指令

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è)地址變換條目

(九)CP15的寄存器C12
CP15寄存器C12用來(lái)設(shè)置異常向量基地址,其編碼格式如下所示:
MCR p15, 0, , c12, c0, 0 ;Rd中存放要修改的異常向量基地址 

31 5

4 0

異常向量基地址

Reserve

注:只有ARM11和cortex-a 可以任意修改異常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中
(十)CP15的寄存器C13

CP15中的寄存器C13用于快速上下文切換。其編碼格式如下所示。

訪問(wèn)寄存器C13的指令格式如下所示。

MCRp15, 0,,,c0,0

MRC P15, 0,,,c0,0

其中,在讀操作時(shí),結(jié)果中位[31::25]返回PID,其他位 的數(shù)值是不可以預(yù)知的。寫(xiě)操作將設(shè)置PID的值。

當(dāng)PID的值為0時(shí),MVA = VA | (0(PID)<<25),MVA=VA,相當(dāng)于禁止了FCSE。系統(tǒng)復(fù)位后PID即為0.

當(dāng)PID的值不為0時(shí),相當(dāng)于使能了FCSE。




關(guān)鍵詞: ARM協(xié)處理器CP15寄存

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉