视频数据采集模块设计
DM642 SMARTI核心模块上包括两个视频捕获通道和一个视频显示通道。VP0的低8位用于视频信号的捕获,外接PHILIPS公司的PAL/NTSC/SECAM视频解码器SAA7113,SAA7113与VP0之间采用ITU-BT.656 8bit 4:2:2内含同步码的数据接口,直接接入CVBS信号。
视频采集模块采用TI提供的“calss-driver module”,通过建立视频驱动模块,处理应用程序和设备驱动之间的帧缓冲区的同步。例如,一个视频显示驱动必须始终显示视频数据,直到应用程序给它另一帧视频数据去显示,它才会将上一帧缓冲区返回给应用程序。执行这种同步最有效的方式就是定义一个单独的API调用来负责缓冲区交换。同样一个视频捕获驱动必须始终返回最新捕获的视频数据,这要求驱动在下一次缓冲区交换发生之前至少保留一个帧缓冲区。
FVID模块为基于DSP/BIOS的应用程序提供API函数,该模块以芯片支持库(CSL)和设备驱动为基础,实现帧图像的获取和显示。模块集中完成了CSL中EDMA、VP、IRQ和IIC四个模块的配置和控制,实现了VP口与L2(高速缓存)之间固定周期的EDMA传输/中断以及VP口中断这些固定操作,极大地简化了编程工作,而FVID的API主要任务是管理设备驱动和程序之间缓冲区的所有权。大多数DSP/BIOS设备驱动的数据缓冲区的最初所有权都由应用程序掌握,数据的输入/输出通过传递缓冲区的地址到设备驱动实现;而FVID模块的设备驱动掌握数据缓冲区的最初所有权,应用程序按需求来分配缓冲区,这是因为视频采集/显示系统通常需要较大且复杂的缓冲区,而且对数据读取速度的要求远高于对缓冲区分配灵活性的要求所致。模块首先用FVID_create创建并初始化一个FVID通道,之后通过FVID_control发送控制命令到设备驱动以配置相应的视频解码器(TVP5150)并启动视频帧图像的采集,设备驱动工作后,利用FVID_alloc为应用程序分配视频帧缓冲区,当应用程序处理完成后,再用FVID_exchange完成应用程序与设备驱动间缓冲区的交换以为后续处理作准备。
Cache模块用于配置和管理数据及程序Cache,由于CPU对Cache进行直接访问,因此L2中Cache的设置及使用直接影响系统性能,其中Cache_setL2Mode用于设置二级Cache大小;而Cache_enableCaching则设置二级Cache可映射的外部存储器的地址空间。DAT模块是CSL的一个抽象模块,其实现的功能是通过DMA/EDMA进行数据传递。对于有EDMA的DSP,模块则用QDMA进行传输,DM642使用的就是QDMA。使用该模块需要首先用DAT_open打开模块,之后用DAT_copy完成线性数据块的拷贝传送。