關於MMU編程,有幾個是要經常查閱的資料。這裡我把它整理成一篇文檔,因此篇幅太長,節選發上來,全部內容放在附件的PDF當中。 這個文檔主要有三個內容 一.協議處器CP15 中寄存器的全部說明. 二.ARM 協處理指示 三.CP15命令列表一.協議處器CP15 中寄存器說明---------------------------------------------------------------------------
引自 http://blog.csdn.net/genglei1022/archive/2010/07/05/5712843.aspx
寄存器編號 |
基本作用 |
在 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 |
因 不同設計而異 |
因 不同設計而異 |
因 不同設計而異 |
二. ARM副處理器指令
----------------------------------------------------------------------------
引自http://blog.csdn.net/aaaaatiger/archive/2007/09/02/1769470.aspx
ARM 微處理器可支援多達 16 個副處理器,用於各種協處理操作,在程式執行的過程中,每個副處理器只執行針對自身的協處理指示,忽略 ARM 處理器和其他副處理器的指令。
ARM 的副處理器指令主要用於 ARM 處理器初始化 ARM 副處理器的資料處理操作,以及在ARM 處理器的寄存器和副處理器的寄存器之間傳送資料,和在 ARM 副處理器的寄存器和儲存空間之間傳送資料。 ARM 副處理器指令包括以下 5 條:
- — CDP 副處理器數操作指令
- — LDC 副處理器資料載入指令
- — STC 副處理器資料存放區指令
- — MCR ARM 處理器寄存器到副處理器寄存器的資料傳送指令
- — MRC 副處理器寄存器到ARM 處理器寄存器的資料傳送指令
-
1、CDP 指令
CDP 指令的格式為:
CDP{條件} 副處理器編碼,副處理器作業碼1,目的寄存器,源寄存器1,源寄存器2,協處理
器作業碼2。
CDP 指令用於ARM 處理器通知ARM 副處理器執行特定的操作,若副處理器不能成功完成特定的操作,則產生未定義指令異常。其中副處理器作業碼1 和副處理器作業碼2 為副處理器將要執行的操作,目的寄存器和源寄存器均為副處理器的寄存器,指令不涉及ARM 處理器的寄存器和儲存空間。
指令樣本:
CDP P3 , 2 , C12 , C10 , C3 , 4 ;該指令完成副處理器 P3 的初始化
2、LDC 指令
LDC 指令的格式為:
LDC{條件}{L} 副處理器編碼,目的寄存器,[源寄存器]
LDC 指令用於將源寄存器所指向的儲存空間中的字資料傳送到目的寄存器中,若副處理器不能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令為長讀取操作,如用於雙精確度資料的傳輸。
指令樣本:
LDC P3 , C4 , [R0] ;將 ARM 處理器的寄存器 R0 所指向的儲存空間中的字資料傳送到副處理器P3 的寄存器 C4 中。
3、STC 指令
STC 指令的格式為:
STC{條件}{L} 副處理器編碼,源寄存器,[目的寄存器]
STC 指令用於將源寄存器中的字資料傳送到目的寄存器所指向的儲存空間中,若副處理器不能成功完成傳送操作,則產生未定義指令異常。其中,{L}選項表示指令為長讀取操作,如用於雙精確度資料的傳輸。
指令樣本:
STC P3 , C4 , [R0] ;將副處理器 P3 的寄存器 C4 中的字資料傳送到 ARM 處理器的寄存器R0所指向的儲存空間中。
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 中。
5、MRC 指令
MRC 指令的格式為:
MRC{條件} 副處理器編碼,副處理器作業碼1,目的寄存器,源寄存器1,源寄存器2,協處理
器作業碼2。
MRC 指令用於將副處理器寄存器中的資料傳送到ARM 處理器寄存器中,若副處理器不能成功完成操作,則產生未定義指令異常。其中副處理器作業碼1 和副處理器作業碼2 為副處理器將要執行的操作,目的寄存器為ARM 處理器的寄存器,源寄存器1 和源寄存器2 均為副處理器的寄存器。
指令樣本:
MRC P3 , 3 , R0 , C4 , C5 , 6 ;該指令將副處理器 P3 的寄存器中的資料傳送到 ARM 處理器寄存器中.
二. 副處理器指令命令列表
-------------------------------------------------------------
引自 http://www.iphonedevwiki.net/index.php/Coprocessors
Register allocation for Opcode 0
cN |
cM |
opcode2 |
Register |
Readable (mrc) |
Writable (mcr) |
Comments |
c0 |
c0 |
0 |
Main ID |
Privileged |
No |
Contains vendor, architecture, part number, etc.[2] |
c0 |
c0 |
1 |
Cache type |
Privileged |
No |
Size and architecture of cache.[3] |
c0 |
c0 |
2 |
Tightly coupled memory (TCM) status |
Privileged |
No |
|
c0 |
c0 |
3 |
Translation look-aside buffer (TLB) type |
Privileged |
No |
|
c0 |
c0 |
5 |
Multiprocessor ID |
Privileged |
No |
(Cortex only.) |