首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

ARM PL330 DMAC (qt210),该怎么解决

2013-01-02 
ARM PL330 DMAC (qt210)Hi 大虾:最近在看s5pc110的datasheet。其中涉及了DMAC的描述,网上查了一些PL330的资

ARM PL330 DMAC (qt210)
Hi 大虾:
    最近在看s5pc110的datasheet。其中涉及了DMAC的描述,网上查了一些PL330的资料。后来疑惑了。。。
    1,PL330的汇编怎么给PL330使用?
    2,如果有汇编去控制PL330,那么编译好的汇编代码怎么输入到PL330?

    由于理解有限,提出的问题可能有些肤浅。如果大虾知道如何调试使用PL330的请不要吝啬文笔。多写一点相关的感念和技术。

谢谢。
[解决办法]
PL330 的DMA驱动和以往驱动的不同之处:
a) DMA 有自己的特殊指令集,基本是1-6个字节不定长,主要有 DMAMOV/DMALD/DMAST/DMAGO
b) DMA 的驱动主要包含两个工作:
### 1) 开辟一个buf,在buf里面存放DMA的二进制指令,可以完成数据传输操作。
### 2) 通过执行 DMAGO 指令,使得 DMA 内部的取值部件 pc 调转到 buf,从 buf 取值执行相应的指令。
DMAGO 指令的本身的执行,是通过写 S5PV210 芯片的 DBGCMD/DBGINST0/DBGINST1 这3个寄存器实现的。
c) linux 下的 pl330.c 是可以参考使用的驱动,主要包含了一系列 _emit_MOV/_emit_LD/_emit_ST 等类似指令的接口。
这些接口完成类似编译器的工作,把一个DMA操作函数,转换为存放在 buf 数组里面的二进制指令。
d) 驱动编程的关键在于形成 buf 内部的正确机器指令,然后通过对 DBGCMD/DBGINST0/DBGINST1 这3个寄存器进行编程,完成跳转到 buf 执行指令。

http://www.lumit.org/LASO/

https://github.com/limingth/LASO/wiki  

https://github.com/limingth/ARM-Codes/tree/master/tiny210-linux-codes/prj3-dpf-dma


[解决办法]
PL330 的DMA驱动和以往驱动的不同之处:
a) DMA 有自己的特殊指令集,基本是1-6个字节不定长,主要有 DMAMOV/DMALD/DMAST/DMAGO
b) DMA 的驱动主要包含两个工作:
### 1) 开辟一个buf,在buf里面存放DMA的二进制指令,可以完成数据传输操作。
### 2) 通过执行 DMAGO 指令,使得 DMA 内部的取值部件 pc 调转到 buf,从 buf 取值执行相应的指令。
DMAGO 指令的本身的执行,是通过写 S5PV210 芯片的 DBGCMD/DBGINST0/DBGINST1 这3个寄存器实现的。
c) linux 下的 pl330.c 是可以参考使用的驱动,主要包含了一系列 _emit_MOV/_emit_LD/_emit_ST 等类似指令的接口。
这些接口完成类似编译器的工作,把一个DMA操作函数,转换为存放在 buf 数组里面的二进制指令。
d) 驱动编程的关键在于形成 buf 内部的正确机器指令,然后通过对 DBGCMD/DBGINST0/DBGINST1 这3个寄存器进行编程,完成跳转到 buf 执行指令。

http://www.lumit.org/LASO/

https://github.com/limingth/LASO/wiki  

https://github.com/limingth/ARM-Codes/tree/master/tiny210-linux-codes/prj3-dpf-dma

[解决办法]

http://www.lumit.org/LASO/

https://github.com/limingth/LASO/wiki   

https://github.com/limingth/ARM-Codes/tree/master/tiny210-linux-codes/prj3-dpf-dma

热点排行