微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式ARM CPU协处理器讲解

嵌入式ARM CPU协处理器讲解

时间:11-10 来源:互联网 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top