ARM基礎學習-協處理器CP15

CP15負責管理ARM中存儲管理系統;

常用如下命令來操作CP15的寄存器;

MCR{cond}     coproc,opc1,CRd,CRn,CRm,opc2
//將arm寄存器中的數據傳送到協處理的寄存器當中;
MRC{cond}    coproc,opc1,CRd,CRn,CRm,opc2
//將協處理的寄存器傳送到arm寄存器

coproc 指令操作的協處理器名.標準名爲pn,n,爲0~15
opc1 協處理器的特定操作碼. 對於CP15寄存器來說,opcode1永遠爲0,不爲0時,操作結果不可預知
CRd 作爲目標寄存器的協處理器寄存器.
CRn 存放第1個操作數的協處理器寄存器.
CRm 存放第2個操作數的協處理器寄存器.(用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定爲C0)
opc2 可選的協處理器特定操作碼. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定爲0)

msm-3.18/arch/arm/kernel/head.S:

463 ENTRY(__turn_mmu_on)      
464     mov r0, r0
465     instr_sync
466     mcr p15, 0, r0, c1, c0, 0       @ write control reg
467     mrc p15, 0, r3, c0, c0, 0       @ read id reg

CP15可以包含16個32位的寄存器,其編號爲0-15。實際上對於某些編號的寄存器可能對應有多個物理寄存器。在指令中指定特定的標誌位(opc2)來區分這些物理寄存器。有些類似於ARM寄存器中,處於不同的處理器模式時,ARM某些寄存器可能不同。

來看CP15各個寄存器值的含義:
這裏寫圖片描述

(一)CP15 的寄存器 C0

The CP15 c0 registers provide device and feature identification,CP15 中寄存器 C0 對應兩個標識符寄存器:

這裏寫圖片描述

(二)CP15 的寄存器 C1

CP15中的寄存器C1是一個控制寄存器,它包括以下控制功能:
禁止或使能MMU以及其他與存儲系統相關的功能
配置存儲系統以及ARM處理器中的相關部分的工作

(三)CP15 的寄存器 C2

C2寄存器的別名:Translation table base (TTB) register
C2寄存器用來保存頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:
這裏寫圖片描述

(四)CP15 的寄存器 C3

CP15 中的寄存器 C3 定義了 ARM 處理器的 16 個域的訪問權限。

這裏寫圖片描述

在 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 訪問指令狀態失效寄存器

bit[7:4]表示存放引起存儲訪問失效的存儲訪問所屬的域。
狀態標識 bit[3:0] 表示放引起存儲訪問失效的存儲訪問類型,該字段含義如下表所示(優先級由上到下遞減)。

這裏寫圖片描述

(六)CP15的寄存器C6

CP15 中的寄存器 C6 是失效地址寄存器,其中保存了引起存儲訪問失效的地址,分爲數據失效地址寄存器和指令失效地址寄存器
MRC p15, 0, Rd, c6, c0, 0 訪問數據失效地址寄存器
MRC p15, 0, Rd, c6, c0, 2 訪問指令失效地址寄存器

(七)CP15的寄存器C7

CP15 的 C7 寄存器用來控制 cache 和寫緩存,它是一個只寫寄存器,讀操作將產生不可預知的後果。
訪問 CP15 的 C7 寄存器的指令格式如下所示:
mcr p15, 0, rd, c7, crm, opcode_2;
rd 、crm 和 opcode_2的不同取值組合,實現不同功能

表中的數據是指Rd中的數據:
這裏寫圖片描述

(八)CP15的寄存器C8

系統協處理器CP15的寄存器C8就是清除TLB內容的相關操作。它是一個只寫的寄存器。
MCR p15,0,Rd,c8,CRm,opcode_2
Rd中爲要寫入C8寄存器的內容,CRm和opcode_2的不同組合決定指令執行的不同操作:

這裏寫圖片描述

(九)CP15的寄存器C12

CP15寄存器C12用來設置異常向量基地址,其編碼格式如下所示:
MCR p15, 0, Rd, c12, c0, 0 ;Rd中存放要修改的異常向量基地址;
這裏寫圖片描述
注:只有ARM11和cortex-a 可以任意修改異常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中 ;

(十)CP15的寄存器C13

CP15中的寄存器C13用於快速上下文切換。

訪問寄存器C13的指令格式如下所示。
MCR p15, 0,Rd,c13,c0,0
MRC P15, 0,Rd,c13,c0,0
其中, 在讀操作時,結果中位[31::25]返回PID,其他位 的數值是不可以預知的。寫操作將設置PID的值。
當PID的值爲0時,MVA = VA | (0(PID)<<25),MVA=VA,相當於禁止了FCSE。系統復位後PID即爲0.
當PID的值不爲0時,相當於使能了FCSE。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章