S3C2440协寄存器

1:协处理器:

ARM微处理器可支持多达16个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略ARM处理器和其他协处理器的指令

    

      2:   mcr是把rCPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到rCPU核寄存器)中

         3:ARM协处理器指令包括以下5条:    

CDP协处理器数操作指令


LDC协处理器数据加载指令


STC协处理器数据存储指令


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


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

CP15的寄存器只能被MRCMCRMoveto Coprocessor from ARM Register )指令访问)

1CDP指令

CDP指令的格式为:

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

指令示例:

CDP  P32C12C10C34;该指令完成协处理器P3的初始化


2LDC指令

LDC指令的格式为:

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

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

指令示例:

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


3STC指令

STC指令的格式为:

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

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

4MCR指令

MCR指令的格式为:

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

指令示例:

MCRP33R0C4C56;该指令将ARM处理器寄存器R0中的数据传送到协处理器P3的寄存器C4C5中。



5MRC指令

MRC指令的格式为:

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

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

指令示例:

MRC P33R0C4C56;该指令将协处理器P3的寄存器中的数据传送到ARM处理器寄存器中.



CP15协处理器寄存器列表(其余其余协处理器寄存器功能差不多)

[2:

CP14调试通信通道协处理器

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

MRCp14, 0, Rd, c0, c0


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

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

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

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

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

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

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

注意

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


通信数据读取寄存器

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

回读取寄存器的值:

MRCp14, 0, Rd, c1, c0

通信数据写入寄存器

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

到写入寄存器中:


MCR  p14, 0, Rn, c1, c0



注意


有关访问ARM10ARM11内核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#"

EN


CP15协处理器

CP15的寄存器只能被MRCMCRMoveto Coprocessor from ARM Register )指令访问

C语言编程内嵌汇编的一般形式:__asm{ MCR p15, 0, dummy, c7, c6, 0; }






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值