名称:OV5640摄像头显示设计Verilog代码Quartus AX301开发板
软件:Quartus
语言:Verilog
代码功能:
本实验将采用 500 万像素的 OV5640 摄像头模组(模块型号:AN5640)为大家显示更高分辨率的视频画面。OV5640 摄像头模组最大支持 QSXGA (2592x1944)的拍照功能,支持 1080P、720P、VGA、QVGA 视频图像输出。本实验将 OV5640 配置为 RGB565 输出,先将视频数据写入外部存储器,再从外部存储器读取送到 VGA、LCD 等显示模块。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
OV5640 摄像头显示例程
1 实验简介
本实验将采用 500 万像素的 OV5640 摄像头模组(模块型号:AN5640)为大家显示更高分辨率的视频画面。OV5640 摄像头模组最大支持 QSXGA (2592x1944)的拍照功能,支持 1080P、720P、VGA、QVGA 视频图像输出。本实验将 OV5640 配置为 RGB565 输出,先将视频数据写入外部存储器,再从外部存储器读取送到 VGA、LCD 等显示模块。
2 实验原理
2.1 OV5640 传感器简介
OV5640 摄像头模组采用美国 OmniVision(豪威)CMOS 芯片图像传感器 OV5640,支持自动对焦的功能。OV5640 芯片支持 DVP 和 MIPI 接口,本实验所用 OV5640 摄像头模组通过 DVP 接口和 FPGA 连接实现图像的传输。
2.1.1 OV5640 的参数说明
像素:硬件像素 500W;
感光芯片:OV5640;
感光尺寸:1/4;
功能支持:自动对焦, 自动曝光控制(AEC),自动白平衡(AWB);
图像格式 : RAW RGB, RGB565/555/444, YUV422/420 和 JPEG 压缩;
捕获画面:QSXGA(2592x1944),1080p,1280x960,VGA(640x480),QVGA(320x240)
工作温度:-30~70℃, 稳定工作温度为 0~50℃
2.1.2 OV5640 的寄存器配置
OV5640 的寄存器配置是通过 FPGA 的 I2C 接口来配置。用户需要配置正确的寄存器值让 OV5640 输出我们需要的图像格式,实验中我们把摄像头输出分辨率和显示设备分辨率配置成一样的,OV5640 的摄像头输出的数据格式在以下的 0x4300 的寄存器里配置,在我们的例程中 OV5640 配置成 RGB565 的输出格式。
关于 OV5640 的寄存器还有很多很多,但很多寄存器用户无需去了解,寄存器的配置用户可 以按照 OV5640 的应用指南来配置就可以了。如果您想了解更多的寄存器的信息,可以参考 OV5640 的 datasheet 中的寄存器说明。
2.1.3 OV5640 的 RGB565 输出格式
OV5640 在 HREF 信号为高时输出一行的图像数据,输出数据在 PCLK 的上升沿的时候有效。 因为 RGB565 显示每个像数为 16bit, 但 OV75640 每个 PCLK 输出的是 8bit,所以每个图像的像数分两 次输出,第一个 Byte 输出为 R4~R0 和 G5~G3, 第二个 Byte 输出为 G2~G0 和 B4~B0,将前后 2 个 字节拼接起来就是 16Bit RGB565 数据。
3 程序设计
前面的实验已经为本实验做了大量的铺垫,包括 I2C 寄存器的配置、外部存储器的读写,本程序一个比较关键的地方在于视频同时读写,如果做到读写不冲突?在设计帧读写模块时就已经考虑到这点,所以有帧基地址选择,最大 4 帧选择,每次读视频帧地址和正在写的帧地址是不同的,而是上次写入的帧地址,这样就可以避免读写冲突,避免视频画面裂开错位。
cmos_8_16bit 模块完成输入 8bit 数据到 16bit 数据,数据位宽变成 2 倍,时钟频率不变,所以 16bit 数据是隔一个时钟周期有效,并不是一直有效。
| 信号名称 | 方向 | 说明 |
| rst | in | 异步复位输入,高复位 |
| pclk | in | 传感器像素时钟输入 |
| pdata_i | in | 传感器 8bit 数据输入 |
| de_i | in | 数据有效(HREF) |
| pdata_o | out | 16bit 数据输出 |
| hblank | out | de_i 延时一个时钟周期 |
| de_o | out | 数据输出有效 |
cmos_8_16bit 模块端口
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// // CMOS sensor 8bit data is converted to 16bit data // // // // Author: meisq // // msq@qq.com // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // ////////////////////////////////////////////////////////////////////////////////// // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // ////////////////////////////////////////////////////////////////////////////////// //================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- // 2017/7/19 meisq 1.0 Original //*******************************************************************************/
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1355
1029