協處理器概述
ARM架構通過支持協處理器來擴展處理器的功能。ARM架構的處理器支持最多16個協處理器,通常稱為CP0~CP15。下述的協處理器被ARM用于特殊用途:
CP15:提供系統控制功能,主要用于配置MMU、TLB和Cache等功能。
CP14:主要用于控制系統Debug功能。
CP10、CP11:兩個協處理器一起提供了對浮點運算和向量操作的支持,這兩個協處理器主要用于控制和配置浮點功能和高級SIMD指令擴展。
其他協處理器被ARM保留用于將來使用。
本文主要說說CP15協處理器。
CP15協處理器總覽
CP15是系統控制協處理器,主要用于對ARM處理器核心支持的許多特性功能進行配置。CP15協處理器支持16個32位主寄存器(primary register),命名為c0~c15。c0~c15主寄存器各自又有多個32位的物理寄存器(physical register)。CP15協處理器的大多數寄存器不能在USR模式下訪問,只能在除USR模式外的其他模式下訪問。下面列出c0~c15中比較常用的寄存器:
primary register | physical register | 描述 |
---|---|---|
c0 | MIDR | 主ID寄存器,用于記錄版本信息 |
c0 | MPIDR | 多核處理器情況下,提供一種方法來唯一標識集群中的各個核心 |
c1 | SCTLR | 系統控制寄存器 |
c1 | ACTLR | 輔助控制寄存器 |
c1 | CPACR | 協處理器訪問控制寄存器,控制訪問除了CP14和CP15的協處理器 |
c1 | SCR | 安全配置寄存器,被TrustZone使用 |
c2、c3 | TTBR0 | 一級轉換頁表基址寄存器0 |
c2、c3 | TTBR1 | 一級轉換頁表基址寄存器1 |
c2、c3 | TTBCR | 頁表轉換控制寄存器 |
c5、c6 | DFSR | 數據異常(Data Fault)狀態寄存器 |
c5、c6 | IFSR | 指令異常(Instruction Fault)狀態寄存器 |
c5、c6 | DFAR | 數據異常(Data Fault)地址寄存器 |
c5、c6 | IFAR | 指令異常(Instruction Fault)地址寄存器 |
c7 | branch predictor | cache和分支預測管理功能 |
c7 | barrier | 數據和指令屏障操作 |
c8 | TLB | TLB操作 |
c9 | performance monitors | 性能監視器 |
c12 | VBAR | 提供非監視模式處理異常的異常基地址 |
c12 | MVBAR | 提供監視模式處理異常的異常基地址 |
c13 | CONTEXTIDR | 上下文ID寄存器 |
c15 | CBAR | 配置基址寄存器,為GIC和本地時鐘類型外設提供基地址 |
在CP15協處理器中,c0~c15每個主處理器下面有多個物理寄存器,上述表格只列出了部分常用的物理寄存器。
協處理器操作指令
ARMv7-A體系結構的處理器提供了MRC和MCR指令用于對協處理器進行讀寫操作。MRC指令用于將CP15協處理器中的寄存器數據讀取到ARM通用寄存器中。MCR指令用于將ARM通用寄存器中的數據寫入到CP15協處理器的寄存器中。
MRC
MRC指令的語法如下所示:
?
MRC{cond} coproc, opc1, Rt, CRn, CRm{, opc2}
?
cond為條件碼。
coproc為協處理器名稱,CP0~CP15協處理器分別對應名稱p0~p15。
opc1為協處理器要執行的操作碼,取指范圍為0~7。
Rt為ARM通用寄存器,用于存儲讀取到的協處理器寄存器數據。
CRn為協處理器寄存器,對于CP15協處理器來說,CRn取值范圍為c0~c15。
CRm為協處理器寄存器,對于CP15協處理器來說,通過CRm和opc2一起來確定CRn對應的具體寄存器。
opc2為可選的協處理器執行操作碼,取指范圍為0~7,當不需要的時候要設置為0。
MRC指令使用示例如下:
?
# 讀取主ID寄存器 MIDR 的數據到 R0 中. MRC p15, 0, R0, c0, c0, 0
?
MCR
MCR指令的語法如下所示:
?
MCR{cond} coproc, opc1, Rt, CRn, CRm{, opc2}
?
cond為條件碼。
coproc為協處理器名稱,CP0~CP15協處理器分別對應名稱p0~p15。
opc1為協處理器要執行的操作碼,取指范圍為0~7。
Rt為ARM通用寄存器,用于存儲要寫入到協處理器寄存器中的數據。
CRn為協處理器寄存器,對于CP15協處理器來說,CRn取值范圍為c0~c15。
CRm為協處理器寄存器,對于CP15協處理器來說,通過CRm和opc2一起來確定CRn對應的具體寄存器。
opc2為可選的協處理器執行操作碼,取指范圍為0~7,當不需要的時候要設置為0。
MCR指令使用示例如下:
?
# 將 R0 中的配置數據寫入到 SCTLR MCR p15, 0, R0, c1, c0, 0
?
CP15協處理器主寄存器組成
CP15協處理器有c0~c15總共16個主寄存器,在每個主寄存器下面,又有多個物理寄存器。下圖總結了CP15協處理器的寄存器組織形式:
Snipaste_2023-09-18_20-14-06
上圖對于MRC和MCR指令所要使用到的一些參數都標明了,對于想要訪問CP15協處理器相關寄存器,只需要看圖填寫好參數就行了。下面具體列一下c0~c15各個主寄存器的組成。
CP15協處理器c0寄存器組成
主寄存器c0主要提供ID相關的功能,c0寄存器的組成如下圖所示:
Snipaste_2023-09-18_20-26-50
CP15協處理器c1寄存器組成
主寄存器c1主要提供系統控制相關的功能,c1寄存器的組成如下圖所示:
Snipaste_2023-09-18_20-31-13
在CP15協處理器的寄存器中,系統控制寄存器SCTLR是被訪問的比較多的寄存器。對SCTLR寄存器的訪問需要在PL1或者更高的特權等級。SCTLR寄存器的位關系如下圖所示:
Snipaste_2023-09-18_20-40-41
位 | 標志 | 說明 |
---|---|---|
30 | TE | Thumb異常使能,控制在異常發生時(包括reset),將會進入哪種指令集,0:ARM指令集,1:Thumb指令集 |
27 | NMFI | 不可屏蔽的FIQ支持,0:軟件可以通過寫CPSR.F位來屏蔽FIQ,1:軟件不可以通過寫CPSR.F位來屏蔽FIQ |
25 | EE | 在進入異常處理時的大小端模式配置,0:小端,1:大端 |
22 | U | 表明是否使用對齊模式 |
21 | FI | FIQ配置使能 |
13 | V | 選擇異常向量表基址,0:0x00000000,1:0xffff0000 |
12 | I | 指令cache使能 |
11 | Z | 分支預測使能 |
2 | C | 數據cache使能 |
1 | A | 對齊檢查使能 |
0 | M | MMU使能 |
CP15協處理器c2 c3寄存器組成
主寄存器c2和c3主要提供內存保護和內存控制相關的功能,c2和c3寄存器的組成如下圖所示:
Snipaste_2023-09-18_21-24-50
CP15協處理器c4寄存器組成
在任何基于ARMv7實現的處理器中,協處理器CP15的c4寄存器沒有被使用。
CP15協處理器c5 c6寄存器組成
主寄存器c5和c6主要提供內存系統錯誤上報功能,c5和c6寄存器的組成如下圖所示:
Snipaste_2023-09-18_21-33-47
CP15協處理器c7寄存器組成
主寄存器c7主要提供cache維護,地址轉換和內存屏障操作相關的功能,c7寄存器的組成如下圖所示:
Snipaste_2023-09-18_21-36-48
CP15協處理器c8寄存器組成
主寄存器c8主要提供TLB維護相關的功能,c8寄存器的組成如下圖所示:
Snipaste_2023-09-18_21-52-39
CP15協處理器c9寄存器組成
主寄存器c9保留用于分支預測,cache和TCM操作,c9寄存器的組成如下圖所示:
Snipaste_2023-09-18_22-01-45
CP15協處理器c10寄存器組成
主寄存器c10主要提供內存重映射和TLB控制相關的功能,c10寄存器的組成如下圖所示:
Snipaste_2023-09-18_20-05-48
CP15協處理器c11寄存器組成
主寄存器c11保留用于TCM DMA操作,c11寄存器的組成如下圖所示:
Snipaste_2023-09-19_20-50-17
CP15協處理器c12寄存器組成
主寄存器c12提供安全擴展功能,c12寄存器的組成如下圖所示:
Snipaste_2023-09-19_20-57-07
CP15協處理器c13寄存器組成
主寄存器c13提供進程ID、上下文ID和線程ID處理功能,c13寄存器的組成如下圖所示:
Snipaste_2023-09-19_21-02-11
CP15協處理器c14寄存器組成
主寄存器c14保留用于通用定時器功能,c14寄存器的組成如下圖所示:
Snipaste_2023-09-19_21-55-42
CP15協處理器c15寄存器組成
主寄存器c15由處理器實現決定。
這里只是簡單的將CP15各個主寄存器的組成列出來了,方便在使用MRC和MCR指令配置CP15主寄存器時,查看指令各個參數的設置,以及對照配置的具體寄存器,至于寄存器的具體內容由于篇幅原因就不列出來了,CP15寄存器的細節可以參考ARMv7AR手冊的B3.17章節內容。
審核編輯:湯梓紅
評論
查看更多