ARM11 (S3C6410) CP15寄存器
關(guān)于MMU編程,有幾個(gè)是要經(jīng)常查閱的資料。這里我把它整理成一篇文檔,因此篇幅太長,節(jié)選發(fā)上來,全部內(nèi)容放在附件的PDF當(dāng)中。
這個(gè)文檔主要有三個(gè)內(nèi)容
一.協(xié)議處器CP15 中寄存器的全部說明.
二.ARM 協(xié)處理指令
三.CP15命令列表
一.協(xié)議處器CP15 中寄存器說明
---------------------------------------------------------------------------
引自 http://blog.csdn.net/genglei1022/archive/2010/07/05/5712843.aspx
寄存器編號基本作用在 MMU 中的作用在 PU 中的作用
0ID 編碼(只讀)ID 編碼和 cache 類型
1控 制位(可讀寫)各 種控制位
2存 儲保護(hù)和控制地 址轉(zhuǎn)換表基地址Cachability 的控制位
3存 儲保護(hù)和控制域 訪問控制位Bufferablity 控制位
4存 儲保護(hù)和控制保 留保 留
5存 儲保護(hù)和控制內(nèi) 存失效狀態(tài)訪 問權(quán)限控制位
6存 儲保護(hù)和控制內(nèi) 存失效地址保 護(hù)區(qū)域控制
7高 速緩存和寫緩存高 速緩存和寫緩存控制
8存 儲保護(hù)和控制TLB 控制保 留
9高 速緩存和寫緩存高 速緩存鎖定
10存 儲保護(hù)和控制TLB 鎖定保 留
11保 留
12保 留
13進(jìn) 程標(biāo)識符進(jìn) 程標(biāo)識符
14保 留
15因 不同設(shè)計(jì)而異因 不同設(shè)計(jì)而異因 不同設(shè)計(jì)而異
二. ARM協(xié)處理器指令
----------------------------------------------------------------------------
引自http://blog.csdn.net/aaaaatiger/archive/2007/09/02/1769470.aspx
ARM 微處理器可支持多達(dá) 16 個(gè)協(xié)處理器,用于各種協(xié)處理操作,在程序執(zhí)行的過程中,每個(gè)協(xié)處理器只執(zhí)行針對自身的協(xié)處理指令,忽略 ARM 處理器和其他協(xié)處理器的指令。
ARM 的協(xié)處理器指令主要用于 ARM 處理器初始化 ARM 協(xié)處理器的數(shù)據(jù)處理操作,以及在ARM 處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù),和在 ARM 協(xié)處理器的寄存器和存儲器之間傳送數(shù)據(jù)。 ARM 協(xié)處理器指令包括以下 5 條:
— CDP 協(xié)處理器數(shù)操作指令
— LDC 協(xié)處理器數(shù)據(jù)加載指令
— STC 協(xié)處理器數(shù)據(jù)存儲指令
— MCR ARM 處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令
— MRC 協(xié)處理器寄存器到ARM 處理器寄存器的數(shù)據(jù)傳送指令
1、CDP 指令
CDP 指令的格式為:
CDP{條件} 協(xié)處理器編碼,協(xié)處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協(xié)處理
器操作碼2。
CDP 指令用于ARM 處理器通知ARM 協(xié)處理器執(zhí)行特定的操作,若協(xié)處理器不能成功完成特定的操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1 和協(xié)處理器操作碼2 為協(xié)處理器將要執(zhí)行的操作,目的寄存器和源寄存器均為協(xié)處理器的寄存器,指令不涉及ARM 處理器的寄存器和存儲器。
指令示例:
CDP P3 , 2 , C12 , C10 , C3 , 4 ;該指令完成協(xié)處理器 P3 的初始化
2、LDC 指令
LDC 指令的格式為:
LDC{條件}{L} 協(xié)處理器編碼,目的寄存器,[源寄存器]
LDC 指令用于將源寄存器所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項(xiàng)表示指令為長讀取操作,如用于雙精度數(shù)據(jù)的傳輸。
指令示例:
LDC P3 , C4 , [R0] ;將 ARM 處理器的寄存器 R0 所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到協(xié)處理器P3 的寄存器 C4 中。
3、STC 指令
STC 指令的格式為:
STC{條件}{L} 協(xié)處理器編碼,源寄存器,[目的寄存器]
STC 指令用于將源寄存器中的字?jǐn)?shù)據(jù)傳送到目的寄存器所指向的存儲器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項(xiàng)表示指令為長讀取操作,如用于雙精度數(shù)據(jù)的傳輸。
指令示例:
STC P3 , C4 , [R0] ;將協(xié)處理器 P3 的寄存器 C4 中的字?jǐn)?shù)據(jù)傳送到 ARM 處理器的寄存器R0所指向的存儲器中。
4、MCR 指令
MCR 指令的格式為:
MCR{條件} 協(xié)處理器編碼,協(xié)處理器操作碼1,源寄存器,目的寄存器1,目的寄存器2,協(xié)處
理器操作碼2。
MCR 指令用于將ARM 處理器寄存器中的數(shù)據(jù)傳送到協(xié)處理器寄存器中,若協(xié)處理器不能成功完成操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1 和協(xié)處理器操作碼2 為協(xié)處理器將要執(zhí)行的操作,源寄存器為ARM 處理器的寄存器,目的寄存器1 和目的寄存器2 均為協(xié)處理器的寄存器。
指令示例:
MCR P3 , 3 , R0 , C4 , C5 , 6 ;該指令將 ARM 處理器寄存器 R0 中的數(shù)據(jù)傳送到協(xié)處理器 P3 的寄存器 C4 和 C5 中。
5、MRC 指令
MRC 指令的格式為:
MRC{條件} 協(xié)處理器編碼,協(xié)處理器操作碼1,目的寄存器,源寄存器1,源寄存器2,協(xié)處理
器操作碼2。
MRC 指令用于將協(xié)處理器寄存器中的數(shù)據(jù)傳送到ARM 處理器寄存器中,若協(xié)處理器不能成功完成操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1 和協(xié)處理器操作碼2 為協(xié)處理器將要執(zhí)行的操作,目的寄存器為ARM 處理器的寄存器,源寄存器1 和源寄存器2 均為協(xié)處理器的寄存器。
指令示例:
MRC P3 , 3 , R0 , C4 , C5 , 6 ;該指令將協(xié)處理器 P3 的寄存器中的數(shù)據(jù)傳送到 ARM 處理器寄存器中.
二. 協(xié)處理器指令命令列表
-------------------------------------------------------------
引自 http://www.iphonedevwiki.net/index.php/Coprocessors
Register allocation for Opcode 0
cN cM opcode2 Register Readable (mrc) Writable (mcr) Comments
c0c00Main IDPrivilegedNoContains vendor, architecture, part number, etc.[2]
c0c01Cache typePrivilegedNoSize and architecture of cache.[3]
c0c02Tightly coupled memory (TCM) statusPrivilegedNo
c0c03Translation look-aside buffer (TLB) typePrivilegedNo
c0c05Multiprocessor IDPrivilegedNo(Cortex only.)