米联客例程:03PL发数据到PS方案(DMA)
想完成pl端数据放到ps端指定的ddr地址。
参考文章:AXI DMA详解与应用篇 |第一讲-腾讯云开发者社区-腾讯云 (tencent.com)
问题1:为什么发完16次传输之后就不再传输了?
问题1.1:他是怎么传输的?
答1.1:ps端初始化系统、gpio、中断、DMA后(开启dma中断),拉高gpio_start;pl端数据开始发送,dmaAXI_DMA_control发出中断信号给到ps端;ps端收到中断信号进入回调函数。
答1:因为在传完16次传输后有 DMA_Intr_Init(&AxiDma,0); 函数初始化了中断。此时的DMA_Intr出去disable的状态。需要在合适位置调用 DMA_Intr_Enable(&Intc,&AxiDma); //使能DMA中断 函数。问题2:例程中pl端中断信号由米联客自己的IP核ui_axisbufw产生,怎么自由控制中断?(发送完定长数据例程中为1M个数据,axis_last信号被置高后axi-dma发出中断)
答2:别去自由控制,让IP核自己控制输出中断就行。数据传输不够会补零发送
问题3:怎么从接收固定字长变接收不固定字长?
答3:固定字长就行,先试试补零后的数据能不能直接拿去升级程序。
插入:IP核ui_axisbufw的使用:1、引脚介绍 2、备注
ui_rstn:复位引脚低有效,由ps端控制;
W_FS_i:状态机发送一包数据的使能引脚,ps端控制;
W_wclk_i:写数据端(pl端)时钟;
axis_clk:axi时钟;
W_wren_i:写入fifo使能引脚;
W_data_i:写入的数据;
ui_axisbufw ip核自带一个可设定大小的fifo,在例程中深度设置为8Mb。
问题4:为什么dma在传小于10971字节数据时,s2mm_introut引脚有中断输出;大于10971字节时则没有?
答4:因为dma是Direct Register模式,该模式下传输的数据需要满足dma的突发长度(2^n,最小是2)因此需要对输入数据进行补长。