cpld中实现DMA的逻辑:
- Mcu为master,cpld为slave,mcu对cpld的交互方式为存取寄存器的方式;
- mcu中配置好DMA(读取cpld中准备好的数据);
- cpld中准备好数据后,触发dma信号,dma自动搬运到mcu指定的ram;
- 搬运一次后,dma给cpld一个clear信号,完成一次dma搬运;
- 等到cpld中再次准备好数据,将再次触发dma信号,重复3和4;
对于cpld来说,mcu来读取数据和dma来读取数据,是一致的,cpld无从区分到底是mcu来读还是dma来读。
dma来读取时,只是每次读完后会多给cpld一个clear信号。
这部分的实例代码,请参考网盘上获取:
链接:https://pan.baidu.com/s/1wcBnqnray7bu4IURDIoDDQ?pwd=1205 里边的 \cpld-fpga文档\logic样例\7.cpld中配合实现mcu的dma读取
在这个样例中,展示了两部分代码:
- mcu中,配置dma读取;为了测试,mcu会在另一地址给cpld写数据;
- cpld中,会对mcu写进来的数据缓存,缓存后触发dma的信号,让dma来读取数据。而dma从cpld里读取数据后会给cpld一个clear信号,标志一次dma交互完成。
更多信息参考工程 源码及注释。
|