所以arm core要控制mmu就要藉由coprocessor溝通指令: mrc, mcr。
mrc/mcr的instruction syntax是:
<MCR|MRC>{cond} p#,<expression1>,Rd,cn,cm{,<expression2>}.有關ARM MMU 的內容在fuber的arm bible中有說明。
MRC : 將coprocessor的register內容搬到ARM core register中
MCR : 將ARM core register的資料copy到coprocessor中
{cond} : 條件執行
p# :所要操作的 coprocesspr index (number?)
expresion1 : 要coprocessor執行的命令
舉例;
mrc p15, 0, r0, c1, c0, 0對coprocessor15(mmu)動作,要求coprocessor 將他的C0, C1 register作operation 0-0的操作,然後把結果放到 r0。
因為mmu的instruction中,CRm沒用到,所以上面的instruction 中c0沒用。還有mmu是經由register控制的,沒有內部operation,所以operation固定是0。
所以mmu的控制指令,只有上述紅色部分有效。
上述命令也就是:
將mmu的c1 register load到r0MMU的protection register R1 是Configuration Register,
bit 31 : iA : 在940T中控制clock
bit 30: nf : 在940T中控制clock
沒有留言:
張貼留言