ARM协处理器指令

最新更新时间:2021-09-22来源: eefocus关键字:ARM  协处理器指令 手机看文章 扫描二维码
随时随地手机看文章

ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条:


CDP 协处理器数操作指令

LDC 协处理器数据加载指令

STC 协处理器数据存储指令

MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令

MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令

......


CP15系统控制协处理器


CP15 —系统控制协处理器 (the system control coprocessor)他通过协处理器指令MCR和MRC提供具体的寄存器来配置和控制caches、MMU、保护系统、配置时钟模式(在bootloader时钟初始化用到)


CP15的寄存器只能被MRC和MCR(Move to Coprocessor from ARM Register )指令访问

一些要说明的内容,摘录见下::



Co-processors

There are between zero and three possible co-processors. Most desktop ARM systems do not have logic for external co-processors, so we may either use that which is built into the ARM itself, or an emulated co-processor.

CP15 is reserved on the ARM 3 and later processors for internal configuration, as described in this document.

CP0 and CP1 is used by the floating point system. It may either be an external floating point chip (as used with the ARM 3), hardware built into the processor (as in the ARM 7500FE), or a totally software-based emulation (as with the  FPEmulator  that we all know).

Here is a short exercise for you:


    10 DIM code% 16

    20 P% = code%

    30 [ OPT     3

    40   CDP     CP1, 0, C0, C1, C2, 0

    50   ADFS    F0, F1, F3

    60   MOV     PC, R14

    70 ]

   >RUN

   00008F78                    OPT     3

   00008F78 EE010102           CDP     CP1, 0, C0, C1, C2

   00008F7C EE010102           ADFS    F0, F1, F2

   00008F80 E1A0F00E           MOV     PC, R14

   >

What do you notice?  :-)

 


When the ARM executes a co-processor instruction, or an undefined instruction, it will offer it to any co-processors which may be presently attached. If hardware is available to process the given instruction, then it is expected to do so. If it is busy at the time the instruction is offered, the ARM will wait for it.

If there is no co-processor capable of executing the instruction, the ARM will take its undefined instruction trap, in which case the following will happen:


The PSR and PC are both saved (the method differs for 26 bit and 32 bit ARMs)

SVC mode (26 bit) / UND mode (32 bit) is entered, and the I bit of the PSR is set

The instruction at address &00000004 is executed

This trap may be used to add instructions to the instruction set by emulation, or to implement a software emulation of hardware that isn't fitted. The  Floating Point Emulator  works by doing this.

To return, simply pull the saved PC and PSR (depends on 26/32 bit) and push them to the current PC and PSR, like MOVS PC, R14 in 26 bit systems. This will pick up with the instruction following the one which caused the trap.


All of the co-processor instructions can be executed conditionally. Please note that the conditionals relate to the status of the ARM processor, and not the status of any of the co-processors. This is because the ARM always tries the instruction first, and offers it around and maybe takes the undefined application trap, so the conditions are ARM related.

To make this clearer:


    10 DIM code% 32

    20 P% = code%

    30 [ OPT     3

    40   FLTS    F0, R0

    50   FLTS    F1, R1

    60   FMLS    F2, F0, F1

    70   FIX     R0, F2

    80   MOVS    PC, R14

    90 ]

   100 INPUT "First number : "A%

   110 INPUT "Second number: "B%

   120 PRINT USR(code%)

This probably won't assemble without an enhanced BASIC assembler.

Anyway, you might think the ARM will hand over to the floating point co-processor to do the four FP instructions, then hand back afterwards.

If you did, you would be incorrect!


What actually is executed is:


   MCR     CP1, 0, R0, C0, C0

   MCR     CP1, 0, R1, C1, C0

   CDP     CP1, 9, C2, C0, C1

   MRC     CP1, 0, R0, C0, C2

It is worth pointing out that objasm specifies co-processor registers using the CR notation (ie, CR0 - CR15), which is first defined with the CN directive. It does not appear as if default co-processor instructions are defined in Nick Roberts' ASM, though I've only looked in the instructions at the "defined symbols" section...

Darren Salt's ExtBASICasm provides the register names C0 - C15 to refer to the co-processors. So if any of these examples fail when you try to assemble them, please check what format your assembler provides these instructions.


 


 



MRC

The instruction  MRC  transfers a co-processor register to an ARM register. It takes the form:

   MRC    , , , , ,

The co-processor is denoted in most assemblers by  CPx .

The register    is written to  , using operation  . This may, possibly, be further modified by    and  . For an idea of the sorts of times when this might be necessary, consider instructions of the form  LDR Ra, [Rb], #x . 

The final    may be omitted, as it is in the example, but the other parts of the MRC instruction must be supplied.

 



MCR

The instruction  MCR  transfers an ARM register to a co-processor register. It takes the form:

   MCR    , , , , ,

The co-processor is free to interpret the fields as it desires, but the standard interpretation is that the contents of the ARM register are written to the co-processor register using the operation code given, which may be further modified by the second co-processor register and/or the second operation code.




在U-Boot中我们用到了c7 和 c8这两个协处理器,再来看看MCR的详细用法:



MCR指令:


MCR指令将ARM处理器的寄存器中的数据传送到协处理器寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。


指令语法格式:


MCR{}

,< opcode_1>,,,{,}


MCR{} p15,0,,,{,}


其中


指令执行的条件码.当忽略时指令为无条件执行。


协处理器将执行的操作的操作码。对于CP15协处理器来说,永远为0b000,当不为0b000时,该指令操作结果不可预知。


作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中


作为目标寄存器的协处理器寄存器,其编号可能是C0,C1,…,C15。


两者组合决定对协处理器寄存器进行所需要的操作,如果没有指定,则将为为C0,opcode_2为0



    mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */


可以看出,其中


rd为r0=0


CRn为C7


CRm为C7


对于这行代码的作用,以此按照语法,来一点点解释如下:


首先,mcr做的事情,其实很简单,就是“ARM处理器的寄存器中的数据传送到协处理器寄存器中”,


此处即是,将ARM的寄存器r0中的数据,此时r0=0,所以就是把0这个数据,传送到协处理器CP15中。


而对应就是写入到“”这个“目标寄存器的协处理器寄存器”,此处CRn为C7,即将0写入到寄存器7(Register 7)中去。


而上面关于Register 7的含义中也说了,“Any data written to this location will cause the selected cache to be flushed”,即你往这个寄存器7中写入任何数据,都会导致对应的缓存被清空。而到底那个缓存被清空呢,即我们这行指令



mcr p15, 0, r0, c7, c7, 0



起了什么作用呢


那是由“两者组合决定”的。


而此处CRm为C7,opcode_2为0,而对于C7和0的组合的作用,参见上面的那个表中Register 7中的Flash I+D那一行,


当opcode_2为0,CRm为0111=7,就是我们要找的,其作用是“Flush I + D”,即清空指令缓存I Cache和数据缓存D Cache。


根据该表,同理,如果是opcode_2=0,而CRm=0101b=5,那么对应的就是去“Flush I”,即只清除指令缓存I Cache了。


而对应的指令也就是



mcr p15, 0, r0, c7, c5, 0


此注释说此行代码的作用是,清理v3或v4的缓存


其中v4,我们很好理解,因为我们此处的CPU是ARM920T的核心,是属于ARM V4的,而为何又说,也可以清除v3的cache呢?


那是因为,本身这些寄存器位域的定义,都是向下兼容的,参见上面引用的内容,也写到了:


ARM 710


Register 7 - IDC flush (write only)

Any data written to this location will cause the IDC (Instruction/Data cache) to be flushed.


即,对于ARM7的话,你写同样的这行代码



mcr p15, 0, r0, c7, c7, 0


也还是向register 7中写入了数据0,这也同样满足了其所说的“Any data written to this location”,也会产生同样的效果“cause the IDC (Instruction/Data cache) to be flushed”。


同理,可以看出此行是去操作寄存器8,而对应的各个参数为:


rd为r0=0


CRn为C8


CRm为C7


opcode_2为0


对照寄存器8的表:



Register 8 - TLB operations (write only)

Any data written to this location will cause the selected TLB flush operation.


The OPC_2 and CRm co-processor fields select which cache


operation should occur:


Function OPC_2 CRm Data


Flush I + D %0000 %0111 -


Flush I %0000 %0101 -


Flush D %0000 %0110 -


Flush D single %0001 %0110 Virtual address”


其含义为:


向寄存器8中写入数据,会导致对应的TLB被清空。具体是哪个TLB,由opcode_2和CRm组合决定,


此处opcode_2为0,CRm为7=0111b,所以对应的作用是“Flush I + D”,即清空指令和数据的TLB。

关键字:ARM  协处理器指令 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic548615.html

上一篇:s3c6410 时钟设置
下一篇:ARM体系架构—ARMv7-A协处理器

推荐阅读

ARM架构—— Cortex-M3与Cortex-M4特点概述
一、处理器和微控制器差别微控制器包含处理器,处理器只是其中一小部分,具体包含存储器、时钟生成、分配逻辑、系统总线以及外设(I/O接口单元、通信接口、定时器、ADC、DAC等等),如图1-1所示:图 1一1微控制架构即使处理器相同,但是不同芯片厂商根据不同的应用场景选择不同的特性模块就能设计出不同特性的微控制器。二、Cortex-M3与Cortex-M4特点Cortex-M3与Cortex-M4处理器均使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位。Cortex-M处理器使用的指令集架构(ISA)为Thumb ISA,基于Thumb-2技术并同时支持16位和32位指令。异同点:相同点:基于ARM-v7-M架构
发表于 2021-10-25
<font color='red'>ARM</font>架构—— Cortex-M3与Cortex-M4特点概述
ARM Cortex-M处理器详解
  ARM Cortex-M处理器家族现在有8款处理器成员。在本文中,我们会比较Cortex-M系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的Cortex-M处理器。本文中会详细的对照Cortex-M 系列处理器的指令集和高级中断处理能力,以及 SoC系统级特性,调试和追踪功能和性能的比较。  1、简介  今天, ARM Cortex-M 处理器家族有8款处理器成员。除此之外,ARM的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说,也是很容易混淆这些产品的。不同的ARM 处理器有不同的指令集,系统功能和性能。本文会深入展现Cortex-M系列处理器之间
发表于 2021-10-25
<font color='red'>ARM</font> Cortex-M处理器详解
uCOS-II的中断-ARM7实现中断嵌套的方法探究
在uCOS-II,或者是任何一个可剥夺型OS系统中,中断嵌套是一个必须要解决的问题。从结论上来说,并不是所有的CPU都支持中断嵌套的,即便是ARM系列内核。对于ARM7系列,例如LPC2xxx系列芯片,硬件上是不支持中断嵌套的,而对于新的CortexM3系列,中断嵌套是可配置的,但是中断嵌套时保存现场的操作并不完整,并没有把R0~R15所有寄存器都保存到堆栈中,而是只保存R0~R4。这就需要我们手动软件实现全部或部分的中断现场保护机制。不过首先通过分析ARM7系列芯片来看看中断嵌套的硬件要求。ARM7系列的内核一共有7中模式,如下图所示:其中(1) User Mode:用户模式。唯一非特权模式,可执行指令受限。(读写CPSR禁止
发表于 2021-10-25
uCOS-II的中断-<font color='red'>ARM</font>7实现中断嵌套的方法探究
ARM学习笔记】ARM中断嵌套模式理解
之前一直是做DSP,DSP上有中断嵌套,为了保证在多中断的情况下终端不丢失,在读取完硬件数据后会重新开启中断。因此想当然的以为ARM架构也存在这样一种根据优先级的抢占机制。但是事实上不是的,ARM架构中只有FIQ模式才能打断IRQ中断模式。而内核中,为了防止中断丢失直接在SVC模式下执行中断服务程序。以下是来自韦东山老师的一盘文章:几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易。ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位
发表于 2021-10-25
关注 Arm DevSummit 2021 跟进EDA的技术热点
Arm DevSummit  2021科技盛会于10/19 (周三) – 10/21 (周五) 盛大举行,这个为期三天的虚拟会议提供对最新技术趋势的见解,汇集了来自 Arm 生态系统的世界上最雄心勃勃的软件和硬件工程师及科技爱好者,相聚云端,共话计算世界未来。从移动通信到 5G、从物联网到人工智能,从嵌入式到超级计算,每一次创造未来的新技术,都激发了世界的潜力。30 多年来,拥有数百万硬件工程师和软件开发人员的 Arm 生态系统在几代计算中取得了共同的成功。2021 年 Arm DevSummit 盛会议程包括为期三天的主题演讲、86 场技术会议和 11 场研讨会,涵盖七大主题:1、适用于终端、边缘和云的云原生 
发表于 2021-10-25
Arm推出虚拟硬件与Project Centauri,改变物联网开发流程
日前,Arm物联网兼嵌入事业部副总裁 Mohamed Awad在Arm DevSummit上,以“设计以系统为本”为题,介绍了Arm针对物联网领域的全新方法学。众所周知,物联网往往是碎片化的市场,但开发者依然需要快速的开发迭代。“智能化已经遍及物联网市场,但目前我们的开发进展还不够快,重要原因是物联网应用规模越来越大、并且具有复杂性和多样性。”Mohamed说道。为了颠覆物联网设计开发方法学,Arm提出了三个具体手段:Arm物联网全面解决方案通过一套全栈式解决方案,大幅加速产品开发进程并提高投资回报率Arm虚拟硬件使得开发无需基于实体芯片进行,促成软件与硬件的共同设计,让产品开发时间最多缩短两年Project Centauri
发表于 2021-10-21
<font color='red'>Arm</font>推出虚拟硬件与Project Centauri,改变物联网开发流程

推荐帖子

有关LCD与430接口的问题:(
请问大侠们,我用MSP430F133做的系统,显示用的是5V字符LCD显示,我需要读取液晶的忙状态,是否可以把LCD和MSP430直接连接,如果用驱动,可否使用HT1621D?大侠们请赐教有关LCD与430接口的问题:(
NetCom 微控制器 MCU
DIY情人节礼物DSP相关TI官网资料
http://focus.ti.com.cn/cn/docs/prod/folders/print/tms320f28027.html直接打开链接查看即可!DIY情人节礼物DSP相关TI官网资料
murray DSP 与 ARM 处理器
DSP外部地址的数据乱变
DSP是采用28335,外部总线XINTF的地址是0x4000开始,外部总线上面有设备(CPLD)的时候,DSP程序采用断点调试,观察memory的地址0x4000区域数据,自己想改变的地方的数据没有变化,反而其他的数据在来回不断的变化,只要程序执行一条语句,有点地址上的数据就变化一下,不知道这算什么问题。我的写数据语句是这样的:voidOUTData(Uint16*Start_Addr,Uint16DataBit,intMode) { Uint16temp=0,temp1;
nealfei DSP 与 ARM 处理器
封装大全
元件的封装大全,觉得有用,大家学习学习哦封装大全
很坏 PCB设计
Altium designer 18 原理图
使用AD18绘制原理图是出现如图所示状况,因为之前一直用的AD14刚更新版本过来还不适应,导线汇集的点怎么会变成这样?不能90度角交叉的那种么?改怎么修改规则? Altiumdesigner18原理图
燕园技术宅 模拟电子
FPGA挑战工艺极限 28ns!!
2010年2月23日,赛灵思宣将最大限度地发挥28纳米技术的价值:http://www.eeworld.com.cn/FPGA/2010/0223/article_982.html Altera高端的Stratix产品未来无疑将采用TSMC的28nm高性能平台进行生产,中端Cyclone会选择28nm低功耗平台:http://www.eeworld.com.cn/FPGA/2010/0205/article_966.html VictorPeng介绍“在28纳米这个节点上,静
xiaoxin1 FPGA/CPLD
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved