ARM协处理器CP15寄存器详解

ref:http://blog.csdn.net/gameit/article/details/13169405



背景:

  在uboot中,start.s中涉及到了 CP15 的有关操作。查阅有关资料,进行学习。

用于系统存储管理的协处理器CP15,可以通过 下面两条汇编指令控制

MCR {cond}     coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond}     coproc,opcode1,Rd,CRn,CRm,opcode2

*这2条指令仅适用于32位寄存器,因为64位寄存器仅由{CRm,opc1}标识。

<coproc>         指令操作的协处理器名,标准名为pn,n,为0~15

<opcode1>      协处理器的特定操作码,对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知

<Rd>    作为元寄存器的ARM寄存器。其值被读写到得协处理器寄存器中。
        <Rd>不能为PC, 当其为PC时。指令操作结果不可预知。

<CRn>             存放第1个操作数的协处理器寄存器。

<CRm>            存放第2个操作数的协处理器寄存器。    (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)

<opcode2>      可选的协处理器特定操作码。                (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)

在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。

CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。

 

以 该命令为例:  mrc   p15,   0,     r0,     c1,   c0, 0        coproc,opcode1,Rd,    CRn,   CRm,opcode2

p15:   coproc         指令操作的协处理器名0:     opcode1      opcode1永远为0,不为0时,操作结果不可预知R0:   Rd      作为 指令读写有关用的寄存器c1:   CRnc0:   CRm0:   opcode2

原文地址:https://www.cnblogs.com/schips/p/11270256.html

时间: 2024-11-07 02:12:23

ARM协处理器CP15寄存器详解的相关文章

[转载]ARM协处理器CP15寄存器详解

用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2 coproc         指令操作的协处理器名.标准名为pn,n,为0~15 opcode1      协处理器的特定操作码. 对于CP15寄存器来说,

ARM LDR伪指令用法详解

LDR伪指令 10.45 LDR pseudo-instruction   功能:把一个32位立即数或一个32位的内存地址加载到一个寄存器中. 注意:这里描述的是LDR伪指令,而不是LDR指令   语法:               LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr *   cond是一个可选的条件码 *  .W是可选的指令宽度说明符 *   Rt是要加载的寄存器 *   expr是一个数字表达式 *   label_ex

8086寄存器详解

8086寄存器详解              因为现在的PC机处理器,都是向下一直兼容到8086,编语言是针对微处理器(即CPU)的,如INTEL8088/8086,8051/8031,Z80等...,我们不可能掌握所有的汇编,无必要也不可能,所以我们选择8086来学习汇编语言.         而对于一个汇编程序员来说,CPU 中主要可以使用的也就是寄存器而已,汇编程序员可以使用指令来读写 CPU 中的寄存器,从而可以实现对于 CPU 的控制,当然,不同的 CPU ,寄存器的个数和结构都是不一

Modbus读写模拟量寄存器详解

读可读写模拟量寄存器: 发送命令(主机向从机)格式: [设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][03][00][6B][00][03][CRC低][CRC高] 意义如下: 11:设备地址,例子中的地址是11,溶氧传感器端默认的地址是1,. 03:读模拟量的命令号固定为03,这是Modbus协议规定的. 00.6B:起始地址高8位(00).低8位(6B):表示想读取的模拟量

16位汇编语言第二讲系统调用原理,以及各个寄存器详解

昨天已将简单的写了一下汇编代码,并且执行了第一个显示到屏幕的helloworld 问题? helloworld怎么显示出来了. 一丶显卡,显存的概念 1.显示hello就要操作显示器,这是非常原始的,那个时候的程序员,并没有像现在的RGB(红绿蓝)这样的三色真彩色,那个时候就是操作显卡的,定义了一个标准 这个标准就是我们要往固定的地址写入数据,就会显示出来 具体流程 操作显卡 -> 显卡有自己的缓存 -> 把数据写入到显存中, - > 显示数据 (显示到屏幕上) 但是那个时候是没有字的,

大脸猫讲逆向之ARM汇编中PC寄存器详解

i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍参考了许多零散的文章,本文重点工作在于对相关概念的整理收集,并按相对合理顺序引出后文中对hook技术中的一些难点的解读. Android平台大多采用了ARM架构的CPU,而ARM属RISC,与X86架构的处理器有不同的特征,本文讲介绍ARM中不容易理解的PC寄存器各种问题,包括ARM流水线.PC寄存

ARM的37个寄存器详解

ARM寄存器ARM共有37个32位物理寄存器,7种工作模式下可访问的寄存器见下表,User和System使用完全相同的物理寄存器. 2.1 R0~R7      所有工作模式下,R0-R7都分别指向同一个物理寄存器(共8个物理寄存器),它们未被系统用作特殊的用途.在中断或异常处理进行工作模式转换时,由于不同工作模式均使用相同的物理寄存器,可能造成寄存器中数据的破坏.2.2 R8~R12 在User&System.IRQ.Svc.Abt和Und模式下访问的R8~R12都是同一个物理寄存器(共5个物

2.3 ARM寄存器详解

一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异常时才有程序状态寄存器 ? 为什么有两个CPSR SPSR当异常发生时保存CPSR的地址 当异常结束时SPSR将之前保存的地址给CPSR 程序状态寄存器的数据格式 N????Is set to bit 31 of the result of the instruction. If this resu

022 ARM寄存器详解

R13:堆栈指针寄存器 SP R14:链接寄存器 LR R15:程序计数器 PC指针 CPSR:当前程序状态寄存器 SPSR:备份程序状态寄存器