ZedBoard Linux I2C Driver + VDMA使用

http://www.wiki.xilinx.com/Linux+I2C+Driver


https://github.com/Xilinx/device-tree-xlnx/releases

VDMA的使用

https://blog.csdn.net/RZJMPB/article/details/50516181

在ZYNQ体系中,DDR控制器处于PS部分,所以PL必须通过AFI接口来使用ddr资源。在图像系统中,帧缓存是必要的,但是PL部分可用的BRAM十分有限,且是实现其他逻辑的关键资源,不宜作为帧缓存使用,在图像分辨率高时,其大小也不够,所以一个完备的图像系统必然需要使用DDR作为帧缓存介质。

为了实现高效传输,对于大量数据通常使用DMA(Direct Memory Acces)进行,为了PL端与PS的通信,Xilinx官方提供了AXIDMA,AXI VDMA IP,使PL可以通过AFI接口直接访问DDR,这些DMA的IP对外部输入输出均为AXI Stream流协议

VDMA是DMA针对视频传输的改进版本,不同之处在于它加入了自动循环和自动切换帧缓存地址的功能。因为在很多系统中,图像输入速率不一定能与输出速率匹配,且有时需要对图像作一些处理,导致该空间不能被送显,所以一个完整的图像系统中通常有多个帧缓存,来保证输出数据不会被撕裂。VDMA可以最多支持32个帧缓存,并且经过配置能够自动的在各个帧存之间进行切换,并自动互相避让,从而保证图像稳定。

       VDMA硬件部分配置比较简单,基础部分只需要选择好对应的stream流数据宽度,所需的帧缓存个数即可。值得注意的是同步信号的配置。如图,由于输入端是采用视频流协议中的tuser作为同步信号的,所以选择s2mm tuser,而输出端默认采用视频流协议,不采用额外手段同步,所以配置为None即可。关键点在于GenLock Mode,及输入输出时序匹配模式,图中为推荐配置,及动态选择关系。如此配置VDMA输入输出端会自动避让,如果输入帧数与输出帧数相同可以尝试其他配置,但不同时必须采取如下配置,此配置风险小,兼容性更高。

VDMA主要端口有5个:

              S_AXI_Lite:寄存器、配置接口,用于软件配置VDMA,并读取状态信息

              S_AXIS_S2MM:视频流从端,接收外来视频流数据

              M_AXI_MM2S:AXI4全协议主端,从DDR中读取数据给M_AXIS_MM2S

              M_AXI_S2MM:AXI4全协议主端,从DDR中读取数据给S_AXIS_S2MM

              M_AXIS_MM2S:视频流主端,向外发送视频流数据

其中5个总线接口最好采用同一总线频率,其中除了两个Stream接口与视频输入输出设备相连外,其他均与PS相连(需在PS端使能至少一个一个AFI接口)。

       VDMA配置比较简单,除了分配帧缓存地址外,只需要配置两个寄存器0x00和0x30,分别对应输出配置和输入配置,在动态模式下,均配置为0x8b即可,具体可以查阅官方手册。

#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
        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
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值