格式:MCR{cond} coproc,opcodel,Rd,CRn,CRm{,opcode2}
一、MCR
命令功能要从右往左看,MCR就是Move R to C,即通用寄存器数据送到协处理器寄存器。
示例:
MCR  3,3,R0,C4,C5,6;该指令将 ARM 处理器寄存器 R0 中的数据传送到协处理器  3 的寄存器 C4 和 C5 中。
二、MRC
示例:
MRC  3,3,R0,C4,C5,6;该指令将协处理器  3 的寄存器中的数据传送到 ARM 处理器寄存器中。
三、编程分析。
cortex a8 有2个协处理器:CP14和CP15,CP14是debug用的,懒得看。一般只用到CP15。
以上截图摘自cortex a8参考手册,大致意思就是有 3个协处理器指令语句 可以当做NOP指令。
协处理器有以下功能组:
1.MMU配置
2.Cache配置
3.二级缓存L2预加载引擎配置
4.系统性能监视
5.数组debug
我们常用到的一般就是MMU和cache、L2 cache。
来看一段代码:
[mw_shl_code=c,true] /* disable l2 cache */
mrc p15, 0, r0, c1, c0, 1
bic r0, r0, #(1<<1)
mcr p15, 0, r0, c1, c0, 1[/mw_shl_code]
第一行,op1为0,CRn为c1,CRm为c0,op2为1,联系下表,对应 Auxiliary Control 位置。
第二句将r0[1] 清零。第三句将r0赋给cp15
继续翻看page 3-47,找到:
Auxiliary control reg [1] 就是L2EN,清零后就禁用L2了。
|