ARM11 (S3C6410) CP15寄存器
關(guān)于MMU編程,有幾個是要經(jīng)常查閱的資料。這里我把它整理成一篇文檔,因此篇幅太長,節(jié)選發(fā)上來,全部內(nèi)容放在附件的PDF當(dāng)中。
??這個文檔主要有三個內(nèi)容
?? 一.協(xié)議處器CP15 中寄存器的全部說明.
?? 二.ARM 協(xié)處理指令
?? 三.CP15命令列表
一.協(xié)議處器CP15 中寄存器說明
---------------------------------------------------------------------------
寄存器編號
基本作用
在?MMU?中的作用
在?PU?中的作用
0
ID?編碼(只讀)
ID?編碼和?cache?類型
?
1
控 制位(可讀寫)
各 種控制位
?
2
存 儲保護和控制
地 址轉(zhuǎn)換表基地址
Cachability?的控制位
3
存 儲保護和控制
域 訪問控制位
Bufferablity?控制位
4
存 儲保護和控制
保 留
保 留
5
存 儲保護和控制
內(nèi) 存失效狀態(tài)
訪 問權(quán)限控制位
6
存 儲保護和控制
內(nèi) 存失效地址
保 護區(qū)域控制
7
高 速緩存和寫緩存
高 速緩存和寫緩存控制
?
8
存 儲保護和控制
TLB?控制
保 留
9
高 速緩存和寫緩存
高 速緩存鎖定
?
10
存 儲保護和控制
TLB?鎖定
保 留
11
保 留
?
?
12
保 留
?
?
13
進 程標識符
進 程標識符
?
14
保 留
?
?
15
因 不同設(shè)計而異
因 不同設(shè)計而異
因 不同設(shè)計而異
二. ARM協(xié)處理器指令
----------------------------------------------------------------------------
ARM?微處理器可支持多達?16?個協(xié)處理器,用于各種協(xié)處理操作,在程序執(zhí)行的過程中,每個協(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?指令用于將源寄存器所指向的存儲器中的字數(shù)據(jù)傳送到目的寄存器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項表示指令為長讀取操作,如用于雙精度數(shù)據(jù)的傳輸。
指令示例:
LDC P3?,?C4?,?[R0]?;將?ARM?處理器的寄存器?R0?所指向的存儲器中的字數(shù)據(jù)傳送到協(xié)處理器P3?的寄存器?C4?中。
3、STC?指令
STC?指令的格式為:
STC{條件}{L}?協(xié)處理器編碼,源寄存器,[目的寄存器]
STC?指令用于將源寄存器中的字數(shù)據(jù)傳送到目的寄存器所指向的存儲器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)生未定義指令異常。其中,{L}選項表示指令為長讀取操作,如用于雙精度數(shù)據(jù)的傳輸。
指令示例:
STC P3?,?C4?,?[R0]?;將協(xié)處理器?P3?的寄存器?C4?中的字數(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é)處理器指令命令列表
-------------------------------------------------------------
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.)