ARM存儲器之:協(xié)處理器CP15
15.1.2CP15中的寄存器
表15.1給出了CP15主要寄存器的功能和作用。
表15.1 CP15寄存器
寄存器編號 | 基本作用 | 特殊用途 |
0 | ID編號(只讀) | ID和Cache類型 |
1 | 控制位 | 各種控制位 |
2 | 存儲器保護和控制 | MMU:地址轉(zhuǎn)換表基地址 PU:Cache屬性設(shè)置 |
3 | 內(nèi)存保護和控制 | MMU:域訪問控制 PU:寫緩存控制 |
4 | 內(nèi)存保護和控制 | 保留 |
5 | 內(nèi)存保護和控制 | MMU:錯誤狀態(tài) PU:訪問權(quán)限控制 |
6 | 內(nèi)存保護和控制 | MMU:錯誤狀態(tài) PU:保護區(qū)域控制 |
7 | Cache和寫緩存 | Cache和寫緩存控制 |
8 | 內(nèi)存保護和控制 | MMU:TLB控制 PU:保留 |
9 | Cache和寫緩存 | Cache鎖定 |
續(xù)表
寄存器編號 | 基本作用 | 特殊用途 |
10 | 內(nèi)存保護和控制 | MMU:TLB鎖定 PU:保留 |
11 | 保留 | 保留 |
12 | 保留 | 保留 |
13 | 進程ID | 進程ID |
14 | 保留 | 保留 |
15 | 芯片生產(chǎn)廠商定義 | 芯片生產(chǎn)廠商定義 |
15.1.3寄存器c0
寄存器c0包含的是ARM本身或芯片生產(chǎn)廠商的一些標(biāo)識信息。當(dāng)使用MRC指令讀c0寄存器時,根據(jù)第二個操作碼opcode2的不同,讀出的標(biāo)識符也是不同的。操作碼與標(biāo)識符的對應(yīng)關(guān)系如表15.2所示。寄存器c0是只讀寄存器,當(dāng)用MCR指令對其進行寫操作時,指令的執(zhí)行結(jié)果不可預(yù)知。
表15.2 操作碼和標(biāo)識符的對應(yīng)關(guān)系
操作碼opcode2 | 對應(yīng)的標(biāo)識符寄存器 |
0b000 | 主標(biāo)識符寄存器 |
0b001 | Cache類型寄存器 |
其他 | 保留 |
在操作碼opcode2的取值中,主標(biāo)識符(opcode2=0)是強制定義的,其他標(biāo)識符由芯片的生產(chǎn)廠商定義。如果操作碼opcode2指定的值未定義,指令將返回主標(biāo)識符。其他標(biāo)識符的值應(yīng)與主標(biāo)識符的值不同,可以由軟件編程來實現(xiàn),同時讀取主標(biāo)識符和其他標(biāo)識符,并將兩者的值進行比較。如果兩個標(biāo)識符值相同,說明未定義該標(biāo)識符;如果兩個標(biāo)識符值不同,說明定義了該標(biāo)識符,并且得到該標(biāo)識符的值。
(1)主標(biāo)識符寄存器
當(dāng)協(xié)處理器指令對CP15進行操作,并且操作碼opcode=2時,處理器的主標(biāo)識符將被讀出。從主標(biāo)識符中,可以確定ARM體系結(jié)構(gòu)的版本型號。同時也可以參考由芯片生產(chǎn)廠商定義的其他標(biāo)識符,來獲得更詳細(xì)的信息。
在主標(biāo)識信息中,bit[15:12]區(qū)分了不同的處理器版本:
·如果bit[15:12]為0x0,說明處理器是ARM7之前的處理器;
·如果bit[15:12]為0x7,說明處理器為ARM7處理器;
·如果bit[15:12]為其他值,說明處理器為ARM7之后的處理器。
對于ARM7之后的處理器,其標(biāo)識符的編碼格式如圖15.2所示。
其中各部分的編碼含義說明如下。
bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號。
bit[15:4]:生產(chǎn)廠商定義的產(chǎn)品主編號,可能的取值為0x0~0x7。
bit[19:16]:ARM體系的版本號,可能的取值如表15.3(其他值由ARM公司保留將來使用)所示。
圖15.2ARM7之后處理器標(biāo)識符編碼
表15.3 bit[19:16]與ARM版本號
可能的取值 | 版本號 |
0x1 | ARM體系版本4 |
0x2 | ARM體系版本4T |
0x3 | ARM體系版本5 |
0x4 | ARM體系版本5T |
0x5 | ARM體系版本5TE |
評論