首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

常见的五大ARM存储器之一:协处理器CP15(2)

常见的五大ARM存储器之一:协处理器CP15(2)

协处理器CP15          ARM处理器支持16个协处理器。在程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器的指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理程序中,可以通过软件模拟该硬件操作。比如,如果系统不包含向量浮点运算器,则可以选择浮点运算软件模拟包来支持向量浮点运算。
          CP15,即通常所说的系统控制协处理器(System Control Coprocesssor)。它负责完成大部分的存储系统管理。除了CP15外,在具体的各种存储管理机制中可能还会用到其他的一些技术,如在MMU中除CP15外,还使用了页表技术等。
          在一些没有标准存储管理的系统中,CP15是不存在的。在这种情况下,针对协处理器CP15的操作指令将被视为未定义指令,指令的执行结果不可预知。
          CP15包含16个32位寄存器,其编号为0~15。实际上对于某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的标志位来区分这些物理寄存器。这种机制有些类似于ARM中的寄存器,当处于不同的处理器模式时,某些相同编号的寄存器对应于不同的物理寄存器。
          CP15中的寄存器可能是只读的,也可能是只写的,还有一些是可读可写的。在对协处理器寄存器进行操作时,需要注意以下几个问题。
          · 寄存器的访问类型(只读/只写/可读可写)。
          · 不同的访问引发的不同功能。
          · 相同编号的寄存器是否对应不同的物理寄存器。
          · 寄存器的具体作用。
          CP15寄存器访问指令
          通常对协处理器CP15的访问使用以下两种指令。
          MCR:将ARM寄存器的值写入CP15寄存器中;
          MRC:将CP15寄存器的值写入ARM寄存器中。
          注意通过协处理器访问指令CDP、LDC和STC指令对协处理器CP15进行访问将产生不可预知的结果。
          其中,CDP为协处理器数据操作指令,这个指令初始化一些与协处理器相关的操作;
          LDC为一个或多个字的协处理器数据读取指令,此指令从存储器读取数据到指定的协处理器中;
          STC为一个或多个32位字的协处理器数据写入指令,此指令初始化一个协处理器的写操作,从给定的协处理器把数据传送到存储器中。
          指令MCR和MRC指令访问CP15寄存器使用通用语法。
          语法格式为:
          MCR{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
          MRC{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
          其中:
          《cond》为指令的执行条件。当《cond》条件域为空时,指令无条件执行;
          《opcode1》在标准的MRC指令中,为协处理器的《opcode1》,即操作数1。对于CP15来说,此操作数恒为0,即0b000。当针对CP15的MRC指令中《opcode1》不为0时,指令的操作结果不可预知;
          《Rd》为ARM寄存器,在ARM和协处理器交换数据时使用。在MRC指令中作为目的寄存器,在MCR中作为源寄存器。
          注意r15不能作为ARM寄存器出现在MRC或MCR指令中,如果r15作为《Rd》出现在这里,那么指令的执行结果不可预知。
          《CRn》是CP15协处理器指令中用到的主要寄存器。在MRC指令中为源寄存器,在MCR中为目的寄存器。CP15协处理器的寄存器c0、c1、…、c15均可出现在这里。
          《CRm》是附加的协处理器寄存器,用于区分同一个编号的不同物理寄存器和访问类型。当指令中不需要提供附加信息时,将《CRm》指定为C0,否则指令的操作结果不可预知。
          《opcode2》提供附加信息,用于区分同一个编号的不同物理寄存器,当指令中没有指定附加信息时,省略《opcode2》或者将其指定为0,否则指令的操作结果不可预知。
          MCR和MRC指令只能操作在特权模式下,如果处理器运行在用户模式,指令的执行结果不可预知。
          注意在用户模式下,如果要访问系统控制协处理器,通常的做法是由操作系统提供SWI软中断调用来完成系统模式的切换。由于不同型号的ARM处理器对此管理差别很大,所以建议用户在应用时将SWI作为一个独立的模块来管理并向上提供通用接口,以屏蔽不同型号处理器之间的差异。
          例1给出了一个典型的利用SWI进行模式切换的例子。
继承事业,薪火相传
返回列表