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构架方案图

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

7.2.2构BLOCK模块化设计方案图


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 \n\r");

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\r\n",Status);

return XST_FAILURE;

} else {

xil_printf("Transfer of frames started \r\n");

}

print("TEST PASS\r\n");

//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 测试结果

最新文章

  1. Azure PowerShell (10) 使用PowerShell导出订阅下所有的Azure VM和Cloud Service的高可用情况
  2. 基于Qt5.5.0的sql,C++备忘录软件的编写
  3. 《android基于andFix的热修复方案》实战篇
  4. Git 忽略一些文件不加入版本控制
  5. 2013 Multi-University Training Contest 1 Partition
  6. AppiumLibrary
  7. Thread和Runnable差别
  8. sql server 国内外 2个同步 ,加一个表.加入同步种
  9. 多线程 Worker Thread 模式
  10. 关于ionic的一些坑(3)
  11. lsb_release 命令找不到
  12. Redis入门简述
  13. TCP/IP 免费ARP
  14. PHP下载微信头像
  15. Hadoop基础-通过IO流操作HDFS
  16. CSS_常见布局
  17. Android逆向学习资料
  18. Python之安装pip
  19. L228 the complicated issue of equality: non-disabled actors play disabled roles
  20. Python XML解析

热门文章

  1. Git 工作流
  2. SparkConf和SparkContext
  3. POM 标签大全详解
  4. Python Log Viewer
  5. jmeter -- beanshell 执行本地py文件
  6. PAT 甲级1057 Stack (30 分)(不会,树状数组+二分)*****
  7. spring redistemplate中setHashValueSerializer的设置
  8. (三)Centos之安装Xshell
  9. weblogic12.1.3安装
  10. 第三章 授权——《跟我学Shiro》