分类: LINUX
2015-12-11 11:08:58
原文地址:ARM协处理器 作者:bluefishing
ARM920T协处理器接口
ARM920T处理器通过一个外部协处理器接口来支持连接片上协处理器。ARM处理器支持所有的协处理器指令。
ARM920T协处理器接口允许你附加一个专门设计的协处理器到ARM920T。包括:
1.附加一个加速器:用于浮点运算,DSP,3-D图形,加密解密。
2.ARM指令集可支持连接多达16个协处理器到ARM处理器,编号为0~15
内部协处理器
ARM920T处理器包括两个内部协处理器
1.CP14:用于调试控制
2.CP15:用于内存系统控制和测试控制
这就意味着连接到ARM920T处理器外面的协处理器不能被编号为15或14.其他协处理器编号用于ARM公司内部使用。可联系ARM公司,以获得保留的协处理器编号的清单。
外部协处理器
协处理器通过使用一个流水线跟踪器来执行指令(以保证和ARM处理器内核中的流水线同步)。内存中的每一条指令既会进入ARM流水线,也会进入协处理器流水线。为了避免指令被协处理器锁存的临界路径,协处理器必须在ARM920T流水线一个时钟相位之后操作。ARM920T当指令译码后要送去执行时,会通知协处理器,以决定是否决定执行指令
CP15寄存器图概述
CP15定义了16个寄存器。CP15的寄存器图如下表所示
a.在位置0可以访问两个寄存器。具体访问哪一个寄存器取决于第二个操作码的值。
b.分指令寄存器和数据寄存器
Unpredictable(UNP):从这个地方读出的值可以是任意的
Should be zero(SBZ):往这个地方写入的时候,这个域的所有位都应该清0
只能在特权模式下使用MRC和MCR指令访问CP15的寄存器。MCR和MRC的指令位模式如下:
它们的汇编代码为:MCR/MRC{cond} p15,opcode_1,Rd,CRn,CRm,opcode_2
cond是条件码,bit20是L位,如果L=1就表示Load,从外面读到CPU核中,也就是MRC指令,如果L=0就表示Store,也就是MCR指令。[11:8]这四个位是协处理器编号,CP15编号是15,因此是4个1。CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4位。对于CP15协处理器,规定opcod1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。
寄存器0,ID编码寄存器
这是一个用于返回设备ID编码的只读寄存器
你可以通过将opcode2设置为除1以外的值来访问CP15的ID编码寄存器R0(CRm此时应置为0)。例如:
MRC p15,0,Rd,c0,c0,0 ;返回ID寄存器的值
寄存器0,缓存类型寄存器
这是一个只读寄存器,它包含了缓存的架构和大小的信息,这就允许操作系统来确定要如何执行诸如清理缓存和锁定缓存的操作。所有ARMv4T版本及以后的带缓存处理器都包含这个寄存器,允许实时操作系统的厂商生产他们的操作系统的试验版本。
你可以通过将opcode_2设置为1来访问CP15的缓存类型寄存器R0。如:
MRC p15,0,Rd,c0,c0,1 ;返回关于缓存的详细信息
更多详细内容请查阅ARM920T的技术参考手册(ARMO20T Technical Reference Manual)。可在ARM的官方网站:下载其pdf文档
下载地址:
另外,网上也有一篇讲述ARM协处理器的文章:http://blog.chinaunix.net/u3/94328/showart_1918103.html