【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分

文章目录

  • 写在前面
  • 目的
  • 工具
  • 一、创建项目
  • 二、步骤
    • 1.添加IP核及路径
    • 2.Create Block Design
    • 3.添加IP核及配置IP核
    • 4.Launch SDK
    • 5.代码
    • 6.Run Configurations
    • 7.结果
  • 总结


写在前面

本人是参考赛灵思官方文档、正点原子教程和网上相关内容,所有参考、转载会标明出处,希望文章对大家有所帮助,感谢各位!

本文章参考了正点原子《启明星ZYNQ之嵌入式开发指南 V1.2.3》。


目的

第一部分已经生成了 IP 核,请参考 链接 回顾。
第二部分主要是在 Vivado 中对 IP 核进行验证,并在SDK软件中实现全部功能。
【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第1张图片

工具

  • Vivado 2019.1
  • Xilinx SDK 2019.1
  • 启明星开发板(XC7Z010clg400-1)及配套下载器等
  • 正点原子OV5640摄像头模块
  • 显示屏及HDMI线
    【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第2张图片
    【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第3张图片

一、创建项目

打开 Vivado 2019.1,创建项目 ov5640_rgb2gray_ip_test。创建好之后,在项目文件夹的根目录下添加一个 ip_repo 文件夹。

二、步骤

1.添加IP核及路径

部分IP核在正点原子的相关例程里

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第4张图片
【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第5张图片

2.Create Block Design

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第6张图片

3.添加IP核及配置IP核

此部分内容请详细参考正点原子《启明星ZYNQ之嵌入式开发指南 V1.2.3》

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第7张图片

4.Launch SDK

生成比特流后,导出Hardware,启动SDK,创建新工程,src文件夹中添加文件

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第8张图片
【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第9张图片

5.代码

main.c代码
参考正点原子例程代码

#include 
#include 
#include 
#include "xil_types.h"
#include "xil_cache.h"
#include "xparameters.h"
#include "xaxivdma.h"
#include "xaxivdma_i.h"
#include "display_ctrl_hdmi/display_ctrl.h"
#include "vdma_api/vdma_api.h"
#include "emio_sccb_cfg/emio_sccb_cfg.h"
#include "ov5640/ov5640_init.h"
#include "xov5640_rgb2gray.h"
//宏定义
#define DYNCLK_BASEADDR  XPAR_AXI_DYNCLK_0_BASEADDR  //动态时钟基地址
#define VDMA_ID          XPAR_AXIVDMA_0_DEVICE_ID    //VDMA器件ID
#define DISP_VTC_ID      XPAR_VTC_0_DEVICE_ID        //VTC器件ID

//全局变量
//frame buffer的起始地址
unsigned int const frame_buffer_addr = (XPAR_PS7_DDR_0_S_AXI_BASEADDR
										+ 0x1000000);
XAxiVdma     vdma;
DisplayCtrl  dispCtrl;
VideoMode    vd_mode;
XOv5640_rgb2gray rgb2gray_inst;//du 增加

int main(void)
{
	u32 status;
	u16 cmos_h_pixel;                    //ov5640 DVP 输出水平像素点数
	u16 cmos_v_pixel;                    //ov5640 DVP 输出垂直像素点数
	u16 total_h_pixel;                   //ov5640 水平总像素大小
	u16 total_v_pixel;                   //ov5640 垂直总像素大小

	cmos_h_pixel = 1280;                 //设置OV5640输出分辨率为1280*720
	cmos_v_pixel = 720;
	total_h_pixel = 2570;
	total_v_pixel = 980;

	emio_init();                         //初始化EMIO
	status = ov5640_init( cmos_h_pixel,  //初始化ov5640
						  cmos_v_pixel,
						 total_h_pixel,
						 total_v_pixel);
	if(status == 0)
		xil_printf("OV5640 detected successful!\r\n");
	else
		xil_printf("OV5640 detected failed!\r\n");

	vd_mode = VMODE_1280x720;

	//初始化灰度转换 IP 核 OV5640_RGB2GRAY
	XOv5640_rgb2gray_Initialize(&rgb2gray_inst, XPAR_OV5640_RGB2GRAY_0_DEVICE_ID);
	//配置灰度转换 IP 核 OV5640_RGB2GRAY 的行数
	XOv5640_rgb2gray_Set_height(&rgb2gray_inst, vd_mode.height);
	//配置灰度转换 IP 核 OV5640_RGB2GRAY 的列数
	XOv5640_rgb2gray_Set_width(&rgb2gray_inst, vd_mode.width);

	//配置VDMA
	run_vdma_frame_buffer(&vdma, VDMA_ID, vd_mode.width, vd_mode.height,
							frame_buffer_addr,0,0,BOTH);
    //初始化Display controller
	DisplayInitialize(&dispCtrl, DISP_VTC_ID, DYNCLK_BASEADDR);
    //设置VideoMode
	DisplaySetMode(&dispCtrl, &vd_mode);
	DisplayStart(&dispCtrl);

    return 0;
}
 

6.Run Configurations

开发板与电脑进行串口通信,SDK中配置Run Configurations
【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第10张图片

7.结果

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第11张图片

【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分_第12张图片

视频中展示了实时的效果

ov5640_rgb2gray_hdmi


总结

这篇文章主要参考了《启明星ZYNQ之嵌入式开发指南 V1.2.3》,将其中的一些例程由原先的LCD屏换成利用HDMI的显示器进行显示。
后续还会更新其他的内容…

你可能感兴趣的:(Vivado_HLS_图像处理,fpga开发,opencv)