上篇文章主要是通过EMIF接口进行FPGA的配置,这篇文章是通过EDMA3从EMIF接口把FPGA里大量数据读出来,由于本人用的EMIF接口是异步的,所以用EDMA接口从FPGA读数据比较慢,3k数据大概240us左右,速度瓶颈由EMIF接口导致。
目的:EDMA3通过EMIF接口快速读取FPGA里数据
EDMA3(The enhanced direct memory access )的作用主要是在CPU不参与的情况下,进行数据的快速搬运。
C6748的EDMA3由EDMA3 channel controller和EDMA3 transfer controller两部分组成。
EDMA3 channel controller 是用户接口,配置都在这里,相当于领导者。
EDMA3 transfer controller是真正的执行者。
C6748的模块框图如下:
关于EDMA3的详细描述请看C6748的datasheet (505页)。下面我提几点比较重要的
关于EDMA3的具体名词不明白的可以百度一下,网上这方面说的已很多!!!!!
C6748的EDMA3的传输类型:支持一维与二维传输。(通过chaining可以实现三维传输)。
C6748的EDMA3支持chaining与linking。
而且也拥有128个paramSet。
其实dma传送数据的原理:
dma就是不在cpu参与下把一块地址中的数据搬运到另一块地址中。
本人认为,把dma用起来就是先把dma的各参数设置好,然后设置条件启动dma传送数据,接下来就是等待dma事件以及dma完成中断。
所以DMA的配置主要包括两方面:dma参数的设置、dma触发条件的设置以及dma完成后的处理。
C6748的EDMA3虽然比一般dma较复杂,但是也不过是这三方面的设置。
C6748的EDMA3的参数配置:其实就是paramSet的配置
具体描述请看C6748datasheet(511页)
主要就是配置源地址、目的地址、一维偏移地址、二维偏移地址以及一维与二维的计数等。
C6748的EDMA3支持的dma触发传输有三种:
1>事件触发
2>手动触发
3>chaining触发
C6748的EDMA3完成后的设置:主要是设置清中断以及更新paramSet参数等
以上paramSet的设置、触发EDMA3传输的设置以及EDMA3传输完成后的处理,这三方面进行合理的配置可以完成很多复杂的传输,发挥你的想象力以及创造力吧。
裸机跑的程序配顺序如下:
本文属于本人个人看法,有不对的地方,望指正! 欢迎转载,转载请注明出处!
阅读(6554) | 评论(0) | 转发(0) |