},,,,{,}
MRC{}p15,0,,,{,}
参数用法同MCR指令
CP15中的寄存器介绍
Register(寄存器)
Read
Write
C0
IDCode
(1)
Unpredictable
C0
Catchtype
(1)
Unpredictable
C1
Control
Control
C2
Translationtablebase
Translationtablebase
C3
Domainaccesscontrol
Domainaccesscontrol
C4
Unpredictable
Unpredictable
C5
Faultstatus
(2)
Faultstatus
(2)
C6
Faultaddress
Faultaddress
C7
Unpredictable
Cacheoperations
C8
Unpredictable
TLBoperations
C9
Cachelockdown
(2)
Cachelockdown
(2)
C10
TLBlockdown
(2)
TLBlockdown
(2)
C11
Unpredictable
Unpredictable
C12
Unpredictable
Unpredictable
C13
ProcessID
ProcessID
C14
Unpredictable
Unpredictable
C15
Testconfiguration
Testconfiguration
Notes:
1.Registerlocation0providesaccesstomorethanoneregister.Theregisteraccesseddependsuponvaluesoftheopcode_2field.Seetheregisterdescriptionfordetails.
2.Separateregisterforinstructionanddata.Seetheregisterdescriptionfordetails.
寄存器0:
IDCodeRegister(0)
Thisisaread-onlyregisterwhichreturnsa32-bitdeviceIDcode
这是一个只读寄存器,它存放微处理器的标识码。
TheIDcoderegisterisaccessedbyreadingCP15register0withtheopcode_2fieldsettoanyvalueotherthan1(theCRmfieldshouldbezerowhenreading).Forexample:
MRCp15,0,Rd,C0,C0,0
IDCode内容如下:
Registerbits
Function
Value
[31:
24]
Implementor
0x41(‘A’,表示Arm公司)
[23:
20]
Specificationrevision
0x1
[19:
16]
Architectureversion(4T)
0x2(ARM体系版本4T)
[15:
4]
Partnumber
0x920
[3:
0]
Layoutrevision
0x0
寄存器0:
Cachetyperegister
(1)
Thisisaread-onlyregisterwhichcontainsinformationaboutthesizeandarchitectureofthecaches,allowingoperatingsystemstoestablishhowtoperformsuchoperationsascachecleaningandlockdown.
这个只读寄存器包含了高速缓存的大小和类型。
ThecachetyperegisterisaccessedbyreadingCP15register0withtheopcode_2fieldsetto1.forexample:
MRCp15,0,Rd,C0,C0,1;returnscachedetails
Theformatofcachetyperegister(寄存器的数据格式如下)
Registerbits
Function
Value
[31:
29]
Reserved
000
[28:
25]
Cachetype(缓存类型)
0110
[24]
Harvard/Unified
1(definesHarvardcache)
[23:
21]
Reserved
000
[20:
18]
DataCachesize(数据缓存大小)
101(defines16KB)
[17:
15]
DataCacheassociativity
110(defines64way)
[14]
Reserved
0
[13:
12]
DataCachewordsperline
10(defines8wordsperline)
[11:
9]
Reserved
000
[8:
6]
InstructionCachesize(指令缓存大小)
101(defines16KB)
[5:
3]
InstructionCacheAssociativity
110(defines64way)
[2]
Reserved
0
[1:
0]
InstructionCacheperline
10(defines8wordsperline)
寄存器1:
Controlregister
对该寄存器读写指令如下:
MRCp15,0,Rd,c1,c0,0;readcontrolregister
MCRp15,0,Rd,c1,c0,0;writecontrolregister
该寄存器功能如下表
Registebits
Name
Function
Value
31
iAbit
Asynchronousclockselect
见时钟模式表
30
nFbit
notFastBusselect
见时钟模式表
29:
15
-
Reserved
Read=Unpredictable
Write=shouldbezero
14
RRbit
Roundrobinreplacement
0=Randomreplacement
1=Roundrobinreplacement
13
Vbit
Baselocationofexceptionregister(异常寄存器基地址)
0=Lowaddress=0x00000000
1=Highaddress=0xFFFF0000
12
Ibit
Instructioncacheenable
0=Instructioncachedisable
1=Instructioncacheenable
11:
10
-
Reserved
Read=00
Write=00
9
Rbit
ROMprotection
见图1
8
Sbit
Systemprotection
见图1
7
Bbit
Big-endian/little-endian
0=Little-endianoperation
1=Big-endianoperation
6:
3
-
Reserved
Read=1111
Write=1111
2
Cbit
Datacacheenable
0=datacachedisable
1=datacacheenable
1
Abit
Alignmentfaultenable
Dataaddressalignmentfaultchecking
(地址对齐检查)
0=禁用地址对齐检查功能
1=使能地址对齐检查功能
0
Mbit
MMUenable
0=MMUdisable
1=MMUenable
时钟模式表
Clockingmode(时钟模式)
iA
nF
Fastbusmode(快速总线模式)
0
0
Reserved
1
0
Synchronous(同步模式)
0
1
Asynchronous(异步模式)
1
1
寄存器2:
TranslationTableBase(TTB)Register
Registerbits
Function
31:
14
Pointertofirstleveltranslationtablebase.Read/write
13:
0
Reserved
Read=Unpredictable
Write=Shouldbezero
访问C2寄存器指令如下:
MRCp15,0,Rd,C2,C0,0;ReadTTBregister
MCRp15,0,Rd,C2,C0,0;WriteTTBregister
该寄存器存放第一级转换表基地址。
写入时,位[13:
0]必须为0,读出时,位[13:
0]的值不可预知。
寄存器3:
DomainAccessControlRegister
寄存器3是可读写的域访问控制寄存器,分为16组,每组占用2个位
访问该寄存器的指令如下:
MRCp15,0,Rd,C3,C0,0;Readdomain15:
0accesspermissions
MCRp15,0,Rd,C3,C0,0;Readdomain15:
0accesspermissions
InterpretingAccessControlBitsinDomainAccessControlRegister
寄存器4:
保留
对该寄存器的读写会产生不可预料的结果。
寄存器5:
FaultStatusRegister
寄存器6:
FaultAddressRegister
寄存器7:
CacheOperations
该寄存器是只写寄存器,用于管理指令缓存和数据缓存。
对该寄存器的写操作所实现的功能,是通过MCR指令中的opcode_2和CRm两者的组合来选择的,具体组合如下。
寄存器8:
TLBOperations
Register8isawrite-onlyregisterusedtomanagethetranslationlookasidebuffer(TLBs),theinstructionTLBandthedataTLB.
FiveTLBoperationsaredefinedandthefunctiontobeperformedisselectedbytheopcode_2andCRmfieldsintheMCRinstructionusedtowriteCP15register8.Writingotheropcode_2orCRmvaluesidunpredictable.ReadingfromCP15register8isunpredictable.
Function
Data
instruction
InvalidateTLB(s)
SBZ
MCRp15,0,Rd,c8,c7,0
InvalidateITLB
SBZ
MCRp15,0,Rd,c8,c5,0
InvalidateITLBsingleentry(usingMVA)
MVAformat
MCRp15,0,Rd,c8,c5,1
InvalidateDTLB
SBZ
MCRp15,0,Rd,c8,c6,0
InvalidateDTLBsingleentry(usingMVA)
MVAformat
MCRp15,0,Rd,c8,c6,1
以下是MMU的初始化实例:
ARM访问CP15寄存器的指令(中文版详解)
访问CP15寄存器指令的编码格式及语法说明如下:
3128
2724
2321
20
1916
1512
118
75
4
30
cond
1110
opcode_1
L
crn
rd
1111
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.2CP15寄存器介绍
CP15的寄存器列表如表4-1所示。
表4-1ARM处理器中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)主标识符寄存器
访问主标识符寄存器的指令格式如下所示:
mrcp15,0,r0,c0,c0,0;将主标识符寄存器C0,0的值读到r0中
ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:
31242320191615430
由生产商确定
产品子编号
ARM体系版本号
产品主编号
处理器版本号
位
说明
位[3:
0]
生产商定义的处理器版本号
位[15:
4]
生产商定义的产品主编号,其中最高4位即位[15:
12]可能的取值为0~7但不能是0或7
位[19:
16]
ARM体系的版本号,可能的取值如下:
0x1ARM体系版本4
0x2ARM体系版本4T
0x3ARM体系版本5
0x4ARM体系版本5T
0x5ARM体系版本5TE
其他由ARM公司保留将来使用
位[23:
20]
生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等
位[31:
24]
生产厂商的编号,现在已经定义的有以下值:
0x41=AARM公司
0x44=DDigitalEquipment公司
0x69=Iintel公司
ARM7处理器的主标识符寄存器编码格式如下所示:
312423221615430
由生产商确定
A
产品子编号
产品主编号
处理器版本号
位
说明
位[3:
0]
生产商定义的处理器版本号
位[15:
4]
生产商定义的产品主编号,其中最高4位即位[15:
12]的值为0x7
位[22:
16]
生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等
续表
位
说明
位[23]
ARM7支持下面两种ARM体系的版本号:
0x0ARM体系版本3
0x1ARM体系版本4T
位[31:
24]
生产厂商的编号,现在已经定义的有以下值:
0x41=AARM公司
0x44=DDigitalEquipment公司
0x69=IIntel公司
ARM7之前处理器的主标识符寄存器编码格式如下所示:
312423221615430
由生产商确定
A
产品子编号
产品主编号
处理器版本号
位
说明
位[3:
0]
生产商定义的处理器版本号
位[15:
4]
生产商定义的产品主编号,其中最高4位即为[15:
12]的值为0x7
位[22:
16]
生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等
位[23]
ARM7支持下面两种ARM体系的版本号:
0x0ARM体系版本3
0x1ARM体系版本4T
位[31:
24]
生产厂商的编号,现在已经定义的有以下值:
0x41=AARM公司
0x44=DDigitalEquipment公司
0x69=Iintel公司
2)cache类型标识符寄存器
访问cache类型标识符寄存器的指令格式如下所示:
mrcp15,0,r0,c0,c0,1;将cache类型标识符寄存器C0,1的值读到r0中
ARM处理器中cache类型标识符寄存器的编码格式如下所示:
31292825242312110
000
属性字段
S