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

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

暂无评论

发表评论

相关推荐

AXI DMA IP核操作流程

直接寄存器模式 访问DMACR,SA,DA,length寄存器初始化DMA传输,当传输完成,相关通道的DMASR.IOC_Irq有效(前提是使能该中断&#xf

4.8 51单片机-PCF8591(ADC/DAC)转换芯片

4.8 PCF8591(ADC/DAC)转换芯片 4.8.1 原理图 当前实验板上没有PCF8591芯片,这里采用外接模块的形式使用。 图4-8-1 PCF8591模块实物图 图4-8-2 原理图 通过原理图得到的重要信息:

基础实验——485传感器修改地址

RS-485仅是一个电气标准,描述了接口的物理层,像协议、时序、串行或并行数据以及链路全部由设计者或更高层协议定义。 RS-485定义的是使用平衡(也称作差分)多点传输线的驱动器&#xff