分享下PS与PL之间数据传输比较另类的实现方式,实现目标是:
1、传输时数据不能滞留在一端,无论是1个字节还是1K字节都能立即发送;
2、PL端接口为FIFO接口;
PS到PL的数据传输流程:
PS到PL的数据传输相对简单,使用vivado自带的axi_datamover即可完成,详细如下:
A、向PL端查询剩余数据存储长度(以byte为单位);
B、通过写寄存器设置PL端DMA数据传输开始地址;
C、通过写寄存器设置PL端DMA数据传输长度(以byte为单位);
D、通过写寄存器启动PL端DMA传输;
E、通过读寄存器查询PL端DMA是否完成数据传输;
PS(ARM)端驱动代码如下:
#define WRITE_SPACE_REG0x84000004
#define ps2pl_SA0x84000008
#define ps2pl_LENGTH0x8400000C
#define ps2pl_START0x84000010
#define ps2pl_FINISHED0x84000014
data_space=Xil_In32(WRITE_SPACE_REG);
void init_axi_dma_simple_write(u32 num)
{
Xil_Out32(ps2pl_SA,(unsigned int )recvram);
Xil_Out32(ps2pl_LENGTH,(0x80000000+num));
<