关于ARM9协处理器MCR和MRC指令.docx
《关于ARM9协处理器MCR和MRC指令.docx》由会员分享,可在线阅读,更多相关《关于ARM9协处理器MCR和MRC指令.docx(11页珍藏版)》请在冰豆网上搜索。
关于ARM9协处理器MCR和MRC指令
在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15包含16个32位的寄存器,其编号为0~15。
访问CP15寄存器的指令
MCR ARM寄存器到协处理器寄存器的数据传送
MRC 协处理器寄存器到ARM寄存器的数据传送
MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。
MCR指令
MCR指令将ARM处理器的寄存器中的数据传送到协处理器寄存器中。
如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。
指令语法格式
MCR{},,,,,{}
MCR{}p15,0,,,,{}
其中,为指令执行的条件码。
当忽略时指令为无条件执行。
为协处理器将执行的操作的操作码。
对于CP15协处理器来说,永远为0b000,当不为0b000时,该指令操作结果不可预知。
作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中。
作为目标寄存器的协处理器寄存器,其编号可能是C0,C1,…,C15。
和两者组合决定对协处理器寄存器进行所需要的操作,如果没有指定,则将为为C0,opcode_2为0,否则可能导致不可预知的结果。
TheCRmfieldandopcode_2fieldareusedtospecifyaparticularactionwhenaddressingregisters.Theopcode_1,opcode_2andCRmfieldsshouldbezero,exceptwhenthevaluesspecifiedareusedtoselectthedesiredoperations,inallinstructionswhichaccessCP15.Usingothervalueswillresultinunpredictablebehavior.Attemptingtoreadfromanon-readableregister,orwritingtoanon-writableregisterwillcauseunpredictableresults.
使用示例
下面的指令从ARM寄存器R4中中将数据传送到协处理器CP15的寄存器C1中。
其中R4为ARM寄存器,存放源操作数,C1、C0为协处理器寄存器,为目标寄存器,opcode_1为0,opcode_2为0。
MCR p15, 0, R4, C1, C0, 0
MRC指令
MRC指令将协处理器的寄存器中的数值传送到ARM处理器的寄存器中、如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。
指令语法格式
MRC{},,,,{,}
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
Thisisaread-onlyregisterwhichreturnsa32-bitdeviceIDcode
这是一个只读寄存器,它存放微处理器的标识码。
TheIDcoderegisterisaccessedbyreadingCP15register0withtheopcode_2fieldsettoanyvalueotherthan1(theCRmfieldshouldbezerowhenreading).Forexample:
MRC p15,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
Thisisaread-onlyregisterwhichcontainsinformationaboutthesizeandarchitectureofthecaches,allowingoperatingsystemstoestablishhowtoperformsuchoperationsascachecleaningandlockdown.
这个只读寄存器包含了高速缓存的大小和类型。
ThecachetyperegisterisaccessedbyreadingCP15register0withtheopcode_2fieldsetto1.forexample:
MRC p15,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
对该寄存器读写指令如下:
MRC p15,0,Rd,c1,c0,0 ;readcontrolregister
MCR p15,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
R bit
ROMprotection
见图1
8
S bit
Systemprotection
见图1
7
B bit
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
图1
寄存器2:
TranslationTableBase(TTB)Register
Registerbits
Function
31:
14
Pointertofirstleveltranslationtablebase. Read/write
13:
0
Reserved
Read=Unpredictable
Write=Shouldbezero
访问C2寄存器指令如下:
MRC p15,0,Rd,C2,C0,0 ; ReadTTBregister
MCR p15,0,Rd,C2,C0,0 ; WriteTTBregister
该寄存器存放第一级转换表基地址。
写入时,位[13:
0]必须为0,读出时,位[13:
0]的值不可预知。
寄存器3:
DomainAccessControlRegister
寄存器3是可读写的域访问控制寄存器,分为16组,每组占用2个位
访问该寄存器的指令如下:
MRC p15,0,Rd,C3,C0,0 ; Readdomain15:
0accesspermissions
MCR p15,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