1. 程式人生 > >淺談ARM協處理器命令MCR-MRC

淺談ARM協處理器命令MCR-MRC

ARM協處理器cp15,有16個暫存器,詳細看《ARM體系結構與程式設計》

這裡我大概說一下MRC與MCR這兩個協處理器操作,參考《s3c2440》元件手冊P140頁

格式:

<MCR|MRC>{cond} p#,<expression1>,Rd,cn,cm{,<expression2>}

MCR:Move CPU register to coprocessor  register 

MRC:Move from coprocessor register to  CPU register 

cond: 就是可選的執行條件

p#:就是指定哪個協處理器,ARM920T好像有兩個一個15一個14

expression1:為協處理器將要執行的操作的操作碼,對於CP15來說,永遠為ob00,即0,如果不是,結果不同預知

Rd:CPU暫存器

cn:目標暫存器的協處理器暫存器

cm:為附加的目標暫存器或者源運算元暫存器,用於區分同一個編號的不同物理暫存器,如果不需要,就將它設定為C0,否則結果不可預知

expression2:附加資訊,用於區別同一編號的不同物理暫存器,如果省略或者為0,就表示不附加,如果不是,後果不可預知

看幾個例子就明白:

MRC    p2,5,r3,c5,c6

協處理器p2把c5和c6經過5操作的結果賦給r3

MCR    p6,0,r4,c5,c6

協處理器p6把r4執行0操作後將結果存放進c6

MRC    p3,9,r3,c5,c6,2

協處理器p3把c5和c6經過9操作(型別2)的結果賦給r3

一個重要的應用是設定cpu匯流排模式:

/* 設定CPU工作於非同步模式 */
    mrc p15,0,r0,c1,c0,0
    orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA
    mcr p15,0,r0,c1,c0,0