在USB_Camra_Demo工程中,一部分功能用来完成同步FIFO的配置功能。当然由于强大的8051内核,Bingo还利用68013完成了CMOS视频的帧同步设计,以及抽帧写入功能。
首先打开PA0中断复用功能,作为CMOS_VSYNC的写入,该中断上升沿触发中断,设置如下所示:
![f8b6cbbd043025a86d67a8d4c0018b84.png](https://i-blog.csdnimg.cn/blog_migrate/e8e762c47f8b264379002393ed45abee.jpeg)
其次配置PD5作为输出IO,该引脚主要用于实现USB_Trigger,即触发写入使能信号,默认为0。FPGA通过此信号进行数据的输出。
![14b8d347ad3b5ba48b15bd00526651be.png](https://i-blog.csdnimg.cn/blog_migrate/fc269ece762ded1c669795c1e542b05a.jpeg)
接下来的设计的方案是这样子的:
(1)首先,由于没法保证CMOS视频流写入68013那一刻,68013的FIFO已经初始化、清空、启动完毕,因此需要在68013内实现帧同步机制。这个帧同步机制的实现方式,完全类似于CMOS_Capture_RGB565.v模块中,frame_sync_flag的实现方式。在此Bingo用68013内部51内核的中断来实现。
(2)帧同步图像数据高速发送机制。
由于在68013发送数据的时候,PC未必已经准备好;同时,为了防止错帧,数据不同步等现象,在68013中必须做帧同步。具体实现如下所示:
![7e90b6df7b7ae739b2acb3cd0f13d329.png](https://i-blog.csdnimg.cn/blog_migrate/fb46a85bdf8cfa217cc4fa98c291a686.jpeg)
每次收到STOP_CAPTURE命令式,对68013 FIFO进行清除,同时清除帧计数frame_cnt,与帧起始信号frame_sign。而当收到START_CAPTURE时,开始输出帧起始信号,此时进行帧同步,以及数据接受环节,具体代码实现如下所示:
![a283f81fd3e26adfc257d9f606d9ad7d.png](https://i-blog.csdnimg.cn/blog_migrate/64f2f961de125cf39573f160050ae81d.jpeg)
当frame_cnt == 1时,开始数据接收信号(PD5)。而这第一帧,就是用于帧同步实现。从frame_cnt == 1开始,连续发送数据。Bingo的配置,RAW输出在30FPS下,实现数据的实时传输。由于68013标称能达到480Mbps,因此640*480*30FPS的帧率,绰绰有余。
68013的Keil配置与设计的介绍就到此为止,最后Keil全编译(F7),软件将会自动将hex文件转换为iic文件,由于在Option中我们已经这样设置:
![beb8f61a11412a62c81f30675ed55066.png](https://i-blog.csdnimg.cn/blog_migrate/9794e986b174fb83fcf49560fdc3f0cc.jpeg)
在下载68013固件前,我们务必保证已经安装好68013的驱动,关于驱动的安装方式以及更多的细节,请参照第4章。
在正确安装68013的驱动后,我们使用“02_工具、驱动、USB软件”目录下的CyConsole.exe软件进行iic文件的下载,这在4.3节中关于USB固件更新已经详细的介绍过。这里简略介绍,打开Cypress后,Options→EZ-USB Interface→Lg EEPROM→选择USB_Camera_Demo.iic,如下所示:
![603e5136bedace2f69050309bbacbc54.png](https://i-blog.csdnimg.cn/blog_migrate/a432dcbe18f419405fba4b57e64c4c12.jpeg)
给VIP Mini开发板重新上电,此时固件便更新了。