AXI DMA数据对齐

在AD7989数据采集过程中,通过AXI DMA将数据传输至DDR3时遇到数据对齐问题。AXI DMA在接收Stream Data时多传输了一个数据,导致每个packet包含1025个数据而非预期的1020个。解决方法是调整TVALID信号的控制,避免在读取指针为0时传输额外的数据。这确保了正确对齐,防止了数据丢失或错误。
摘要由CSDN通过智能技术生成

    查看PG-021知道,AXI DMA采用小端对齐,即高字节放在高地址,低字节放在低地址。在做AD7989数据采集时,要完成如下要求:

  (1) AD采回的数据打包,一个packet包含1020个采集点(32位),接着用4个字(4Byte)来描述包的信息,包括通道号、块号(相当于packet号)、trig信号的位置(每个packet至多有一个trig信号)、crc校验码。

  (2) 将每个packet的通过AXI DMA传送到DDR3中。

在做各部分时,发现了如下现象,当时没想明白,后来懂了。我们知道,AXI DMA在接收Stream Data时是这样做的(S2MM -- RxSetup()):

  1) 配置DMA      

XAxiDma_Config *Config;
Config = XAxiDma_LookupConfig(DMA_DEV_ID);
if (!Config) 
{
    xil_printf("No config found for %d\r\n", DMA_DEV_ID);
    return XST_FAILURE;
}
/* Initialize DMA engine */
XAxiDma_CfgInitialize(&AxiDma, Config);

  2) 设置DMA接收数据通道,启动DMA接收数据:RxSetup()

XAxiDma_BdRing *RxRingPtr;
XAxiDma_Bd *BdPtr;
XAxiDma_Bd *BdCurPtr;
int BdCount;
int FreeBdCount;
u32 RxBufferPtr;
RxRingPtr = XAxiDma_GetRxRing(&a
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值