ARM处理器架构-----协处理器

发布者:BeaLaity0170最新更新时间:2016-06-17 来源: eefocus关键字:ARM  处理器架构  协处理器 手机看文章 扫描二维码
随时随地手机看文章
ARM指令集-协处理器指令详解

 

ARM可支持多达16个协处理器,主要的作用:ARM处理器初始化,ARM与协处理器的数据处理操作,ARM的寄存器与协处理器的寄存器之间传送数据,以及ARM协处理器的寄存器和存储器之间传送数据。共有5条:

-CDP 协处理器数据操作指令

-LDC 协处理器数据加载指令

-STC 协处理器数据存储指令

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

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

1、CDP 指令

CDP 指令的格式为:

CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

CDP 指令用于ARM 处理器通知ARM 协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM 处理器的寄存器和存储器。

指令示例:

CDP P3 , 2 , C12 , C10 , C3 , 4 ;该指令完成协处理器 P3 的初始化

2、LDC 指令

LDC 指令的格式为:

LDC{条件}{L} 协处理器编码,目的寄存器,[源寄存器]

LDC 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

指令示例:

LDC P3 , C4 , [R0] ;将 ARM 处理器的寄存器 R0 所指向的存储器中的字数据传送到协处理器 P3 的寄存器 C4 中。

3、STC 指令

STC 指令的格式为:

STC{条件}{L} 协处理器编码,源寄存器,[目的寄存器]

STC 指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

指令示例:

STC P3 , C4 , [R0] ;将协处理器 P3 的寄存器 C4 中的字数据传送到 ARM 处理器的寄存器R0 所指向的存储器中。

4、MCR 指令

MCR 指令的格式为:

MCR{条件} 协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2。

MCR 指令用于将ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,源寄存器为ARM 处理器的寄存器,目的寄存器1 和目的寄存器2 均为协处理器的寄存器。

指令示例:

MCR P3 , 3 , R0 , C4 , C5 , 6 ;该指令将 ARM 处理器寄存器 R0 中的数据传送到协处理器 P3 的寄存器 C4 和 C5 中。

5、MRC 指令

MRC 指令的格式为:

MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器为ARM 处理器的寄存器,源寄存器1 和源寄存器2 均为协处理器的寄存器。

指令示例:

MRC P3 , 3 , R0 , C4 , C5 , 6 ;该指令将协处理器 P3 的寄存器中的数据传送到 ARM 处理器寄存器中.

 

 

ARM920T 有两个具体协处理器

1.CP14调试通信通道协处理器

调试通信通道协处理器DCC(the Debug Communications Channel)提供了两个32bits寄存器用于传送数据,还提供了6bits通信数据控制寄存器控制寄存器中的两个位提供目标和主机调试器之间的同步握手。

此控制寄存器中的两个位提供目标和主机调试器之间的同步握手:

位 1(W 位) 从目标的角度表示通信数据写入寄存器是否空闲:

W = 0 目标应用程序可以写入新数据。

W = 1 主机调试器可以从写入寄存器中扫描出新数据。

位 0(R 位) 从目标的角度表示通信数据读取寄存器中是否有新数据:

R = 1 有新数据,目标应用程序可以读取。

R = 0 主机调试器可以将新数据扫描到读取寄存器中。

注意

调试器不能利用协处理器 14 直接访问调试通信通道,因为这对调试器无意义。 但调试器可使用扫描链读写 DCC 寄存器。 DCC 数据和控制寄存器可映射到 EmbeddedICE 逻辑单元中的地址。 若要查看 EmbeddedICE 逻辑寄存器,请参阅您的调试器和调试目标的相关文档。

通信数据读取寄存器

用于接收来自调试器的数据的 32 位宽寄存器。 以下指令在 Rd 中返

回读取寄存器的值:

MRC p14, 0, Rd, c1, c0

 

通信数据写入寄存器

用于向调试器发送数据的 32 位宽寄存器。 以下指令将 Rn 中的值写

到写入寄存器中:

MCR p14, 0, Rn, c1, c0

 

注意

有关访问 ARM10 和 ARM11 内核 DCC 寄存器的信息,请参阅相应的技术参考手册。 ARM9 之后的各处理器中,所用指令、状态位位置以及对状态位的解释都有所不同。

目标到调试器的通信

这是运行于 ARM 内核上的应用程序与运行于主机上的调试器之间的通信事件顺序:

1. 目标应用程序检查 DCC 写入寄存器是否空闲可用。 为此,目标应用程序使用 MRC 指令读取调试通信通道控制寄存器,以检查 W 位是否已清除。

2. 如果 W 位已清除,则通信数据写入寄存器已清空,应用程序对协处理器14 ,使用 MCR 指令将字写入通信数据写入寄存器。 写入寄存器操作会自动设置W 位。如果 W 位已设置,则表明调试器尚未清空通信数据写入寄存器。此时,如果应用程序需要发送另一个字,它必须轮询 W 位,直到它已清除。

3. 调试器通过扫描链 2 轮询通信数据控制寄存器。 如果调试器发现 W 位已设置,则它可以读 DCC 数据寄存器,以读取应用程序发送的信息。 读取数据的进程会自动清除通信数据控制寄存器中的 W 位。

以下代码显示了这一过程

AREA OutChannel, CODE, READONLY

ENTRY

MOV r1,#3 ; Number of words to send

ADR r2, outdata ; Address of data to send

pollout

MRC p14,0,r0,c0,c0 ; Read control register

TST r0, #2

BNE pollout ; if W set, register still full

write

LDR r3,[r2],#4 ; Read word from outdata

; into r3 and update the pointer

MCR p14,0,r3,c1,c0 ; Write word from r3

SUBS r1,r1,#1 ; Update counter

BNE pollout ; Loop if more words to be written

MOV r0, #0x18 ; Angel_SWIreason_ReportException

LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit

SVC 0x123456 ; ARM semihosting (formerly SWI)

outdata

DCB "Hello there!"

END

调试器到目标的通信

这是运行于主机上的调试器向运行于内核上的应用程序传输消息的事件顺序:

1. 调试器轮询通信数据控制寄存器的 R 位。 如果 R 位已清除,则通信数据读取寄存器已清空,可将数据写入此寄存器,以供目标应用程序读取。

2. 调试器通过扫描链 2 将数据扫描到通信数据读取寄存器中。 此操作会自动设置通信数据控制寄存器中的 R 位。

3. 目标应用程序轮询通信数据控制寄存器中的 R 位。 如果该位已经设置,则通信数据读取寄存器中已经有数据,应用程序可使用 MRC 指令从协处理器14 读取该数据。 同时,读取指令还会清除 R 位。

以下显示的目标应用程序代码演示了这一过程

AREA InChannel, CODE, READONLY

ENTRY

MOV r1,#3 ; Number of words to read

LDR r2, =indata ; Address to store data read

pollin

MRC p14,0,r0,c0,c0 ; Read control register

TST r0, #1

BEQ pollin ; If R bit clear then loop

read

MRC p14,0,r3,c1,c0 ; read word into r3

STR r3,[r2],#4 ; Store to memory and

; update pointer

SUBS r1,r1,#1 ; Update counter

BNE pollin ; Loop if more words to read

MOV r0, #0x18 ; Angel_SWIreason_ReportException

LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit

SVC 0x123456 ; ARM semihosting (formerly SWI)

AREA Storage, DATA, READWRITE

indata

DCB "Duffmessage#"

END

 

 

 

CP15系统控制协处理器

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

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

MCR{cond} p15,,,,,

MRC{cond} p15,,,,,

其中L位用来区分MCR(L=1)和MRC(L=0)操作. CP15包括15个具体的寄存器如下

-R0:ID号寄存器

-R0:缓存类型寄存器

-R1:控制寄存器

-R2:转换表基址寄存器(Translation Table Base --TTB)

-R3:域访问控制寄存器(Domain access control )

-R4:保留

-R5:异常状态寄存器(fault status -FSR)

-R6:异常地址寄存器(fault address -FAR)

-R7:缓存操作寄存器

-R8:TLB操作寄存器

-R9:缓存锁定寄存器

-R10:TLB 锁定寄存器

-R11-12&14:保留

-R13:处理器ID

-R15:测试配置寄存器 2-24

要注意有2个R0,根据MCR操作数的不同传送不同的值,这也一个只读寄存器

-R0:ID号寄存器 这是一个只读寄存器,返回一个32位的设备ID号,具体功能参考ARM各个系列型号的的CP15 Register 0说明.

MRC p15, 0, , c0, c0, {0, 3-7} ;returns ID

以下为CP15的一些应用示例

U32 ARM_CP15_DeviceIDRead(void)

{

U32 id;

__asm { MRC P15, 0, id, c0, c0; }

return id;

}

 

void ARM_CP15_SetPageTableBase(P_U32 TableAddress)

{

__asm { MCR P15, 0, TableAddress, c2, c0, 0; }

}

 

void ARM_CP15_SetDomainAccessControl(U32 flags)

{

__asm { MCR P15, 0, flags, c3, c0, 0; }

}

 

void ARM_CP15_ICacheFlush()

{

unsigned long dummy;

 

__asm { MCR p15, 0, dummy, c7, c5, 0; }

}

 

void ARM_CP15_DCacheFlush()

{

unsigned long dummy;

 

__asm { MCR p15, 0, dummy, c7, c6, 0; }

}

 

void ARM_CP15_CacheFlush()

{

unsigned long dummy;

 

__asm { MCR p15, 0, dummy, c7, c7, 0; }

}

 

void ARM_CP15_TLBFlush(void)

{

unsigned long dummy;

 

__asm { MCR P15, 0, dummy, c8, c7, 0; }

}

 

void ARM_CP15_ControlRegisterWrite(U32 flags)

{

__asm { MCR P15, 0, flags, c1, c0; }

}

 

void ARM_CP15_ControlRegisterOR(U32 flag)

{

 

__asm {

mrc p15,0,r0,c1,c0,0

mov r2,flag

orr r0,r2,r0

mcr p15,0,r0,c1,c0,0

}

 

}

 

void ARM_CP15_ControlRegisterAND(U32 flag)

{

 

__asm {

mrc p15,0,r0,c1,c0,0

mov r2,flag

and r0,r2,r0

mcr p15,0,r0,c1,c0,0

}

 

}

 

void ARM_MMU_Init(P_U32 TableAddress)

{

ARM_CP15_TLBFlush();

ARM_CP15_CacheFlush();

ARM_CP15_SetDomainAccessControl(0xFFFFFFFF);

ARM_CP15_SetPageTableBase(TableAddress);

}

void Enable_MMU (void)

{

__asm {

mrc p15,0,r0,c1,c0,0

mov r2, #0x00000001

orr r0,r2,r0

mcr p15,0,r0,c1,c0,0

}

printf("MMU enabledn");

}

 

void Disable_MMU (void)

{

__asm {

mrc p15,0,r0,c1,c0,0

mov r2, #0xFFFFFFFE

and r0,r2,r0

mcr p15,0,r0,c1,c0,0

}

printf("MMU disabledn");

}

 
关键字:ARM  处理器架构  协处理器 引用地址: ARM处理器架构-----协处理器

上一篇:ARM处理器架构进化史
下一篇:S3C2440与SDRAM与NAND与NOR的地址连线分析

推荐阅读最新更新时间:2024-03-16 14:57

ARM挑战英特尔服务器芯片霸主地位 软银购并添助力
软件银行(SoftBank)决定大手笔以320亿美元收购英国芯片架构授权大厂ARM,震撼全球科技业界,对此外界分析除了可能牵动全球移动芯片产业布局外,借此收购案也可望有助ARM在获得软银支援下,加速扩大进军至全球数据中心(Data Center)服务器市场。 目前这块市场仍由英特尔(Intel)所盘据,因此未来ARM是否可能对英特尔在数据中心服务器市场形成威胁,将值得观察。据日经新闻(Nikkei)网站报导,虽然当前全球高达95%的智能型手机均搭载基于ARM架构的芯片,不过在服务器芯片市场上ARM市占率却不到1%,由英特尔掌控该市场逾99%市占率。 业界人士指出,但在软银购并后,ARM将可在无需忧心市场投资人
[网络通信]
基于ARM的低功耗语音去噪系统设计
  近年来,电子技术的发展促进了多媒体设备的繁荣,同时随着人们对便携式设备和可移动终端的广泛需求,使得低功耗成为了这类电 子设备最大的技术难题之一。低功耗意味着在同一时间段内在相同条件下移动终端消耗的能量更少,使得此类设备有更长的续航工作时间。低功耗设计降低了系统功 耗,提高了能量利用率。   ARM微处理器因其高性能和低功耗的特性,特别适合于便携式设备的开发与应用。本文设计了一种基于ARM的低功耗语音去噪系统,为应用于便携式移动的语音去噪设备提供了一种很好的设计思路和方法。   1 算法设计   谱减法的原理就是在频域将噪声的频谱分量从带噪语音信号的频谱中减去。其设计思想是在假设加性噪声与短时平稳的语音信号相互独立的条件下,
[单片机]
基于<font color='red'>ARM</font>的低功耗语音去噪系统设计
【汇编优化】之ARM32与AARCH64指令集优化总结
序 前文《arm64》、《arm32》已经介绍arm,aarch64优化的一些基本知识,本文着重介绍优化过程中容易混淆的点,或需注意的点。 1. 关于指令编码长度 1.1 aarch32 A32模式(ARM instruction sets),指令固定的编码长度为32bit T32模式(Thumb instruction sets),指令可以编码成16bit长,也可编码成32bit长 1.2 aarch64 指令固定的编码长度为32bit 参考https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf A1.3.2 The ARM instruc
[单片机]
【汇编优化】之<font color='red'>ARM</font>32与AARCH64指令集优化总结
ARM欲在2015年前夺取PC芯片市场20%
  ARM CEO伊斯特(Warren East)日前参加了巴塞罗那移动世界大会,他在会上接受采访时表示,如果到2015年ARM芯片只获得了20%的计算机芯片市场,那他会相当失望。      ARM自己不生产芯片,主要提供设计图,合作对象包括爱立信等,它在移动手机和平板电脑上占据主导。在PC市场上,英特尔是垄断者。      在过去三年里,手机和电脑的界限日渐模糊,英特尔与ARM的竞争也更加激烈,英特尔着眼于手机,而ARM试图进入传统PC领域。      市场悄然改变,上周,惠普宣布推出平板电脑WebOS,它使用的就是ARM芯片。最乐观的分析指出,到2015年ARM芯片将占据40%的传统PC市场。尽管伊斯特对这个高度乐观的数据不认同
[半导体设计/制造]
ARM linux的中断处理过程
一、前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述: 1、第二章描述了中断处理的准备过程 2、第三章描述了当发生中的时候,ARM硬件的行为 3、第四章描述了ARM的中断进入过程 4、第五章描述了ARM的中断退出过程 本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。 二、中断处理的准备过程 1、中断模式的stack准备 ARM处理器有多种process mode,例如user mode(用户空间的AP所处
[单片机]
<font color='red'>ARM</font> linux的中断处理过程
ARM+Linux下看门狗应用
笔者在设计ARM+Linux的产品中,使用了看门狗ADM706。这款IC的定时间隔为1.6s。由于使用ARM9的内核,操作系统为Linux。整个系统完全启动时间较长,超出了看门狗的喂狗时间门限。因此在CPU能完全启动开始喂狗前,看门狗又给出了复位信号,导致CPU重启。由于成本的原因,此款看门狗IC的定时复位间隔时间已经定死,不能由CPU设置。我们无法通过更改看门狗的喂狗间隔时间来满足CPU的启动要求。 关键过程及根本原因分析 使用的看门狗电路如图1所示。RESET信号为看门狗输出的复位信号,WDI为CPU输出的喂狗信号。在1.6s的时间内,WDI信号有从高到低或者从低到高的变化,则看门狗内部的定时器清零,重新计数,无复位信
[单片机]
ARM的22个概念总结
1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中断控制器; SPI:全双工串行接口; CAN:控制器局域网,一种串行通讯协议; PWM:脉宽调制器; ETM:嵌入式跟踪宏; CPSR:当前程序状态寄存器; SPSR:程序保护状态寄存器; 2.MAM 使用注意事项 当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。最后,将需要的操作模式的对应值写入MA
[单片机]
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能
IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能 瑞典乌普萨拉,2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布 :推出其旗舰产品IAR Embedded Workbench for Arm功能安全版的最新版本9.50.3。此次发布进一步加强了IAR支持开发人员创建安全、可靠和符合标准的嵌入式应用程序的承诺,涵盖了汽车、医疗设备、工业自动化和消费电子等多个行业。该版本中最重要的新功能是经过认证的C-STAT,这是专为安全关键应用程序设计的静态代码分析工具。 IAR Embedded Workbench for Ar
[嵌入式]
IAR推出新版IAR Embedded Workbench for <font color='red'>Arm</font>功能安全版,该版本配备经过认证的静态代码分析功能
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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