单片机/MCU论坛
直播中

sunshine_hua

5年用户 49经验值
擅长:控制/MCU
私信 关注
[文章]

AG32:dma在cpld中的使用

cpld中实现DMA的逻辑:

  1. Mcu为master,cpld为slave,mcu对cpld的交互方式为存取寄存器的方式;
  2. mcu中配置好DMA(读取cpld中准备好的数据);
  3. cpld中准备好数据后,触发dma信号,dma自动搬运到mcu指定的ram;
  4. 搬运一次后,dma给cpld一个clear信号,完成一次dma搬运;
  5. 等到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读取

在这个样例中,展示了两部分代码:

  1. mcu中,配置dma读取;为了测试,mcu会在另一地址给cpld写数据;
  2. cpld中,会对mcu写进来的数据缓存,缓存后触发dma的信号,让dma来读取数据。而dma从cpld里读取数据后会给cpld一个clear信号,标志一次dma交互完成。

更多信息参考工程 源码及注释。

更多回帖

发帖
×
20
完善资料,
赚取积分