ZYNQ笔记——OV5640 摄像头 HDMI 显示

OV5640 摄像头 HDMI 显示

系统框图及数据流介绍

在这里插入图片描述

数据流

(1)PS端通过SCCB接口驱动OV5640摄像头(SCCB 端口是通过 EMIO 连接至 PS 中)。OV5640图像采集是我们自定义的 IP 核,负责将 OV5640的数据转成视频流数据。
(2)视频流数据经过 Video in to AXI4-Stream IP 核转换成 AXI4-Stream IP 格式数据流,然后通过 VDMA 的写通道转成 AXI4 Memory Map 格式,并最终写入 DDR 内存中。VDMA 通过 AXI Smartconnect IP 核与 AXI_HP 端口进行连接,从而高效访问 DDR3。(3)VDMA 从 DDR3 中读取的视频或图像数据传输给 AXI4-Stream to Video Out IP 核。AXI4-Stream to Video Out IP 核在 VTC IP 核的控制下,把 AXI4-Stream 格式的数据转换成视频输出的数据格式(如 RGB888),并将输出的视频数据流连接至DVI Transmiter 核的输入端,从而驱动 HDMI 接口。

HDMI 介绍

        HDMI 是新一代的多媒体接口标准,英文全称是 High-Definition Multimedia Interface,即高清多媒体接 口。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。

        DVI 和 HDMI 接口协议在物理层使用 TMDS 标准传输音视频数据。TMD(Transition Minimized Differential Signaling,最小化传输差分信号)是美国 Silicon Image 公司开发的一项高速数据传输技术,在 DVI 和 HDMI 视频接口中使用差分信号传输高速串行数据。

TMDS 视频传输协议

在这里插入图片描述

TMDS流程

        RGB颜色分量(各8位)——>编码器(Encoder)来转换成一个10位的像素字符——>并串转换器(Serializer)转换成串行数据——>TMDS通道发送

        TMDS 连接从逻辑功能上可以划分成两个阶段:编码和并串转换。
在编码阶段,编码器将视频源中的像素数据、HDMI 的音频/附加数据,以及行同步和场同步信号分别编码成10 位的字符流。(前 8 位数据由原始信号经运算后获得,第 9 位表示运算的方式,1 表示异或 0 表示异或非。经过 DC 平衡后(第 10 位),采用差分信号传输数据。第 10 位实际是一个反转标志位,1 表示进行了反转而 0 表示没有反转,从而达到 DC 平衡。)
并串转换阶段将上述的字符流转换成串行数据流,并将其从三个差分输出通道发送出去。

连线后的 Block Design 如下图所示:
在这里插入图片描述

SDK设计

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include "xil_types.h"
5 #include "xil_cache.h"
6 #include "xparameters.h"
7 #include "xaxivdma.h"
8 #include "xaxivdma_i.h"
9 #include "display_ctrl_hdmi/display_ctrl.h"
10 #include "vdma_api/vdma_api.h"
11 #include "emio_sccb_cfg/emio_sccb_cfg.h"
12 #include "ov5640/ov5640_init.h"
13 
14 //宏定义
15 #define DYNCLK_BASEADDR XPAR_AXI_DYNCLK_0_BASEADDR //动态时钟基地址
16 #define VDMA_ID XPAR_AXIVDMA_0_DEVICE_ID //VDMA 器件 ID
17 #define DISP_VTC_ID XPAR_VTC_0_DEVICE_ID //VTC 器件 ID
18 
19 //全局变量
20 //frame buffer 的起始地址
21 unsigned int const frame_buffer_addr = (XPAR_PS7_DDR_0_S_AXI_BASEADDR
22 + 0x1000000);
23 XAxiVdma vdma;
24 DisplayCtrl dispCtrl;
25 VideoMode vd_mode;
26 
27 int main(void)
28 {
29 u32 status;
30 u16 cmos_h_pixel; //ov5640 DVP 输出水平像素点数
31 u16 cmos_v_pixel; //ov5640 DVP 输出垂直像素点数
32 u16 total_h_pixel; //ov5640 水平总像素大小
33 u16 total_v_pixel; //ov5640 垂直总像素大小
34 
35 cmos_h_pixel = 1280; //设置 OV5640 输出分辨率为 1280*720
36 cmos_v_pixel = 720;
37 total_h_pixel = 2570;
38 total_v_pixel = 980;
39 
40 emio_init(); //初始化 EMIO
41 status = ov5640_init( cmos_h_pixel, //初始化 ov5640
42 cmos_v_pixel,
43 total_h_pixel,
44 total_v_pixel);
45 if(status == 0)
46 xil_printf("OV5640 detected successful!\r\n");
47 else
48 xil_printf("OV5640 detected failed!\r\n");
49 
50 vd_mode = VMODE_1280x720;
51 
52 //配置 VDMA
53 run_vdma_frame_buffer(&vdma, VDMA_ID, vd_mode.width, vd_mode.height,
54 frame_buffer_addr,0,0,BOTH);
55 //初始化 Display controller
56 DisplayInitialize(&dispCtrl, DISP_VTC_ID, DYNCLK_BASEADDR);
57 //设置 VideoMode
58 DisplaySetMode(&dispCtrl, &vd_mode);
59 DisplayStart(&dispCtrl);
60 
61 return 0;
62 }

Reference

正点原子ZYNQ之嵌入式指南

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值