嵌入式ARM CPU协处理器讲解

发布者:Yuexin888最新更新时间:2016-07-12 来源: eefocus关键字:ARM  CPU  协处理器 手机看文章 扫描二维码
随时随地手机看文章
  三星公司ARM11 CPU采用ARM核版本ARM1176JZF-S, 基于ARM V6体系架构,ARM11包括CP14和CP15协处理器,关于ARM11的协处理CP14和CP15的详细介绍请参看文档《ARM1176JZF-S Technical Reference Manual》,ARM官方网http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0301h/index.html可以在线阅读《ARM1176JZF-S Technical Reference Manual》。这里我们简单介绍一下基于ARM926EJ-S/ARM920T 协处理器 CP14, CP15, ARM11的协处理器CP14,CP15与此类似。


ARM926EJ-S/ARM920T 协处理器 CP14, CP15详解  

     ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 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 协处理器编码,目的寄存器,[源寄存器]

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

指令示例:

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

3、STC 指令

STC 指令的格式为:

STC 协处理器编码,源寄存器,[目的寄存器]

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

指令示例:

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 处理器寄存器中.

The ARM920T 有两个具体协处理器

CP14调试通信通道协处理器

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

通信数据控制寄存器

以下指令在 Rd 中返回控制寄存器的值:

MRC p14, 0, Rd, c0, c0

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

位 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 p15,,,,,

MRC 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

以下为ID Code详细描叙(ARM926EJ-S); ARM920T Part Number为0x920,Architecture (ARMv4T) 为0x2具体可参照ARM各型号.

-R0:缓存类型寄存器(CACHE TYPE REGISTER),包含了caches的信息。读这个寄存器的方式是通过设置协处理操作码为1.

MRC p15, 0, , c0, c0, 1; returns cache details

 

以下为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 enabled\n");

}

 

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 disabled\n");

}

关键字:ARM  CPU  协处理器 引用地址:嵌入式ARM CPU协处理器讲解

上一篇:ARM 指令集 比较指令
下一篇:常用 ARM指令集及汇编

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

ARM第二季度营收增长17%至3.5亿美元
7月27日消息,据美国媒体报道,英国芯片设计公司ARM控股当日公布了第二季度业绩,由于新许可协议和ARM芯片出货增长,许可收入和版税收入都在增长,推动每股利润同比上升18%。不久前软银提出了以310亿美元收购ARM。 总部位于英国剑桥的ARM称,在6月30日结束的季度里,每股利润同比增长18%至8.6便士,营收增长17%至2.676亿英镑(约合3.5亿美元),许可收入增长24%,版税收入增长19%。调整后的税前利润为1.3亿英镑(约合1.7亿美元),同比增长5%。第二季度ARM设计的芯片出货量为36亿块,其中42%为物联网芯片,60%的芯片针对非移动应用。 ARM首席执行官西蒙 希格斯(Simon Segars)
[单片机]
ARM之GPIO介绍(Exynos4412平台)
GPIO 概述:GPIO的英文全称是General-Purpose Input/Output,也就是通用输入输出。在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO.接口至少有两个寄存器,即“通用IO控制寄存器”和“通用IO数据寄存器”。 特性 46个可中断通用控制I/O; 172个外部中断; 32个外部可唤醒中断; 252个多路复用I/O口; 睡眠模式引脚状态可控(除了GPX0,GPX1,GPH2,GPH3); GPIO常用寄存器 引脚控制寄存器(GPxCON x=A0~V4) 在exynos4412中,大多数的引脚都是功能复用的,所以必须对每个引脚进行配置。引脚控制寄存器(GPxCON)用来配置每个引脚
[单片机]
<font color='red'>ARM</font>之GPIO介绍(Exynos4412平台)
亚马逊:ARM芯片技术创新较慢
   拥有全球部分规模较大数据中心的亚马逊表示,使用ARM技术的芯片厂商的创新步伐跟不上英特尔,因此亚马逊不准备替换其服务器的芯片供应商。亚马逊网络服务(Amazon Web Services,以下简称AWS)副总裁詹姆斯·汉密尔顿(James Hamilton)发表了上述言论。AWS是亚马逊的云计算部门,为其他公司提供云计算和存储服务。汉密尔顿认为,ARM芯片技术的研发步伐并不够快。ARM的发言人拒绝置评。 对于AMD、Applied Micro Circuits Corp等希望撼动英特尔在服务器处理器市场中领先地位的公司来说,争取AWS等公司的服务器芯片订单至关重要。这些厂商声称,英特尔高达98%的市场份额意味着客户需要承担更
[手机便携]
基于ARM核的音频解码器单芯片系统
摘 要: 简要介绍Cirrus Logic公司的嵌入式处理器产品EP7209的结构、功能、接口特性等,并给出基于EP7209所能构建的最大系统。对使用EP7209构建嵌入式系统有一定参考价值,也有助于了解ARM核。 关键词: 嵌入式处理器 嵌入式系统 ARM核 引 言    EP7209是世界上第一片既支持流行的MP3标准,也支持诸如Microsoft Audio等快速涌现的互联网音频压缩标准的数字音频解码器片上系统。EP7209在74MHz下运行时其性能与基于100MHz英特尔奔腾芯片的个人计算机相同,且消耗的功率特别小:
[嵌入式]
STM32串口DMA超时接收方法,可大大节约CPU时间
本办法使用定时器定时查询DMA接收到的数据,如果超过设定的周期则认为本次数据包结束,将数据拷贝到缓冲区,交由其他程序处理。可以接收任意大小的数据包,尤其适用于MODBUS等协议,曾经用于GPS、GPRS等接收,很实用。本方法占用CPU时间极少,尤其是波特率很高时,效果更加明显。 当某一个串口的数据接收超时以后,定时器中断中将数据拷贝到缓冲区,在主程序中可以判断数据标志UART1_Flag,大于0的时候即代表有数据接收到,可以处理,处理完后将此变量清零即可。 两个数据包间隔较小时,可以将定时器的周期调短些。 //超时时间定义 #define UART1_TimeoutComp 2 //20ms #define UAR
[单片机]
ARM单片机开发经验点滴
简介:一些简单的ARM开发中的例程 计算r1和r2的绝对值 对应的C伪指令为: if ( r1 r2 ) r0 = r1+r2; else r0 = r1-r2; 对应的ARM汇编为: cmp r1, r2 subgt r0, r1, r2 sublt r0, r2, r1 以上条件判断只适合简单的分支结构,复杂的分之结构如何实现呢???比如如下控制逻辑: if ( r1 r2 ) { r0 = r1 - r2; if ( r0 r3 ) r0 = 1; else r0 = 0; } else { r0 = r2 - r1; if ( r0 r3 ) r0 = 1; else r0 = 0; } 如果还按照
[单片机]
学习ARM体系结构的意义
时常有些同学会问,在嵌入式开发中用得最多的是什么?我答,是C语言。那么最复杂的是什么?是嵌入式操作系统。只有Bootloader主要用到体系结构的知识吗?嗯,那当然。写Bootloader似乎也太麻烦了点,这要怎么开始啊?没有人要求你从车轮开始造的,提供开发板的厂商必然会附送一个具备基本功能的Bootloader的,你就分析它,按自己的意愿修改它,然后就可得到自己的Bootloader了。那岂不是学习体系结构没有多大用了? 换个视角来看。数学贵为科学的皇后,自打背上书包起,各类数学课本就没有离开过我们,也是各类国家级大考的“常委”,可毕业后的工作实践中,究竟有多少次用到过那些高深的数学知识了?大多数人都会迟疑片刻,接着把脑袋摇
[单片机]
基于ARM9的仿人机器人分布式控制系统
1 引言 仿人型机器人具有类似于人类基本外貌特征和步行运动功能,还具有视觉、听觉等功能,它可以实现类似人类的行走,灵巧轻便,对行走环境有良好的适应性,既能在平地上行走,又能在非结构的复杂地面上行走,如上下台阶,跨越、绕过障碍物等。另外,仿人型机器人是集材料、机械、电子、能源驱动、计算机感知、传感、控制、虚拟现实与人工智能等多门学科于一体的综合性平台,它的研究能够带动诸多相关学科和技术的交叉发展与进步,并为相关学科的研究提供一个平台。因而,近年来,仿人型机器人的研发受到国内外学者的广泛关注。小型机器人是近年发展起来的仿人机器人的一种,主要的研究集中在日本。小型仿人机器人,结构轻巧,集成度高,运动灵活;未来可在工业、民用、军事等许多
[单片机]
基于<font color='red'>ARM</font>9的仿人机器人分布式控制系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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