OV5640摄像头的采集显示二#
实验Vivado工程为“ov5640_dual”。
前面的教程我们讲解了双目摄像头模块AN5642的使用,但是我们只用了其中一路,无法发挥双目摄像头的优势。近几年双目应用飞速发展,在3D视觉、VR、视频智能分析,工业自动化等领域都有广泛使用,但双目应用往往对系统计算性能、接口扩展性灵活性有很高的要求,目前还没有asic或soc能解决双目应用的一系列问题,zynq集成了FPGA和arm,为双目应用的前期方案验证带来了极大的方便。
双目和单目摄像头开发的区别#
单目摄像头工程我们使用2个VDMA解决视频数据的输入输出问题,双目就需要4个VDMA,这个时候输出到HDMI的时候就有很大的不同,我们采取视频层叠加的方式,这样可以把2路VDMA输出的AXI-Stream合并为一路叠加的AXI-Stream,再送到显示模块显示,因为增加了一路,这里要控制好ddr的数据带宽,这里使用HP0和HP1端口,2 * 64bit * 150Mhz,完全满足2路视频输入输出的带宽要求。
硬件环境搭建#
先看一下zynq系统的整体框图,这里面和单目相比多出了2个VDMA,还有一个重要的OSD模块。
设计好后的vivado工程如下图所示:
由于整个系统是基于前面教程一步一步建立起来的,这里不再讲述已经讲过的,仅仅说一下Video On Screen Display这个IP的设置,首先这里没有启用AXI4-Lite的控制,配置参数都是静态的。 Video Format选择RGB,Video Compoment Width选择8,Maximum Screen Width 填写1920,因为我们输出分辨率设置为1920x1080。
在Screen Layout Options选项卡中的Background Size(背景层)设置为1920x1080和输出分辨率要完全一致,否则不能正常使用。视频层参数的设置,包括上下偏移量,层的大小,以及透明度的设置。Background Color 设置为纯蓝,可能大家在这里有些疑问,明明设置的是绿色,为什么说是蓝色呢,这里牵涉到OSD的数据格式,是按照RBG显示的,而我们给OSD的数据是按RGB格式的,因此实质上设置的背景颜色的G被映射到了图像数据RGB的B上,所以显示为蓝色。
还有一点要修改的是,将两个IIC都设置成EMIO输出,配置两个cmos sensor。
以及cmos的复位宽度改为2
软件Vitis的编写#
生成bit文件,然后导出硬件,运行Vitis,新建工程dual_ov5640_test,把我们事先准备的vitis文件下的源文件粘贴进来。
和前面单目应用程序的区别也很大,我们修改了一个关键的地方,在display_ctrl.h的DisplayCtrl中的结构体,我们把部分成员设置为数组了,这样可以适应多个VDMA的情况,修改完这个结构体以后很多相关的代码也要修改。
typedefstruct {
u32dynClkAddr; /*Physical Base address of the dynclk core*/
XAxiVdma *vdma[DISPLAY_NUM_VDMA]; /*VDMA driver struct*/
XAxiVdma_DmaSetupvdmaConfig[DISPLAY_NUM_VDMA]; /*VDMA channel configuration*/
XVtcvtc; /*VTC driver struct*/
VideoModevMode; /*Current Video mode*/
u8 *framePtr[DISPLAY_NUM_VDMA][DISPLAY_NUM_FRAMES]; /* Array of pointers to the framebuffers */
u32stride[DISPLAY_NUM_VDMA]; /* The line stride of the framebuffers, in bytes */
doublepxlFreq; /* Frequency of clock currently being generated */
u32curFrame[DISPLAY_NUM_VDMA]; /* Current frame being displayed */
u16HoriSizeInput[DISPLAY_NUM_VDMA];
u16VertSizeInput[DISPLAY_NUM_VDMA];
DisplayStatestate; /* Indicates if the Display is currently running */
} DisplayCtrl;
还有输出分辨率的修改,在单目应用中,我们输出分辨率是1280x720,这里改为1920x1080。修改关键点如下图:
板上验证#
在Vitis中run As选项如下面的图中所示:
程序运行以后,HDMI显示器显示两个摄像头的视频图像。
AX7Z035/AX7Z100硬件连接图
显示效果