系統控制協處理器CP15的目的是控制和提供在ARM1176JZF S處理器中實現的功能的狀態信息。系統控制協處理器的主要功能是:
- 全系統控制和配置
- 緩存配置和管理
- 緊耦合內存(TCM)配置和管理
- DMA控制
- 系統性能監視
系統控制協處理器不存在於不同的邏輯物理塊中。
系統控制協處理器功能組:
系統控制協處理器顯示爲一組32位寄存器,您可以對其進行讀寫。一些寄存器允許不止一種類型的操作。寄存器的功能分組是:
- 系統控制和配置
- MMU控制和配置
- 緩存控制和配置
- TCM控制和配置
- 緩存主有效寄存器
- DMA控制
- 系統性能監控器
- 系統驗證
系統控制協處理器控制處理器的TrustZone操作:
- 有些寄存器只能在安全域中訪問
- 有些寄存器分爲安全域組和非安全域組
- 有些寄存器在兩個域都通用
注意
當安全監視模式處於活動狀態時,核心位於安全域中。處理器將所有訪問都視爲安全訪問,並且不管NS位的值如何,系統控制協處理器的行爲都好像在安全環境中一樣進行操作。在安全監視器模式下,NS位定義了處理器可訪問的系統控制協處理器中的分組寄存器的副本:
- NS = 0,訪問安全域CP15寄存器
- NS = 1,訪問非安全域CP15寄存器
僅在安全域中可訪問的寄存器總是在安全監視模式下可訪問,而不管ns位的值如何。
1 系統協處理器的使用
首先介紹使用系統控制協處理器的一般方法。您可以使用MRC和MCR指令訪問系統控制協處理器CP15寄存器。
MCR{cond} P15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
- MCR---將寄存器<Rd>的值傳遞給編號爲P15的協處理器
MRC{cond} P15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
- MRC---使P15協處理器將值傳輸到ARM寄存器<Rd>。
下圖顯示了MRC和MCR指令的指令位模式:
MRC和MCR指令的CRn字段和CRm字段指定要訪問的協處理器寄存器。
Opcode_1字段和Opcode_2字段在尋址寄存器時指定特定的操作。
L位區分MRC(L = 1)和MCR(L = 0)。
Rd寄存器使用ARM的通用寄存器,用作源寄存器或目的寄存器,用於寫入或讀出協處理器中值。
指令CDP,LDC和STC以及對特權CP15寄存器的非特權MRC和MCR指令以及對安全寄存器的非安全訪問,導致處理器採用未定義指令陷阱。
注意
嘗試從不可讀取的寄存器讀取或寫入不可寫入的寄存器會導致未定義的異常。
在所有訪問CP15的指令中,Opcode_1,Opcode_2和CRm字段均應爲零,除非使用指定的值選擇所需的操作。使用其他值會導致未定義的異常。
在任何情況下,從任何CP15寄存器讀取數據值或將數據值寫入任何CP15寄存器,包括指定爲不可預測(UNP),應爲1(SBO)或應爲零(SBZ)的那些字段,均不會對芯片造成任何物理損壞。
2 系統協處理器寄存器分配
- CRn是CP15中的寄存器號
- Op1是寄存器的Opcode_1值
- CRm是操作寄存器
- Op2是寄存器的Opcode_2值
- 類型適用於安全域(S)或非安全域(NS),並且是:
- B,在安全和非安全域中的寄存器分組。如果沒有將寄存器分組,則它們對於兩個域都是通用的,或者只能在一個域中訪問。
- NA,無法訪問
- RO,只讀訪問
- RO,僅限特權模式下的只讀訪問
- R / W,讀/寫訪問
- R / W,僅在特權模式下進行讀/寫訪問
- WO,僅寫訪問
- WO,僅在特權模式下進行只寫訪問
- X,訪問取決於另一個寄存器或外部信號
2.1 參考Uboot,簡單說明
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
- CRn ---> c7
- Op1 ---> 0
- CRm ---> c7
- Op2 ---> 0
查看手冊“ARM1176JZF-S Technical Reference Manual”的3.2節:
找到對應的CRn、Op1、CRm、Op2值,發現上面的指令的作用是:
mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
mcr p15, 0, r0, c1, c0, 0
mcr p15,0,r0,c15,c2,4