全面瞭解 ARM CP15協處理器 (深度好文)

轉載自:http://blog.chinaunix.net/uid-14114479-id-3110951.html


ARM926EJ-S/ARM920T 協處理器 CP14, CP15 詳解   

  

 

ARM 微處理器可支持多達 16 個協處理器,用於各種協處理操作,在程序執行的過程中,

每個協處理器只執行鍼對自身的協處理指令,忽略 ARM 處理器和其他協處理器的指令。

ARM 的協處理器指令主要用於 ARM 處理器初始化 ARM 協處理器的數據處理操作,以及

在 ARM 處理器的寄存器和協處理器的寄存器之間傳送數據,和在 ARM 協處理器的寄存器

和存儲器之間傳送數據。 ARM 協處理器指令包括以下 條:  

 

— CDP 協處理器數操作指令  

 

— LDC 協處理器數據加載指令  

 

— STC 協處理器數據存儲指令  

 

— MCR ARM 處理器寄存器到協處理器寄存器的數據傳送指令  

 

— MRC 協處理器寄存器到 ARM 處理器寄存器的數據傳送指令  

 

1CDP 指令  

CDP 指令的格式爲:  

 

CDP{條件協處理器編碼,協處理器操作碼 1,目的寄存器,源寄存器 1,源寄存器 2,協

處理 器操作碼 2。  CDP 指令用於 ARM 處理器通知 ARM 協處理器執行特定的操作,若協處

理器不能成功完成特定的操作,則產生未定義指令異常。其中協處理器操作碼 和協處理

器操作碼 爲協處理器將要執行的操作,目的寄存器和源寄存器均爲協處理器的寄存器,

指令不涉及 ARM 處理器的寄存器和存儲器。  

 

指令示例:  

 

CDP P3 , , C12 , C10 , C3 , ;該指令完成協處理器 P3 的初始化  

 

2LDC 指令  

LDC 指令的格式爲:  

 

LDC{條件}{L} 協處理器編碼,目的寄存器,[源寄存器]  

 

LDC 指令用於將源寄存器所指向的存儲器中的字數據傳送到目的寄存器中,若協處理器不

能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令爲長讀取操作,如

用於雙精度數據的傳輸。  

 

指令示例:  

 LDC P3 , C4 , [R0] ;將 ARM 處理器的寄存器 R0 所指向的存儲器中的字數據傳送到

協處理器 P3 的寄存器 C4 中。  

 

3STC 指令  

STC 指令的格式爲:  

 

  

 

STC{條件}{L} 協處理器編碼,源寄存器,[目的寄存器]  

 

STC 指令用於將源寄存器中的字數據傳送到目的寄存器所指向的存儲器中,若協處理器不

能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令爲長讀取操作,如

用於雙精度數據的傳輸。  

 

指令示例:  

 

STC P3 , C4 , [R0] ;將協處理器 P3 的寄存器 C4 中的字數據傳送到 ARM 處理器的

寄存器 R0 所指向的存儲器中。  

 

  

 

4MCR 指令  

MCR 指令的格式爲:  

 

MCR{條件協處理器編碼,協處理器操作碼 1,源寄存器,目的寄存器 1,目的寄存器 2

協處理器操作碼 2。  

 

  

 

MCR 指令用於將 ARM 處理器寄存器中的數據傳送到協處理器寄存器中,若協處理器不能成

功完成操作,則產生未定義指令異常。其中協處理器操作碼 和協處理器操作碼 爲協處

理器將要執行的操作,源寄存器爲 ARM 處理器的寄存器,目的寄存器 和目的寄存器 

爲協處理器的寄存器。  

 

  

 

指令示例:  

 

  

 

MCR P33R0C4C56;該指令將 ARM 處理器寄存器 R0 中的數據傳送到協處理

器 P3 的寄存器 C4 和 C5 中。  

 

   

5MRC 指令  

  

 

MRC 指令的格式爲:  

 

  

 

MRC{條件協處理器編碼,協處理器操作碼 1,目的寄存器,源寄存器 1,源寄存器 2,協

處理器操作碼 2。  

 

  

 

MRC 指令用於將協處理器寄存器中的數據傳送到 ARM 處理器寄存器中,若協處理器不能成

功完成操作,則產生未定義指令異常。其中協處理器操作碼 和協處理器操作碼 爲協處

理器將要執行的操作,目的寄存器爲 ARM 處理器的寄存器,源寄存器 和源寄存器 

爲協處理器的寄存器。  

 

  

 

指令示例:  

 

  

 

MRC P33R0C4C56;該指令將協處理器 P3 的寄存器中的數據傳送到 ARM 處理

器寄存器中.  

 

  

 

The ARM920T 有兩個具體協處理器 

 

  

 

CP14 調試通信通道協處理器 

調試通信通道協處理器 DCC(the Debug Communications Channel)提供了兩個 32bits寄存

器用於傳送數據,還提供了 6bits 通信數據控制寄存器控制寄存器中的兩個位提供目標和主

機調試器之間的同步握手。 

 

通信數據控制寄存器 

以下指令在 Rd 中返回控制寄存器的值: 

 

MRC p14, 0, Rd, c0, c0 

 

 此控制寄存器中的兩個位提供目標和主機調試器之間的同步握手: 

 

位 1位)  從目標的角度表示通信數據寫入寄存器是否空閒: 

 

W = 0  目標應用程序可以寫入新數據。 

 

W = 1  主機調試器可以從寫入寄存器中掃描出新數據。 

 

位 0位)  從目標的角度表示通信數據讀取寄存器中是否有新數據: 

 

R = 1  有新數據,目標應用程序可以讀取。 

 

R = 0  主機調試器可以將新數據掃描到讀取寄存器中。 

 

  

 

注意 

 

  調試器不能利用協處理器 14 直接訪問調試通信通道,因爲這對調試器無意義。 但調試

器可使用掃描鏈讀寫 DCC 寄存器。  DCC 數據和控制寄存器可映射到 EmbeddedICE 邏輯

單元中的地址。 若要查看 EmbeddedICE 邏輯寄存器,請參閱您的調試器和調試目標的相

關文檔。 

 

通信數據讀取寄存器  

用於接收來自調試器的數據的 32 位寬寄存器。 以下指令在 Rd 中返 

 

回讀取寄存器的值: 

 

MRC p14, 0, Rd, c1, c0 

 

  

 

通信數據寫入寄存器  

用於向調試器發送數據的 32 位寬寄存器。 以下指令將 Rn 中的值寫 

 

到寫入寄存器中: 

 

MCR p14, 0, Rn, c1, c0 

 

  

 

注意 

 

  有關訪問 ARM10 和 ARM11 內核 DCC 寄存器的信息,請參閱相應的技術參考手冊。 ARM9 之後的各處理器中,所用指令、狀態位位置以及對狀態位的解釋都有所不同。 

 

  

 

目標到調試器的通信 

這是運行於 ARM 內核上的應用程序與運行於主機上的調試器之間的通信事件 

 

順序: 

 

1.  目標應用程序檢查 DCC 寫入寄存器是否空閒可用。爲此,目標應用程序使 

 

用 MRC 指令讀取調試通信通道控制寄存器,以檢查 位是否已清除。 

 

2.  如果 位已清除,則通信數據寫入寄存器已清空,應用程序對協處理器 14  

 

使用 MCR 指令將字寫入通信數據寫入寄存器。 寫入寄存器操作會自動設置  

 

位。如果 位已設置,則表明調試器尚未清空通信數據寫入寄存器。此 

 

時,如果應用程序需要發送另一個字,它必須輪詢 位,直到它已清除。 

 

3.  調試器通過掃描鏈 輪詢通信數據控制寄存器。 如果調試器發現 位已設 

 

置,則它可以讀 DCC 數據寄存器,以讀取應用程序發送的信息。 讀取數據 

 

的進程會自動清除通信數據控制寄存器中的 位。 

 

以下代碼顯示了這一過程 

 

AREA  OutChannel, CODE, READONLY 

 

     ENTRY 

 

     MOV   r1,#3          ; Number of words to send 

 

     ADR   r2, outdata    ; Address of data to send 

 

pollout 

 

     MRC   p14,0,r0,c0,c0 ; Read control register 

 

     TST   r0, #2 

 

     BNE   pollout        ; if W set, register still full  

write 

 

     LDR   r3,[r2],#4     ; Read word from outdata 

 

                          ; into r3 and update the pointer 

 

     MCR   p14,0,r3,c1,c0 ; Write word from r3 

 

     SUBS  r1,r1,#1       ; Update counter 

 

     BNE   pollout        ; Loop if more words to be written 

 

     MOV   r0, #0x18      ; Angel_SWIreason_ReportException 

 

     LDR   r1, =0x20026   ; ADP_Stopped_ApplicationExit 

 

     SVC   0x123456       ; ARM semihosting (formerly SWI) 

 

outdata     

 

     DCB "Hello there!" 

 

     END 

 

調試器到目標的通信 

這是運行於主機上的調試器向運行於內核上的應用程序傳輸消息的事件順序: 

 

1.  調試器輪詢通信數據控制寄存器的 位。 如果 位已清除,則通信數據讀 

 

取寄存器已清空,可將數據寫入此寄存器,以供目標應用程序讀取。 

 

2.  調試器通過掃描鏈 將數據掃描到通信數據讀取寄存器中。此操作會自動 

 

設置通信數據控制寄存器中的 位。 

 

3.  目標應用程序輪詢通信數據控制寄存器中的 位。如果該位已經設置,則 

 

通信數據讀取寄存器中已經有數據,應用程序可使用 MRC 指令從協處理器  

 

14 讀取該數據。 同時,讀取指令還會清除 位。 

 

以下顯示的目標應用程序代碼演示了這一過程 

 AREA  InChannel, CODE, READONLY 

 

     ENTRY 

 

     MOV   r1,#3          ; Number of words to read 

 

     LDR   r2, =indata    ; Address to store data read 

 

pollin 

 

     MRC   p14,0,r0,c0,c0 ; Read control register 

 

     TST   r0, #1 

 

     BEQ   pollin         ; If R bit clear then loop 

 

read 

 

     MRC   p14,0,r3,c1,c0 ; read word into r3 

 

     STR   r3,[r2],#4     ; Store to memory and 

 

                          ; update pointer 

 

     SUBS  r1,r1,#1       ; Update counter 

 

     BNE   pollin         ; Loop if more words to read 

 

     MOV   r0, #0x18      ; Angel_SWIreason_ReportException 

 

     LDR   r1, =0x20026   ; ADP_Stopped_ApplicationExit 

 

     SVC   0x123456       ; ARM semihosting (formerly SWI) 

 

     AREA  Storage, DATA, READWRITE 

 

indata 

 

     DCB   "Duffmessage#" 

 

     END 

 

CP15 系統控制協處理器 

CP15 —系統控制協處理器 (the system control coprocessor)他通過協處理器指令 MCR和 MRC 提供具體的寄存器來配置和控制 cachesMMU、保護系統、配置時鐘模式(在

bootloader時鐘初始化用到)  

 

  

 

CP15 的寄存器只能被 MRC和 MCRMove to Coprocessor from ARM Register )指令訪問 

 

  

 

 

MCR{cond} p15,,,,, 

 

MRC{cond} p15,,,,, 

 

  

 

其中 位用來區分 MCR(L=1)和 MRC(L=0)操作.  CP15 包括 15 個具體的寄存器如下 

 

 

 

 

-R0ID 號寄存器 

 

-R0:緩存類型寄存器 

 

-R1:控制寄存器  

 

-R2:轉換表基址寄存器(Translation Table Base --TTB)  

 

-R3:域訪問控制寄存器(Domain access control ) 

 

-R4:保留  

 

-R5:異常狀態寄存器(fault status -FSR) 

 

-R6:異常地址寄存器(fault address -FAR) 

 

-R7:緩存操作寄存器  

 

-R8TLB 操作寄存器  

 

-R9:緩存鎖定寄存器  

 

-R10TLB 鎖定寄存器   

-R11-12&14:保留 

 

-R13:處理器 ID  

 

-R15:測試配置寄存器 2-24 

 

  

 

要注意有 2個 R0,根據MCR 操作數的不同傳送不同的值,這也一個只讀寄存器 

 

-R0ID 號寄存器 這是一個只讀寄存器,返回一個 32 位的設備 ID 號,具體功能參考 ARM

各個系列型號的的 CP15 Register 0 說明

 

  

 

MRC p15, 0, , c0, c0, {0, 3-7} ;returns ID 

 

  

 

以下爲 ID Code 詳細描敘(ARM926EJ-S); ARM920T Part Number 爲 0x920,Architecture 

(ARMv4T) 爲 0x2 具體可參照 ARM各型號

 

 

 

 

-R0:緩存類型寄存器(CACHE TYPE REGISTER),包含了 caches 的信息。讀這個寄存器

的方式是通過設置協處理操作碼爲 1.  

 

  

 

MRC p15, 0, , c0, c0, 1; returns cache details 

 

  

 

以下爲 CP15的一些應用示例 

 

U32 ARM_CP15_DeviceIDRead(void) 

 

 

  U32 id; 

 

  __asm { MRC P15, 0, id, c0, c0; }  

  return id; 

 

 

  

 

void ARM_CP15_SetPageTableBase(P_U32 TableAddress) 

 

 

   __asm { MCR  P15, 0, TableAddress, c2, c0, 0; } 

 

 

  

 

void ARM_CP15_SetDomainAccessControl(U32 flags) 

 

 

  __asm { MCR  P15, 0, flags, c3, c0, 0; } 

 

 

  

 

void ARM_CP15_ICacheFlush() 

 

 

  unsigned long dummy; 

 

  

 

  __asm { MCR p15, 0, dummy, c7, c5, 0; } 

 

 

  

 

void ARM_CP15_DCacheFlush() 

 

{  

  unsigned long dummy; 

 

  

 

  __asm { MCR p15, 0, dummy, c7, c6, 0; } 

 

 

  

 

void ARM_CP15_CacheFlush() 

 

 

  unsigned long dummy; 

 

  

 

  __asm { MCR p15, 0, dummy, c7, c7, 0; } 

 

 

  

 

void ARM_CP15_TLBFlush(void) 

 

 

  unsigned long dummy; 

 

  

 

  __asm { MCR  P15, 0, dummy, c8, c7, 0; } 

 

 

  

 

void ARM_CP15_ControlRegisterWrite(U32 flags) 

 

 

  __asm { MCR P15, 0, flags, c1, c0; }  

 

  

 

void ARM_CP15_ControlRegisterOR(U32 flag) 

 

 

  

 

__asm { 

 

    mrc p15,0,r0,c1,c0,0 

 

    mov r2,flag 

 

    orr r0,r2,r0 

 

    mcr p15,0,r0,c1,c0,0 

 

 

  

 

 

  

 

void ARM_CP15_ControlRegisterAND(U32 flag) 

 

 

  

 

__asm { 

 

    mrc p15,0,r0,c1,c0,0 

 

    mov r2,flag 

 

    and r0,r2,r0 

 

    mcr p15,0,r0,c1,c0,0  

 

  

 

 

  

 

void ARM_MMU_Init(P_U32 TableAddress) 

 

 

       ARM_CP15_TLBFlush(); 

 

    ARM_CP15_CacheFlush(); 

 

    ARM_CP15_SetDomainAccessControl(0xFFFFFFFF); 

 

    ARM_CP15_SetPageTableBase(TableAddress); 

 

 

void Enable_MMU (void) 

 

 

__asm { 

 

    mrc p15,0,r0,c1,c0,0 

 

    mov r2, #0x00000001 

 

    orr r0,r2,r0 

 

    mcr p15,0,r0,c1,c0,0 

 

    } 

 

printf("MMU enabled\n"); 

 

 

   

void Disable_MMU (void) 

 

 

__asm { 

 

    mrc p15,0,r0,c1,c0,0 

 

    mov r2, #0xFFFFFFFE 

 

    and r0,r2,r0 

 

    mcr p15,0,r0,c1,c0,0 

 

    } 

 

printf("MMU disabled\n"); 

 

 

 

 

本文來自 CSDN 博客,轉載請標明出處:file:///F:/data/arm/arm 協處理器

cp14 cp15 - kuteng8801的專欄 - CSDN 博客.mht 


訪問CP15寄存器的指令

 

訪問CP15寄存器指令的編碼格式及語法說明如下:

31  28

27  24

23  21

20

19  16

15  12

11  8

7  5

4

3  0

cond

1 1 1 0

opcode_1

L

cr n

rd

1 1 1 1

opcode_2

1

crm

說明:

:協處理器行爲操作碼,對於CP15來說,永遠爲0b000,否則結果未知。

:不能是r15/pc,否則,結果未知。

:作爲目標寄存器的協處理器寄存器,編號爲C0~C15

:附加的目標寄存器或源操作數寄存器,如果不需要設置附加信息,將crm設置爲c0,否則結果未知。

:提供附加信息比如寄存器的版本號或者訪問類型,用於區分同一個編號的不同物理寄存器,可以省略或者將其設置爲0,否則結果未知。

指    令

說    明

語法格式

mcr

ARM處理器的寄存器中的數據寫到CP15中的寄存器中

mcr{}   p15, , , , , {}

mrc

CP15中的寄存器中的數據讀到ARM處理器的寄存器中

mcr{}   p15, , , , , {}

4.1.2  CP15寄存器介紹 

CP15的寄存器列表如表4-1所示。

4-1  ARM處理器中CP15協處理器的寄存器

寄存器編號

基本作用

MMU中的作用

PU中的作用

0

ID編碼(只讀)

ID編碼和cache類型

 

1

控制位(可讀寫)

各種控制位

 

2

存儲保護和控制

地址轉換表基地址

Cachability的控制位

3

存儲保護和控制

域訪問控制位

Bufferablity控制位

4

存儲保護和控制

保留

保留

5

存儲保護和控制

內存失效狀態

訪問權限控制位

6

存儲保護和控制

內存失效地址

保護區域控制

7

高速緩存和寫緩存

高速緩存和寫緩存控制

 

8

存儲保護和控制

TLB控制

保留

9

高速緩存和寫緩存

高速緩存鎖定

 

10

存儲保護和控制

TLB鎖定

保留

11

保留

 

 

12

保留

 

 

13

進程標識符

進程標識符

 

14

保留

 

 

15

因不同設計而異

因不同設計而異

因不同設計而異

CP15的寄存器C0

CP15中寄存器C0對應兩個標識符寄存器,由訪問CP15中的寄存器指令中的指定要訪問哪個具體物理寄存器,與兩個標識符寄存器的對應關係如下所示:

 

opcode_2編碼

對應的標識符號寄存器

0b000

主標識符寄存器

0b001

cache類型標識符寄存器

其他

保留

1)主標識符寄存器

訪問主標識符寄存器的指令格式如下所示:

mrc p15, 0, r0, c0, c0, 0       ;將主標識符寄存器C0,0的值讀到r0

ARM不同版本體系處理器中主標識符寄存器的編碼格式說明如下。

ARM7之後處理器的主標識符寄存器編碼格式如下所示:

31             24      23            20      19              16    15              4     3               0

由生產商確定

產品子編號

ARM體系版本號

產品主編號

處理器版本號

 

說    明

[3: 0]

生產商定義的處理器版本號

[15: 4]

生產商定義的產品主編號,其中最高4位即位[15:12]可能的取值爲0~7但不能是07

[19: 16]

ARM體系的版本號,可能的取值如下:

0x1   ARM體系版本4

0x2   ARM體系版本4T

0x3   ARM體系版本5

0x4   ARM體系版本5T

0x5   ARM體系版本5TE

其他  由ARM公司保留將來使用

[23: 20]

生產商定義的產品子編號,當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不同的高速緩存的大小等

[31: 24]

生產廠商的編號,現在已經定義的有以下值:

0x41  =A  ARM公司

0x44  =D  Digital Equipment公司

0x69  =I   intel公司

ARM7處理器的主標識符寄存器編碼格式如下所示:

31             24     23     22                        16           15          4         3          0

由生產商確定

A

產品子編號

產品主編號

處理器版本號

 

說    明

[3: 0]

生產商定義的處理器版本號

[15: 4]

生產商定義的產品主編號,其中最高4位即位[15:12]的值爲0x7

[22: 16]

生產商定義的產品子編號,當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不同的高速緩存的大小等

續表 

說    明

[23]

ARM7支持下面兩種ARM體系的版本號:

0x0   ARM體系版本3

0x1   ARM體系版本4T

[31: 24]

生產廠商的編號,現在已經定義的有以下值:

0x41  =A  ARM公司

0x44  =D  Digital Equipment公司

0x69  =I   Intel公司

ARM7之前處理器的主標識符寄存器編碼格式如下所示:

31           24       23       22                    16            15          4         3           0

由生產商確定

A

產品子編號

產品主編號

處理器版本號

 

說    明

[3: 0]

生產商定義的處理器版本號

[15: 4]

生產商定義的產品主編號,其中最高4位即爲[15:12]的值爲0x7

[22: 16]

生產商定義的產品子編號,當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不同的高速緩存的大小等

[23]

ARM7支持下面兩種ARM體系的版本號:

0x0   ARM體系版本3

0x1   ARM體系版本4T

[31: 24]

生產廠商的編號,現在已經定義的有以下值:

0x41  =A  ARM公司

0x44  =D  Digital Equipment公司

0x69  =I   intel公司

2cache類型標識符寄存器

訪問cache類型標識符寄存器的指令格式如下所示:

mrc p15, 0, r0, c0, c0, 1       ;將cache類型標識符寄存器C0,1的值讀到r0

ARM處理器中cache類型標識符寄存器的編碼格式如下所示:

31             29     28           25    24       23             12               11            0

0   0   0

屬性字段

S

數據cache相關屬性

指令cache相關屬性

 

說明

[28: 25]

指定控制字段位[24: 0]指定的屬性之外的cache的其他屬性,詳見表4-2

[24]

定義系統中的數據cache和指令cache是分開的還是統一的:

0   系統的數據cache和指令cache是統一的;

1   系統的數據cache和指令cache是分開的

[23: 12]

定義數據cache的相關屬性,如果位[24]0,本字段定義整個cache的屬性

[31: 24]

定義指令cache的相關屬性,如果位[24]0,本字段定義整個cache的屬性

其中控制字段位[2825]的含義說明如下:

4-2  cache類型標識符寄存器的控制字段位[2825]

編    碼

cache類型

cache內容清除方法

cache內容鎖定方法

0b0000

寫通類型

不需要內容清除

不支持內容鎖定

0b0001

寫回類型

數據塊讀取

不支持內容鎖定

0b0010

寫回類型

由寄存器C7定義

不支持內容鎖定

0b0110

寫回類型

由寄存器C7定義

支持格式A

0b0111

寫回類型

由寄存器C7定義

支持格式B

控制字段位[2312]和控制字段位[110]的編碼格式相同,含義如下所示:

11      9         8             6         5          3                2            1               0

0    0    0

cache容量

cache相聯特性

M

塊大小

cache容量字段bits[8: 6]的含義如下所示:

編    碼

M=0時含義(單位KB

M=1時含義(單位KB

0b000

0.5

0.75

0b001

1

1.5

0b010

2

3

0b011

4

6

0b100

8

12

0b101

16

24

0b110

32

48

0b111

64

96

cache相聯特性字段bits[5: 3]的含義如下所示:

編    碼

M=0時含義

M=1時含義

0b000

1路相聯(直接映射)

沒有cache

0b001

2路相聯

3路相聯

0b010

4路相聯

6路相聯

0b011

8路相聯

12路相聯

0b100

16路相聯

24路相聯

0b101

32路相聯

48路相聯

0b110

64路相聯

96路相聯

0b111

128路相聯

192路相聯

cache塊大小字段bits[1: 0]的含義如下所示:

編    碼

cache塊大小

0b00

2個字(8字節)

0b01

4個字(16字節)

0b10

8個字(32字節)

0b11

16個字(64字節)

CP15的寄存器C1

訪問主標識符寄存器的指令格式如下所示:

mrc p15, 0, r0, c1, c0{, 0}     ;將CP15的寄存器C1的值讀到r0

mcr p15, 0, r0, c1, c0{, 0}     ;將r0的值寫到CP15的寄存器C1

CP15中的寄存器C1的編碼格式及含義說明如下:

31 16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

附加

L4

RR

V

I

Z

F

R

S

B

L

D

P

W

C

A

M

 

說    明

M

0:禁止MMU或者PU1:使能MMU或者PU

A

0:禁止地址對齊檢查;1:使能地址對齊檢查

C

0:禁止數據/整個cache1:使能數據/整個cache

W

0:禁止寫緩衝;1:使能寫緩衝

P

0:異常中斷處理程序進入32位地址模式;1:異常中斷處理程序進入26位地址模式

D

0:禁止26位地址異常檢查;1:使能26位地址異常檢查

L

0:選擇早期中止模型;1:選擇後期中止模型

B

0little endian1big endian

S

在基於MMU的存儲系統中,本位用作系統保護

R

在基於MMU的存儲系統中,本位用作ROM保護

F

0:由生產商定義

Z

0:禁止跳轉預測功能;1:使能跳轉預測指令

I

0:禁止指令cache1:使能指令cache

V

0:選擇低端異常中斷向量0x0~0x1c1:選擇高端異常中斷向量0xffff0000~ 0xffff001c

RR

0:常規的cache淘汰算法,如隨機淘汰;1:預測性淘汰算法,如round-robin淘汰算法

L4

0:保持ARMv5以上版本的正常功能;1:將ARMv5以上版本與以前版本處理器兼容,不根據跳轉地址的bit[0]進行ARM指令和Thumb狀態切換:bit[0]等於0表示ARM指令,等於1表示Thumb指令

附加:

 

CP15的寄存器C2

CP15中的寄存器C2保存的是頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:

31                                                                                                     0

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

CP15的寄存器C3

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

31                                                                                                     0

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

CP15的寄存器C5

CP15中的寄存器C5是失效狀態寄存器,編碼格式如下所示:

31                                                           9        8    7       4     3        0

UNP/SBZP

0

域標識

狀態標識

其中,域標識bit[74]表示存放引起存儲訪問失效的存儲訪問所屬的域。

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

4-3  狀態標識字段含義

引起訪問失效的原因

狀態標識

域標識

C6

終端異常(Terminal Exception

0b0010

無效

生產商定義

中斷向量訪問異常(Vector Exception

0b0000

無效

有效

地址對齊

0b00x1

無效

有效

一級頁表訪問失效

0b1100

無效

有效

二級頁表訪問失效

0b1110

有效

有效

基於段的地址變換失效

0b0101

無效

有效

基於頁的地址變換失效

0b0111

有效

有效

基於段的存儲訪問中域控制失效

0b1001

有效

有效

基於頁的存儲訪問中域控制失效

0b1101

有效

有效

基於段的存儲訪問中訪問權限控制失效

0b1111

有效

有效

基於頁的存儲訪問中訪問權限控制失效

0b0100

有效

有效

基於段的cache預取時外部存儲系統失效

0b0110

有效

有效

基於頁的cache預取時外部存儲系統失效

0b1000

有效

有效

基於段的非cache預取時外部存儲系統失效

0b1010

有效

有效

CP15中的寄存器C6

CP15中的寄存器C5是失效地址寄存器,編碼格式如下所示:

31                                                                                                     0

失效地址(虛擬地址)

CP15中的寄存器C7

CP15C7寄存器用來控制cache和寫緩存,它是一個只寫寄存器,讀操作將產生不可預知的後果。

訪問CP15C7寄存器的指令格式如下所示:

mcr p15, 0, , , crm,  的不同取值組合    實現不同功能

CP15中的寄存器C8

CP15C8寄存器用來控制清除TLB的內容,是隻寫寄存器,讀操作將產生不可預知的後果。

訪問CP15C8寄存器的指令格式如下所示:

mcr p15, 0, , , crm,  的不同取值組合實現不同功能,見第4.2

CP15中的寄存器C9

CP15C9寄存器用於控制cache內容鎖定。

訪問CP15C9寄存器的指令格式如下所示:

mcr p15, 0, , , c0, 

mrc p15, 0, , , c0, 

如果系統中包含獨立的指令cache和數據cache,那麼對應於數據cache和指令cache分別有一個獨立的cache內容鎖定寄存器,用來選擇其中的某個寄存器:

=1選擇指令cache的內容鎖定寄存器;

=0選擇數據cache的內容鎖定寄存器。

CP15C9寄存器有AB兩種編碼格式。編碼格式A如下所示:

31                                       32-W 31-W                                         0

cache組內塊序號index

0

其中index表示當下一次發生cache未命中時,將預取的存儲塊存入cache中該塊對應的組中序號爲indexcache塊中。此時序號爲0~index-1cache塊被鎖定,當發生cache替換時,從序號爲indexASSOCIATIVITY的塊中選擇被替換的塊。

編碼格式B如下所示:

31    30                                          W      W-1                                     0

L

0

cache組內塊序號index

 

 

說    明

L=0

當發生cache未命中時,將預取的存儲塊存入cache中該塊對應的組中序號爲indexcache塊中

續表 

說    明

L=1

如果本次寫操作之前L=0,並且index值小於本次寫入的index,本次寫操作執行的結果不可預知;否則,這時被鎖定的cache塊包括序號爲0~index-1的塊,當發生cache替換時,從序號爲indexASSOCIATIVITY的塊中選擇被替換的塊

CP15的寄存器C10

CP15C10寄存器用於控制TLB內容鎖定。

訪問CP15C10寄存器的指令格式如下所示:

mcr p15, 0, , , c0, 

mrc p15, 0, , , c0, 

如果系統中包含獨立的指令TLB和數據TLB,那麼對應於數據TLB和指令TLB分別有一個獨立的TLB內容鎖定寄存器,用來選擇其中的某個寄存器:

=1選擇指令TLB的內容鎖定寄存器;

=0選擇數據TLB的內容鎖定寄存器。

C10寄存器的編碼格式如下:

31 30                         32-W       31-W                            32-2W    31-2W     1    0

可被替換的條目起始地址的base

下一個將被替換的條目地址victim

0

P

 

說    明

victim

指定下一次TLB沒有命中(所需的地址變換條目沒有包含在TLB中)時,從內存頁表中讀取所需的地址變換條目,並把該地址變換條目保存在TLB中地址victim

base

指定TLB替換時,所使用的地址範圍,從(base)到(TLB中條目數-1);字段victim的值應該包含在該範圍內

P

1:寫入TLB的地址變換條目不會受使整個TLB無效操作的影響,一直保持有效;0:寫入TLB的地址變換條目將會受到使整個TLB無效操作的影響

CP15的寄存器C13

C13寄存器用於快速上下文切換FCSE

訪問CP15C13寄存器的指令格式如下所示:

mcr p15, 0, , , c0, 0

mrc p15, 0, , , c0, 0

C13寄存器的編碼格式如下所示:

31                25       24                                                                     0

PID

0

其中,PID表示當前進程的所在的進程空間塊的編號,即當前進程的進程標識符,取值爲0~127

0MVA(變換後的虛擬地址)= VA(虛擬地址),禁止FCSE(快速上下文切換技術),系統復位後PID=0

0:使能FCSE

發佈了35 篇原創文章 · 獲贊 26 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章