前言
OV5640图像采集显示系统的HDMI显示与RGB_TFT实验所使用的原理一致,都是通过PS侧IIC总线将图像数据传输给SiI9022a芯片,交由该HDMI芯片处理。因此本帖将不会讲述具体原理过程,只对操作步骤进行描述,给读者提供一种参考。
硬件逻辑系统设计
ACZ702和ACZ7015开发板上PS侧IIC总线通过MIO50...51引脚与HDMI芯片相连,对应I2C0外设,而在该例程中,I2C0外设被用来初始化摄像头。我们需要将I2C0外设配置为连接HDMI芯片,I2C1外设配置为连接摄像头初始化接口。

接着删除IIC_0残余的信号名,导出IIC_1引脚,将其命名为与修改前一致的信号名,例程中为OV5640_SCCB(这里引脚信号名设置如果不一致,则需要对摄像头初始化相关引脚重新管脚分配并约束)

完成后生成比特流并将比特流和硬件资源描述文件一起导出到SDK
CPU软件程序设计
原有的SDK工程中有使用到PS_IIC库,因此我们只需将HDMI库加入其中,并添加其头文件路径。随后,在主函数中添加如下语句
PS_IIC_Init(&Iic,IIC_DEVICE_ID,100000);
SiI9022_Init();
此时的主函数如下:
int main(void)
{
PS_IIC_Init(&Iic,IIC_DEVICE_ID,100000);
SiI9022_Init();
OV5640_Init();//初始化ov5640
//video参数的选择
vd_mode = RGB_LCD;//4.3寸屏,800*480分辨率
//配置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;
}
添加完成后我们还需修改设备ID,在我们提供的OV5640和PS_IIC库中,都是默认使用的PS_IIC_0,我们需要双击打开PS_IIC.h文件,添加对PS_IIC_1的定义,语句如下:
#define SCCB_DEVICE_ID XPAR_XIICPS_1_DEVICE_ID
随后双击打开OV5640.c文件,将其中PS_IIC_Init()函数的第二项参数修改为SCCB_DEVICE_ID,即将摄像头的初始化接口设置为PS_IIC_1,如下图所示:

完成后保存修改,连接好硬件,将烧录文件下载到开发板中
板级验证效果
手机实物拍摄图:

手机拍摄TFT显示图:

手机拍摄HDMI显示图:
