ARM硬件完美解讀——協處理器

1、協處理器是哪位大神

協處理器(coprocessor),一種芯片,用於減輕系統微處理器的特定處理任務。例如,數學協處理器可以控制數字處理;圖形協處理器可以處理視頻繪製。例如,intel pentium 微處理器就包括內置的數學協處理器。協處理器可以附屬於ARM處理器。一個協處理器通過擴展指令集或提供配置寄存器來擴展內核處理功能。一個或多個協處理器可以通過協處理器接口與ARM內核相連。協處理器可以通過一組專門的、提供load-store類型接口的ARM指令來訪問。例如協處理器15(CP15),ARM處理器使用協處理器15的寄存器來控制cache、TCM、存儲器管理(MMU)等。

 

2、我的電腦有黃老“協”嗎

80486CPU之前有協處理器,提高浮點運算能力,那時cpu較弱纔有的協處理器,現在速度是原來數百倍不止,pc機一般不存在協處理器了。居然有這麼回事,算是領教了,我們一直都以是黃老邪是傳說中滴東邪,還不知道有協處理器這麼一說。

 

3、武器(ARM)纔是硬道理

ARM 微處理器可支持多達 16 個協處理器,用於各種協處理操作,在程序執行的過程中,每個協處理器只執行鍼對自身的協處理指令,忽略 ARM 處理器和其他協處理器的指令。ARM 的協處理器指令主要用於 ARM 處理器初始化 ARM 協處理器的數據處理操作,以及在ARM 處理器的寄存器和協處理器的寄存器之間傳送數據,和在 ARM 協處理器的寄存器和存儲器之間傳送數據。

 

4、如何借“老協”之力平定中原

在ARM指令中,訪問協處理器的指令主要以下幾條:

CDP 協處理器數操作指令
LDC 協處理器數據加載指令
STC 協處理器數據存儲指令
MCR ARM 處理器寄存器到協處理器寄存器的數據傳送指令
MRC 協處理器寄存器到ARM 處理器寄存器的數據傳送指令

 

4.1、CDP 指令

CDP 指令的格式爲:
CDP{條件} 協處理器編碼,協處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協處理 器操作碼2。
CDP 指令用於ARM 處理器通知ARM 協處理器執行特定的操作,若協處理器不能成功完成特定的操作,則產生未定義指令異常。其中協處理器操作碼1 和協處理器操作碼2 爲協處理器將要執行的操作,目的寄存器和源寄存器均爲協處理器的寄存器,指令不涉及ARM 處理器的寄存器和存儲器。
指令示例:
CDP P3 , 2 , C12 , C10 , C3 , 4 ;該指令完成協處理器 P3 的初始化

 

4.2、LDC 指令

LDC 指令的格式爲:
LDC{條件}{L} 協處理器編碼,目的寄存器,[源寄存器]
LDC 指令用於將源寄存器所指向的存儲器中的字數據傳送到目的寄存器中,若協處理器不能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令爲長讀取操作,如用於雙精度數據的傳輸。
指令示例:
LDC P3 , C4 , [R0] ;將 ARM 處理器的寄存器 R0 所指向的存儲器中的字數據傳送到協處理器 P3 的寄存器 C4 中。

 

4.3、STC 指令

STC 指令的格式爲:
STC{條件}{L} 協處理器編碼,源寄存器,[目的寄存器]
STC 指令用於將源寄存器中的字數據傳送到目的寄存器所指向的存儲器中,若協處理器不能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令爲長讀取操作,如用於雙精度數據的傳輸。
指令示例:
STC P3 , C4 , [R0] ;將協處理器 P3 的寄存器 C4 中的字數據傳送到 ARM 處理器的寄存器R0 所指向的存儲器中。

 

4.4、MCR 指令

MCR 指令的格式爲:
MCR{條件} 協處理器編碼,協處理器操作碼1,源寄存器,目的寄存器1,目的寄存器2,協處理器操作碼2。
MCR 指令用於將ARM 處理器寄存器中的數據傳送到協處理器寄存器中,若協處理器不能成功完成操作,則產生未定義指令異常。其中協處理器操作碼1 和協處理器操作碼2 爲協處理器將要執行的操作,源寄存器爲ARM 處理器的寄存器,目的寄存器1 和目的寄存器2 均爲協處理器的寄存器。
指令示例:
MCR P3 , 3 , R0 , C4 , C5 , 6 ;該指令將 ARM 處理器寄存器 R0 中的數據傳送到協處理器 P3 的寄存器 C4 和 C5 中。

 

4.5、MRC 指令

MRC 指令的格式爲:
MRC{條件} 協處理器編碼,協處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協處理器操作碼2。
MRC 指令用於將協處理器寄存器中的數據傳送到ARM 處理器寄存器中,若協處理器不能成功完成操作,則產生未定義指令異常。其中協處理器操作碼1 和協處理器操作碼2 爲協處理器將要執行的操作,目的寄存器爲ARM 處理器的寄存器,源寄存器1 和源寄存器2 均爲協處理器的寄存器。
指令示例:
MRC P3 , 3 , R0 , C4 , C5 , 6 ;該指令將協處理器 P3 的寄存器中的數據傳送到 ARM 處理器寄存器中.

 

5、老邪家的十五阿哥CP15

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

只能在特權模式下使用MRC和MCR(Move to Coprocessor from ARM Register )指令訪問CP15的寄存器。因此,在系統上電啓動過程時,會切換進入SVC模式,可參見《U-Boot完美解讀(2)——啓動文件start.s解析》。
包括15個具體的寄存器如下:
-R0:ID號寄存器 這是一個只讀寄存器,返回一個32位的設備ID號,32具體功能參考2410 datesheet的 table 2-5
-R0:緩存類型寄存器(CACHE TYPE REGISTER) ,注意有2個R0,根據MCR操作數的不同傳送不同的值,這也一個只讀寄存器,包含了caches的信息。讀這個寄存器的方式是通過設置協處理操作碼爲1.
如:
MRC p15,0,Rd,c0,c0,1; 返回caches的詳細信息,詳見:table 2-6
-R1:控制寄存器 2-10
-R2:轉換表基址寄存器(Translation Table Base --TTB) 2-12
-R3:域訪問控制寄存器(Domain access control )2-13
-R4:保留 2-14
-R5:異常狀態寄存器(fault status -FSR)2-14
-R6:異常地址寄存器(fault address -FAR)2-15
-R7:緩存操作寄存器 2-15
-R8:TLB操作寄存器 2-18
-R9:緩存鎖定寄存器 2-19
-R10:TLB 鎖定寄存器 2-21
-R11-12&14:保留
-R13:處理器ID 2-22
-R15:測試配置寄存器 2-24

 

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