加班猫

如果我那天发财了,我会告诉你,我比你强的地方就是,我知道你不知道,你知道的都是废话。

ZYNQ的VDMA设计详解

0
阅读(3071) 评论(2)

破解BFM文件。

vivado_2014_4_2015_2_64bit .rar


把helloworld.c里的代码修改如下:

#include <stdio.h>#include "platform.h"#include "xil_io.h"int main()
   {
        
        init_platform();

        
        xil_printf("----------The test is start......----------\n\r");        
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x4); //reset   S2MM VDMA Control Register
       
       usleep(10);
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x8); //genlock
            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, 0x08000000);//S2MM Start Addresses
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+4, 0x0A000000);        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+8, 0x09000000);        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 1920*3);//S2MM Horizontal Size
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 0x01002000);//S2MM Frame Delay and Stride
         
         Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x3);//S2MM VDMA Control Register
       
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 1080);//S2MM Vertical Size  start an S2MM transfer

        
        //AXI VDMA1
        
         Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x4); //reset   MM2S VDMA Control Register
       
        usleep(10);
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x8); //gen-lock

              
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C,   0x08000000);   //MM2S Start Addresses
        
               
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+4, 0x0A000000);
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+8, 0x09000000);
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 1920*3);//MM2S HSIZE Register
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 0x01002000);//S2MM FRMDELAY_STRIDE Register 1920*3=5760 对齐之后为8192=0x2000
        
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x03);//MM2S VDMA Control Register
       
        Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 1080);//MM2S_VSIZE    启动传输

        
        cleanup_platform();
        
        return 0;
    }
    
    
    
    是不是觉得有点不一样的代码。如果你的GP的总线速度高于50M时候,你必须要用usleep函数,否则复位后的设定是无效的。千万记住这个。


  1. 猫哥,S2MM接口的s_axis_s2mm_tready信号一直为0,是什么原因啊

  2. 然后呢?猫哥。