zoukankan      html  css  js  c++  java
  • S03_CH07_AXI_VDMA_OV5640摄像头采集系统

    S03_CH07_AXI_VDMA_OV5640摄像头采集系统

    7.1概述

    本章内容和《S03_CH06_AXI_VDMA_OV7725摄像头采集系统》只是摄像头采用的分辨率不同,其他原理都一样,由于在《S03_CH06_AXI_VDMA_OV7725摄像头采集系统》中详细介绍了VDMA的原理,如果读者只是购买了OV5640,可以回到《S03_CH06_AXI_VDMA_OV7725摄像头采集系统》仔细阅读VDMA的基础知识。

    7.2 搭建VDMA图像系统

    7.2.1构架方案图

    wps7753.tmp

    可以看到VMDA的图像系统和前面介绍的DMA系统相比非常类似。实际上他们都是属于DMA系统,只是VDMA在配置完成后,可以无需依赖CPU可以独立运行,有点类似显卡的功能了。

    7.2.2构BLOCK模块化设计方案图

    wps7754.tmp

    7.3 PS部分

    本课程提供了二种方式启动VDMA,第一种是通过库函数版本,第二种是通过寄存器版本。寄存器版本主要是验证我们对VDMA的寄存器掌握情况。库函数具备更强的功能,和可维护性。和OV7725相比,这里的分辨率设置为1280X720

    表6-6-1

    #include "sys_intr.h"

    #include "xaxivdma.h"

    #include "xaxivdma_i.h"

    #define VTC_BASEADDR XPAR_MIZ702_VTG_VGA_0_BASEADDR

    #define DDR_BASEADDR        0x00000000

    //#define UART_BASEADDR       0xe0001000

    #define VDMA_BASEADDR       XPAR_AXI_VDMA_0_BASEADDR

    #define H_STRIDE            1280

    #define H_ACTIVE            1280

    #define V_ACTIVE            720

    #define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ)/64

    #define VIDEO_LENGTH  (H_STRIDE*V_ACTIVE)

    #define VIDEO_BASEADDR0 DDR_BASEADDR + 0x2000000

    #define VIDEO_BASEADDR1 DDR_BASEADDR + 0x3000000

    #define VIDEO_BASEADDR2 DDR_BASEADDR + 0x4000000

    u32 *BufferPtr[3];

    unsigned int srcBuffer = (XPAR_PS7_DDR_0_S_AXI_BASEADDR  + 0x1000000);

    int run_triple_frame_buffer(XAxiVdma* InstancePtr, int DeviceId, int hsize,

    int vsize, int buf_base_addr, int number_frame_count,

    int enable_frm_cnt_intr);

    int main(void)

    {

    u32 Status;

    Miz702_EMIO_init();

    ov7725_init_rgb();

    XAxiVdma InstancePtr;

    xil_printf("Starting the first VDMA ");

    Status = run_triple_frame_buffer(&InstancePtr, 0, 1280, 720,

    srcBuffer, 2, 0);

    if (Status != XST_SUCCESS) {

    xil_printf("Transfer of frames failed with error = %d ",Status);

    return XST_FAILURE;

    } else {

    xil_printf("Transfer of frames started ");

    }

    print("TEST PASS ");

    //VDMA configurateAXI VDMA0

    /****************往DDR写数据设置**********************/

    /*Xil_Out32((VDMA_BASEADDR + 0x030), 0x00000003);// enable circular mode

    Xil_Out32((VDMA_BASEADDR + 0x0AC), VIDEO_BASEADDR0); // start address

    Xil_Out32((VDMA_BASEADDR + 0x0B0), VIDEO_BASEADDR1); // start address

    Xil_Out32((VDMA_BASEADDR + 0x0B4), VIDEO_BASEADDR2); // start address

    Xil_Out32((VDMA_BASEADDR + 0x0A8), (H_STRIDE*4)); // h offset (640 * 4) bytes

    Xil_Out32((VDMA_BASEADDR + 0x0A4), (H_ACTIVE*4)); // h size (640 * 4) bytes

    Xil_Out32((VDMA_BASEADDR + 0x0A0), V_ACTIVE);*/ // v size (480)

    /*****************从DDR读数据设置**********************/

    /*Xil_Out32((VDMA_BASEADDR + 0x000), 0x00000003); // enable circular mode

    Xil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR0); // start address

    Xil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR1); // start address

    Xil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR2); // start address

    Xil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*4)); // h offset (640 * 4) bytes

    Xil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*4)); // h size (640 * 4) bytes

    Xil_Out32((VDMA_BASEADDR + 0x050), V_ACTIVE); // v size (480)

    */

    while (1) ;

    return XST_SUCCESS;

    }

    7.4 测试结果

    wps7765.tmp

  • 相关阅读:
    c#设计模式(1)——单例模式
    Javascript变量
    悲观锁和乐观锁
    NestJs 环境 配置
    分布式查询
    Git hub 忽略 文件 、文件夹
    ES6 基础 二
    ES6 基础 一
    invalid credential, access_token is invalid or not latest hint(微信 上传图片返回 error)
    nodejs 入门一(环境及插件)
  • 原文地址:https://www.cnblogs.com/milinker/p/6484284.html
Copyright © 2011-2022 走看看