mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002000 @ clear bits 13 (--V-)
bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)
orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align
orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB
mcr p15, 0, r0, c1, c0, 0
在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15可以包含16个32位的寄存器,其编号为0-15。
实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。
有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。
我们在这里不对CP15各组寄存器做详细的分析,仅提供查阅的手段。
MCR {cond} coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2
*这2条指令仅适用于32位寄存器,因为64位寄存器仅由{CRm,opcode1}标识。
找到了对应的寄存器,STCLR
结合文章开头中间那几行语句,发现这段代码是对于STCLR不同的位进行置位/清零。
所以,整段代码做了这样的事情:
1. 读取 SCTLR 的值到 R0
2. 修改 对应的位
3. 写回 SCTLR
文章完。
原文:https://www.cnblogs.com/schips/p/11270256.html