hello world!
分类: LINUX
2011-03-20 11:18:58
对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。下图是协处理器的指令格式(摘自[S3C2410用户手册])。
对于CP15协处理器,规定opcode1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。
MCR{cond} p15,
MRC{cond} p15,
其中L位用来区分MCR(L=1)和MRC(L=0)操作. CP15包括15个具体的寄存器如下。
寄存器0:ID Code Register
MRC p15, 0, Rd, C0, C0, 0 // read-only get ID Code Register
寄存器0:Cache type register
MRC p15, 0, Rd, C0, C0, 1; returns cache details
寄存器1:Control register
MRC p15, 0, Rd, c1, c0, 0 ; read control register
MCR p15, 0, Rd, c1, c0, 0 ; write control register
寄存器2:Translation Table Base(TTB) Register
MRC p15, 0, Rd, C2, C0, 0 ; Read TTB register
MCR p15, 0, Rd, C2, C0, 0 ; Write TTB register
寄存器3:Domain Access Control Register
MRC p15, 0, Rd, C3, C0, 0 ; Read domain 15:0 access permissions
MCR p15, 0, Rd, C3, C0, 0 ; Read domain 15:0 access permissions
寄存器4:保留,对该寄存器的读写会产生不可预料的结果.
寄存器5:Fault Status Register
寄存器6:Fault Address Register
寄存器7:Cache Operations
寄存器8:TLB Operations
Function |
Data |
instruction |
Invalidate TLB(s) |
SBZ |
MCR p15,0,Rd,c8,c7,0 |
Invalidate I TLB |
SBZ |
MCR p15,0,Rd,c8,c5,0 |
Invalidate I TLB single entry (using MVA) |
MVA format |
MCR p15,0,Rd,c8,c5,1 |
Invalidate D TLB |
SBZ |
MCR p15,0,Rd,c8,c6,0 |
Invalidate D TLB single entry (using MVA) |
MVA format |
MCR p15,0,Rd,c8,c6,1 |