当 MCR 或 MRC 说明使用不同的 cRm 或 opt2 执行时,<状态<注册?> cRn 注册? 例如,如果运行:
asm volatile("mcr p15, 0, %0, c9, c13, 0" : : "r"(val))
或
asm volatile("mcr p15, 0, %0, c9, c13, 2" : : "r"(val))
那么,哪个寄存器的值会改变 c9 或 c13 ?最后一个选项(0或2)的作用是什么?。here
答案 0 :(得分:2)
MCR和MRC指令是通用协处理器指令。这些指令的作用取决于您使用的特定硬件,它具有的协处理器,以及操作码和协处理器寄存器操作数的值( opcode1 , opcode2 , CRn 和 CRm )。协处理器寄存器操作数不一定是指实际的协处理器寄存器,因此实际上是附加的操作码操作数。
要了解MCR / MRC指令的作用,您需要在硬件特定文档中查找此代码要运行的特定CPU。因此,在您的示例中,我们需要查看Cortex-A7's documentation for coprocessor 15,即系统控制&#34;协处理器&#34;。此页面列出了可以使用 CRn , opcode1 , CRm , opcode2 中的这些说明访问的系统控制寄存器订购。
在你的两个示例中, CRn 都是c9,在文档中查找它会导致我们a page describing mostly performance monitoring related registers。在您的第一个示例中, opcode1 为0, CRm 为13, opcode2 为0,此页面告诉我们该指令写入PMCR或性能监视器控制寄存器。第二个示例 opcode1 为0, CRm 为13, opcode2 为2,表示它访问PMNCNTENCLR或计数启用清除寄存器。 / p>
答案 1 :(得分:2)
你最好认为op1,op2,crn和crm形成一个特定的寄存器地址。后一条指令将协处理器15寄存器0,c9,c13,2(PMXEVCNTR,性能监视器事件计数寄存器)设置为C编译器决定用于变量'val'的寄存器中包含的值。
除性能计数器寄存器外: B3.17.1 CP15寄存器汇总协处理器寄存器号 图B3-26总结了VMSAv7的主协处理器寄存器编号对CP15寄存器的分组 实施
CONVERT(TIME,CRTUP_TIME)
关于调试寄存器,有一个描述: C6.4.1使用CP14访问调试寄存器 访问CP14接口中可见的寄存器通常使用以下协处理器指令: •MRC用于读取访问。 •用于写访问的MCR。
CRn opc1 CRm opc2
c0 {0-2} {c0-c7} {0-7} ¶ ID registers
c1 {0, 4} {c0, c1} {0-7} System control registers
c2 {0, 4} {c0, c1} {0-2} Memory protection and
c3 0 c0 0 control registers
c5 {0, 4} {c0,c1} {0,1} Memory system
c6 {0, 4} c0 {0, 2, 4} fault registers
c7 {0, 4} Various Various ¶ Cache maintenance, address translations, miscellaneous
c8 {0, 4} Various Various TLB maintenance operations
c9 {0-7} Various {0-7} ¶ Reserved for performance monitors and maintenance operations
c10 {0-7} Various {0-7} ¶ Memory mapping registers and TLB operations
c11 {0-7} {c0-c8,c15} {0-7} ¶ Reserved for DMA operations for TCM access
c12 {0, 4} {c0,c1} {0,1} ¶ Security Extensions registers, if implemented
c13 {0, 4} c0 {0-4} ¶ Process, context, and thread ID registers
c14 {0-7} {c0-c15} {0-7} ¶ Generic Timer registers, if implemented
c15 {0-7} {c0-c15} {0-7} ¶ IMPLEMENTATION DEFINED registers
Read-only Read/Write Write-only ¶ Access depends on the implementation
Figure B3-26 CP15 register grouping by primary coprocessor register, CRn, VMSA implementation