ARM协处理器指令

发布者:心有归属最新更新时间:2021-12-16 来源: 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  协处理器指令 引用地址:ARM协处理器指令

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

推荐阅读最新更新时间:2024-11-16 23:40

Atmel推出基于ARM技术的32位微控制器
在本届“国际集成电路研讨会暨展览会/嵌入式系统研讨会”(IIC/ESC China 2006)上,Atmel公司重点介绍了AT91SAM9261微控制器。该产品是Atmel基于ARM技术的32位微控制器系列中的最新型号。此外,Atmel公司还向与会者展示同系列的下一代型号——AT91SAM9260。 AT91SAM9261 AT91SAM9261是一款以ARM926EJ-S处理器为核心的超低功耗“确定过程式”(deterministic)微控制器。该型号专为功耗低、数据吞吐量大的无线手持式应用(例如无线销售终端(point-of-sale, PoS)设备)市场而开发的,其待机电流仅为2.5uA;工作频率500Hz时,电流消耗则
[新品]
ARM系统中触摸屏的中断处理方法
随着嵌入式微处理器性能的提高,集成的外围接口设备越来越多,而外围设备与处理器之间多采用中断方式进行通信,即使在没有操作系统的情况下,也常需要对多个外围设备的中断处理例程进行动态加载,从而实现对多个外围设备的集中动态管理。同时,中断功能可以解决CPU内部运行速度远远快于外部总线速度而产生的等待延时问题。因此,嵌入式微处理器的应用设计中,中断处理通常是系统的核心任务之一。    1 触摸屏   (1)触摸屏简介   随着多媒体信息查询的与日俱增,人们越来越关注触摸屏。触摸屏具有坚固耐用、反应速度快、节省空间、易于交流等许多优点,作为一种最新的电脑输入设备,它是目前最简单、方便、自然的人机交互方式。它赋予多媒体崭新的面貌,是极富吸
[单片机]
<font color='red'>ARM</font>系统中触摸屏的中断处理方法
ARMLinux s3c2440 之UART分析二
软件篇(linux-2.6.30.4): Linux系统的串口驱动与一般字符设备并一样,它采用层次化的架构,从而看做是一个串行系统来实现。 (1) 关注UART或其他底层串行硬件特征的底层驱动程序。 (2) 和底层驱动程序接口的TTY驱动程序。 (3) 加工用于和TTY驱动程序交换数据的线路规程。 下图描述了串行系统间的层次结构关系(s3c2440串口实现例),可以概括为:用户应用层 -- 线路规划层 -- TTY层 -- 底层驱动层 -- 物理硬件层 线路规程和TTY驱动程序是与硬件平台无关的,Linux源码中已经提供了实现,所以对于具体的平台,我们只需实现底层驱动程序即可,这也是我们最关心的。在s3c
[单片机]
ARMLinux s3c2440 之UART分析二
Arm Tech Symposia 年度技术大会现已开放报名
作为 Arm® 最重要、规模最盛大的技术活动之一,Arm Tech Symposia 年度技术大会即将于 11 月 27 日、29 日及 12 月 1 日分别在深圳、北京、上海三城隆重举行。今年的技术大会回归线下,以“Arm 正在构建计算的未来”为主题,诚邀业内厂商、生态伙伴与开发者亲临现场,相互交流与学习,携手构建基于 Arm 技术的未来。 Arm Tech Symposia 将在三城带来超过 80 场主题演讲、技术分享与生态对话,并呈现丰富多样的现场演示。大会上午将由Arm高级副总裁及热门行业合作伙伴高管针对科技创新、产业发展带来主题演讲,共同畅谈产业趋势、技术洞察及前沿发展。 在 11 月 27 日的深圳场和 11
[嵌入式]
Arm 发布 2024 年可持续发展商业报告
Arm 对于实现能效技术创新的持续承诺,是其践行企业使命的重要一环。在当前的人工智能 (AI) 时代,计算需求以前所未有的速度加速增长,这项承诺的重要性更胜以往。 相较于过往,现在更是需要考虑科技对人类和地球影响的时刻。这不仅在当前的气候危机情势下十分关键,对于实现改变生活的社会性突破,以及充分发挥 AI 的潜力与优势也同样重要。Arm 也持续致力于寻找降低 AI 能耗的方法。 Arm 致力于投资于面向未来的能效技术,并减少由企业本身产生的环境足迹,同时积极深耕合作伙伴关系,并投入相关研究,以确保人人都能享受 Arm 技术带来的益处。以下信息图中列举的各项可持续发展和社会影响成果体现了这项承诺。 有关这些成果
[半导体设计/制造]
<font color='red'>Arm</font> 发布 2024 年可持续发展商业报告
基于ARM MCU通过AV端口对显示器的控制
设计背景 ARM处理器是世界上最流行的嵌入式处理器,广泛应用于个人通信等嵌入式领域。本文探讨的是基于普通ARM7核的CPU,在需要通过AV端口的显示器进行显示的方法,如在医疗监视器的显示等。 概述 采用基于ARM7核的LPC2104芯片,通过直接连接显示器的AV端口,由LPC2104的GPIO通过电平转换,输出显示器所需要的控制信号,在显示器显示声音和图像。系统有相应的按键,进行相应的菜单控制。 系统分析 通过AV端口在普通显示器要能显示图像,最主要的是能产生如图1所示的场同步脉冲。 图1 场同步脉冲 它必须要有64μs,4.7μs,5.8μs,1.5μs等精确定时信号。本系统采用LPC2104芯片,工作频率为11.0592
[电源管理]
基于<font color='red'>ARM</font> MCU通过AV端口对显示器的控制
韩媒分析:为何三星对收购Arm“无感”?
近日英伟达发布声明称,将以400亿美元的价格从软银手中收购Arm。如果此笔收购案实现,将成为半导体行业并购历史上最大的一笔交易。英伟达已经同意购买由软银及其子公司持有的所有Arm股票,并将寻求主要国家的批准。 Arm是一家芯片设计公司,占全球移动应用处理器(AP)基本设计的90%以上。如果英伟达收购Arm,它将成为与英特尔一样大的半导体巨头。对此,《华尔街日报》称,这对三星电子等竞争对手来说不是一个好消息,因为英伟达将来可以在半导体行业中发挥巨大的力量。 据businesskorea报道,当Arm进行出售时,一些专家提出了三星电子进行收购竞争的可能性,主要是由于英伟达通过收购Arm可能对三星构成威胁。但是,三星电子对收购Arm并不
[手机便携]
基于ARM处理器的MVB 2类设备研究
1 引 言 列车需要传输大量的设备控制和旅客服务信息,随着这些信息的数量和种类不断地增长,迫切需要一种大容量,高速度的信息传输系统。为此,国际电工委员会(IEC)制定了一项用于规范车载设备数据通信的标准——IEC61375(列车通信网标准),即TCN标准,该标准于1999年6月成为国际标准。目前国际上主要的TCN产品供应商是德国西门子和瑞士Duagon公司,国内的株洲电力机车研究所和大连北车集团电力牵引研究所等单位进行了大量的TCN相关研究工作并取得了丰硕的科研成果。 TCN标准推荐在机车上层使用绞线式列车总线WTB,在下层使用多功能车辆总线MVB。MVB总线和机车中的各种电气设备相连,这些设备按性能可以分为5类,其中二类设备
[应用]

推荐帖子

无线传感器
CC2431中无线收发模块和数据处理模块是不是集成在一个芯片上的,能高诉我有那些无线传感器节点(模块)是把它两集成在一个芯片上的,如能答复非常感谢!无线传感器前面有个贴子说到过这个问题,并有答案。Re:无线传感器
duxiaowen RF/无线
MSP-EXP430F5529LP-GPIO
代码很简单,改编自TI官网例程,如下所示(编译环境为IAR):#includeio430.hintmain(void){volatileunsignedinti;//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1DIR|=BIT0;//P1.0setasoutputwhile(1)
fish001 微控制器 MCU
2013年国赛之2——历届试题汇总、试题分析、设计文档!
历届试题汇总2013年全国大学生电子设计竞赛历届试题汇总!2012十五省大学生电子设计竞赛1994年到2009年历届全国电子大赛试题1994~2009,历届全国大学生电子设计竞赛题目试题(直观版)2011年全国大学生电子设计竞赛试题【2011年国赛试题讨论帖】A题:开关电源模块并联供电系统【2011年国赛试题讨论帖】B题:基于自由摆的平板控制系统【2011年国赛试题讨论帖】C题:智能小车【2011年国赛试题讨论帖】D题:LC谐振放
EEWORLD社区 电子竞赛
用msp430F149无法驱动2.4TFT 320*240 v2.1。
所有线连好之后,程序烧尽板子之后,液晶屏只能一片白,没有图像显示是为何。。。用msp430F149无法驱动2.4TFT320*240v2.1。这个问题就多了,不好分析啊可能程序有问题,,可能连线错误。。。。首先检查连线与程序中的IO口定义有没有问题,如果没有问题,那应该就是程序本身有问题,仔细检查检查hjl240发表于2014-7-1317:27可能程序有问题,,可能连线错误。。。。首先检查连线与程序中的IO口定义有没有问题,如果没有问题,那应该... #d
Jiaoeeer 微控制器 MCU
大家都用什么样的液晶屏?
现要做一个项目人机界面液晶3.5-15寸,触摸屏系统支持图形化界面组态功能,具备曲线绘制,列表显示等功能对于TFT液晶我不太懂希望大家能够给出一些设计建议,系统解决方案和优秀的液晶厂家推荐,谢谢!大家都用什么样的液晶屏?原帖由songhaifei于2011-11-717:22发表现要做一个项目人机界面液晶3.5-15寸,触摸屏系统支持图形化界面组态功能,具备曲线绘制,列表显示等功能对于TFT液晶我不太懂希望大家能够给出一些设
songhaifei 微控制器 MCU
VCU应用层软件开发学习求助
请问哪位坛友大佬,有关于汽车VCU应用层软件开发的相关资料和经验建议,分享一下,本人提供知识付费 VCU应用层软件开发学习求助下载中心找找,应该有
VCU01 汽车电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved