AXI DMA IP核操作流程

  • 直接寄存器模式

访问DMACR,SA,DA,length寄存器初始化DMA传输,当传输完成,相关通道的DMASR.IOC_Irq有效(前提是使能该中断,DMACR.IOC_IrqEn使能)。

MM2S 通道启动流程:

  1. MM2S_DMACR.RS=1,运行DMA
  2. 使能MM2S_DMACR.IOC_IrqEn 和MM2S_DMACR.Err_IrqEn
  3. 配置有效的MM2S_SA和MM2S_SA_MSB寄存器
  4. 写非零的数值到MM2S_LENGTH寄存器,启动读DDR发送至AXIS端口。该数值为读取内存的字节数量

S2MM通道启动流程:

  1. S2MM_DMACR.RS=1,运行DMA
  2. 使能S2MM_DMACR.IOC_IrqEn 和S2MM_DMACR.Err_IrqEn
  3. 配置有效的S2MM_DA和S2MM_SA_MSB寄存器
  4. 写非零的数值到S2MM_LENGTH寄存器,启动AXIS端口数据写入DDR。此数值需要大于等于一包数据的字节数。

在直接寄存器模式下,上述启动流程需要循环使用,每读写一次,均需要重新配置以上寄存器。

每个流程的结束,会产生中断告知CPU数据操作完成,需要CPU清除IOC_Irq寄存器中断标志。

  • SG模式

配置控制寄存器和描述符之后,SG模式启动。可以极大的提高DMA性能。

MM2S通道启动流程:

  1. 配置MM2S_CURDESC和MM2S_CURDESC_MSB寄存器,写入开始操作符的地址。
  2. 配置MM2S_DMACR.RS=1,运行DMA
  3. 寄存器MM2S_DMACR.IOC_IrqEn 和MM2S_DMACR.Err_IrqEn使能
  4. 配置MM2S_TAILDESC和MM2S_TAILDESC_MSB,此时DMA启动读取内存中的描述符
  5. DMA自动处理操作符并读取内存数据通过AXIS端口输出

S2MM通道启动流程:

  1. 配置S2MM_CURDESC和S2MM_CURDESC_MSB寄存器,写入开始操作符的地址。
  2. 配置S2MM_DMACR.RS=1,运行DMA
  3. 寄存器S2MM_DMACR.IOC_IrqEn 和S2MM_DMACR.Err_IrqEn使能
  4. 配置S2MM_TAILDESC和S2MM_TAILDESC_MSB,此时DMA启动读取内存中的描述符
  5. DMA自动处理操作符并接收AXIS端口数据写入内存中

每个流程结束(DMA接收到带有EOF的操作符),DMA产生中断至CPU,需要CPU清除IOC_Irq寄存器中断标志,重新操作上述流程。

  • 循环DMA模式

此模式下,DMA可以处理相同的缓冲描述符,并不产生中断。此模式下DMA持续工作,除非出现异常停止或者复位。

此模式的关键是,tail描述符指向first描述符。设置Cyclic BD Enable为1(需要在DMA运行之前配置)。

其余流程与SG模式一致。

版权声明:本文为CSDN博主「yindq1220」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yindq1220/article/details/122448292

生成海报
点赞 0

yindq1220

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

74HC138译码器的原理和使用

前言 译码器就是将每个输入的二进制代码译成对应的输出高低电平信号,和编码器互为逆过程。 百度百科 74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL&#xf

驱动led --GPIO控制

GPIO引脚操作方法概述 硬件知识_LED原理图不同主芯片控制GPIO引脚的方法概述具体单板控制GPIO引脚的方法详解具体单板LED程序的编写与实验汇编与机器码编程知识_进制编程知识_字节序_位操作编写C程序控制LED解析C程序的内部机制完善