ARM Cortex-A7中的系统控制寄存器

时间:2015-11-04 06:54:43

标签: assembly arm computer-architecture armv7

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

2 个答案:

答案 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