ZYNQ踩坑日记2 AXI_DMA传输问题—续

ADC IP信号线

        AXIS协议,DEVICE_TO_DMA模式,DMA先拉高READY信号然后,ADC一直拉高VALID信号,当这两个信号同时拉高时数据传输,ADC将LAST信号拉高时传输完成。

        在上一次让FPGA工程师修改LAST信号计数后,仍然出现了问题,DMA在LAST拉高后并没有立即拉低READY信号,导致有四个数据进入DMA的缓冲区。

        关于使用AXI_DMA使用的问题,我实现的功能是使用AXI_DMA采集ADC数据写入DDR,每次数据包128个,数据包大小64bit,但是AXI总线在LAST信号拉高之后,并没有立即拉低READY信号,而是又接收了4个时钟数据然后拉低,并且这4个时钟数据并没有写入DDR,仍然存在DMA的缓冲数组中,在下一次传输开始时,这4个时钟数据会最开始写入,然后重复这个过程。

        这是最初从ADC传过来的数据,可以看到,REDAY信号在4个数据包发送过来之后拉低,在我开启DMA传输之后再次拉高,然后在最上面的read_pointer计数到127时,ADC把LAST信号拉高,按理来说,此时这一轮数据已经传输完成,可是DMA并没有将READY信号拉低,在又接收了四个数据后拉低,于是导致这4个数据变成我下一轮DMA传输的前四个数据,最终让我写入DDR的数据在第四个数据这里断开了。

        头痛,暂时放弃。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zynq SoC 上,AXI DMA(Direct Memory Access)是一种能够在外设和存储器之间进行高速数据传输的IP核。Cyclic DMA 模式允许通过循环传输数据,从而实现连的数据流。下面是一些关于在 Zynq SoC 上编程 AXI DMA 的基本步骤: 1. 配置 AXI DMA IP:首先,在 Vivado 中配置和实例化 AXI DMA IP 核,并连接到 Zynq SoC 的 PS(Processing System)部分。确保正确连接 AXI DMA号和端口,包括数据输入/输出端口、中断线和控制寄存器。 2. 设置 DMA 控制寄存器:使用 AXI DMA 的控制寄存器来配置 DMA 的工作模式和参数。在 Cyclic DMA 模式下,你需要设置循环传输模式,并指定传输的数据长度和起始地址。 3. 配置 DMA 缓冲区:为 DMA 设置输入和输出缓冲区。这些缓冲区将用于在外设和存储器之间传输数据。 4. 启动 DMA 传输:通过设置 AXI DMA 控制寄存器中的位来启动数据传输。在 Cyclic DMA 模式下,你可以选择是否在每次传输完成后自动重启传输。 5. 处理中断:如果需要,在 AXI DMA 完成传输时,你可以使用中断机制来通知处理器。在中断处理程序中,你可以执行必要的操作,如处理传输的数据或触发下一次传输。 需要注意的是,以上步骤只是一个基本的框架,具体的实现可能因应用需求而有所差异。你可以参考 Xilinx 提供的文档和示例代码来详细了解 AXI DMA 的编程和配置方法。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值