VDMA调试总结

本文转载自: 硬码农二毛哥微信公众号

本文介绍了VDMA调试常用方法和一些需要注意的问题。

XSCT调试
在使用Vitis调试VDMA过程中,可以通过XSCT查看寄存器状态。

打开VDMA

查看S2MM_VDMASR寄存器
mwr 0x80040034 0xFFFFFFFF //写入0xFFFFFFFF,清除状态位
mrd 0x80040034 //读出寄存器数据

DRE
通过Allow Unaligned Transfers使能Data Realignment Engine (DRE),不过不使能该功能,Start Address、Hszie和Stride必须是M_AXI_S2MM_DATA_WIDTH的倍数。

例如:memory map data width = 32, Start Address必须是 0x0, 0x4, 0x8, 0xC等,Horizontal Size 是0x4, 0x8, 0xC等, Stride是0x4, 0x8, 0xC 等。

S2MM Horizontal Size
当设置S2MM Horizontal Size 时,HISZE不是行像元个数,而是指行像元字节数。当S2MM_VDMASR 寄存器bit7、bit11、bit8、bit15置位时,可能与HISZE和VSIZE设置异常有关。

Frame Buffers大于16帧
当VDMA存储帧数大于16 时,需要同时设置S2MM_REG_INDEX和S2MM Start Addresses 寄存器。并且在IP中修改Frame Buffers值。

如果使用Vitis中封装好的函数XAxiVdma_ChannelSetBufferAddr(XAxiVdma_Channel *Channel, UINTPTR *BufferAddrSet, int NumFrames)时,当NumFrames大于16时,会使用XAxiVdma_ChannelHiFrmAddrDisable自动将S2MM_REG_INDEX置1。

中断
当VDMA使用中断时,接收到帧同步信号后,产生中断,开始接收数据,而不是接收完一帧数据产生中断。进入中断后可以通过XAxiVdma_DmaSetBufferAddr函数设置当前帧存储位置。当进行写操作时,XAxiVdma_DmaSetBufferAddr会设置PARK_PTR_REG 寄存器的8-12位WrFrmPtrRef。WrFrmPtrRef可以设置成0-31。

Memory
在VDMA调试过程中,常常通过Memory要查看内存中数据。

最新文章

最新文章