SEED-VPM642视频驱动程序摘要本篇主要讲述关于视频驱动的采集与显示的Mini-Driver在SEED-VPM642板卡上的应用。这个驱动程序符合DSP/BIOS的驱动模型。在TMS320DM642与存贮器之间采用EDMA进行数据的交换。为了代码容易维护,这个驱动由数据管理与视频编解码器件控制两部分组成。驱动程序的特点:多对象驱动(一个驱动程序可以控制多路的编解码电路);采集驱动支持以下的模式:¾双通路的8/10位的内嵌时基与外部同步的BT.656格式输出¾四通路的8/10位的内嵌时基的BT.656格式输出。显示驱动支持以下的模式:¾8/10位的内嵌时基的BT.656格式输入;¾8/10位的使用外部同步的BT.656格式输入;支持视频口的所有的事件中断;允许用户通过应用程序的配置参数来设定驱动中视频帧的数据缓冲区。1.概述这里所说的器件驱动程序实际上是IOMMini-driver的一部分。它是处在二层器件驱动程序模型的底层,其上层是FVID模块,这是一个经过简单包装的DSP/BIOS的GIO型类驱动。像GIO型的类驱动为不同的Mini-driver一系列通用且独立的API函数与服务一样,FVID也为视频帧的采集与显示提供了定制的API。相关的内容,请参看附录B中有关FVID详细说明。图一说明了DSP/BIOS器件驱动程序的结构,关于IOM、GIO、SIO/DIO和PIP/PIO的器件驱动模型参看相关的说明。图一:DSP/BIOS驱动分层模型图二说明了SEED-VPM642视频采集与显示的Mini-driver驱动程序的结构图,为了使SEED-VPM642视频采集与显示的Mini-driver驱动程序的代码有最大的重复使用能力,将其分为数据管理与视频编解码器件控制两部分。与其它将用户板上器件控制程序直接放在Mini-driver中不同的是,在视频采集与显示的Mini-driver中是通过外部器件控制接口(EDC)把视频编解码器件的控制集成到Mini-driver中的。这样使我们的视频采集与显示的Mini-driver能适应不同的视频编解码器件。当更换不同器件时,只须更改EDC部分即可,其它的部分可保持不变。图二:采集与显示驱动分层模型本文主要描述SEED-VPM642视频采集与显示Mini-driver的数据管理与器件控制两部分。数据管理部分是采用EDMA技术完成对视频口的写入与读出。器件控制部分在采集驱动里完成对TVP5150AM的初始化与配置;在显示驱动里,完成对SAA7121的初始化与配置。器件控制部分(EDC)使视频编解码器与DM642的视频口配合工作,完成指定视频数据格式的采集与显示。例如,TVP5150根据应用程序的需要可以配置成为NTSC制式或PAL制式的采集。同时,视频口也应配置成为相同的模式。器件控制接口部分程序运行前需要SEED-VPM642调用SEED-VPM642板级支持库(seedvpm642_bsl.lib)中的初始化程序SEEDVPM642_init()对EMI与I2C总线控制器进行初始化。因此,正确调用视频采集与显示库,需要在编程时同时连接seedvpm642_bsl.lib与seedvpm642_vport.l64这两个库。2.使用规则2.1驱动程序在DSP/BIOS中的配置为了使用采集与显示的器件驱动,必须在DSP/BIOS配置工具中加入相应的配置设备实体。关于如何使用DSP/BIOS来配置设备实例的详细内容可参看DSP/BIOSDeviceDriverDeveloper’sGuide(文档号:SPRU616)或是参看相关的例程。下面是在使用采集驱动时需要设置设备实例的参数。Initfunction:这个驱动无初始化的函数Functiontableptr:_VPORTCAP_FxnsFunctiontabletype:IOM_FxnsDeviceid:0~3,指定是SEEDVPM642系统内哪一通路的采集Deviceparamsptr:这是一个可选项,它是一个指向VOPRT_PortParams结构的指针,这个结构定义在vport.h的头文件中。这个结构是用来设定视频口与解码器件参数的。如果将这个指针设为NULL,则应用程序需要另外调用FVID_control来初始化视频口与解码器件。关于这个结构设置的例子,可以在seedvpm642_vcapparamsPAL_EMBEDDED.c中看到。Deviceglobaldataptr:此参数在驱动中未使用。下面是显示驱动在DSP/BIOS中设备实体设置参数:Initfunction:这参数驱动程序未使用。Functiontalbeptr:_VPORTDIS_FxnsFunctiontabletype:IOM_FxnsDeviceid:在SEED-VPM642设为0,使用视频口0Deviceparamsptr:这个参数的设置与采集驱动是一致的Deviceglobaldataptr:此参数在驱动中未使用。2.1.1视频口参数typedefstructVPORT_PortParams{BooldualChanEnable;BooldualChanEnab;Unsvc1Polarity;Unsvc2Polarity;Unsvc3Polarity;EDC_Fxns*edcTbl[2];}VPORT_PortParams;dualChanEnable:是否使能视频口的双通路模式(TRUE或FALSE)vc1Polarity:视频口管脚vctrl1是高有效还是低有效,其值为:¾VPORT_POLARITY_ACTIVE_HIGH:高有效;¾VPORT_POLARITY_ACTIVE_LOW:低有效;Vc2Polarity:视频口管脚vctrl2是高有效还是低有效,其值为:¾VPORT_POLARITY_ACTIVE_HIGH:高有效;¾VPORT_POLARITY_ACTIVE_LOW:低有效;Vc3Polarity:视频口管脚vctrl3是高有效还是低有效,其值为:¾VPORT_POLARITY_ACTIVE_HIGH:高有效;¾VPORT_POLARITY_ACTIVE_LOW:低有效;edcTbl[2]:指向器件控制接口(EDC)的两个指针队列,每一个通路有一地址,当只使用一个时,另一个设为NULL。2.1.2采集通路参数typedefstruct{Intcmode;IntfldOp;Intscale;Intresmpl;Intbpk10Bit;InthCtRst;IntvCtRst;IntfldDect;IntextCtl;IntfldInv;Uint16fldXStrt1;Uint16fldYStrt1;Uint16fldXStrt2;Uint16fldYStrt2;Uint16fldXStop1;Uint16fldYStop1;Uint16fldXStop2;Uint16fldYStop2;Uint16thrld;IntnumFrmBufs;Intalignment;IntmergeFlds;IntsegId;IntedmaPri;IntirqId;BoolautoSyncEnable;}VPORTCAP_Params;上面结构中定义的每一位直接映射射到视频采集控制寄存器。未定义的位保持复位进的默认值,下面是这些定义的详细说明:Cmode:采集的模式,下面是在Vport.h内定义的可能的值,在SEEDVPM642中只能采用第一种模式。¾VPORT_MODE_BT656_8BIT¾VPORT_MODE_BT656_10BIT¾VPORT_MODE_RAW_8BIT¾VPORT_MODE_RAW_10BIT¾VPORT_MODE_YC_8BIT¾VPORT_MODE_YC_10BIT¾VPORT_MODE_RAW_16BIT¾VPORT_MODE_RAW_20BITfldOp:帧或场的操作模式。下面是在Vport.h内定义的可能的值:¾VPORT_FLDOP_FLD1¾VPORT_FLDOP_FLD2¾VPORT_FLDOP_FRAME¾VPORT_FLDOP_PROGRESSIVEscale:水平½缩小使能。下面是在Vport.h内定义的可能的值:¾VPORT_SCALING_DISABLE¾VPORT_SCALING_ENABLEresmpl:将每行色度由4:2:2变换4:2:0使能.下面是在Vport.h内定义的可能的值:¾VPORT_RESMPL_DISABLE¾VPORT_RESMPL_DISABLEbpk10Bit:10位视频采集模式,下面是在Vport.h内定义的可能的值:¾VPORTCAP_BPK_10BIT_ZERO_EXTENDED¾VPORTCAP_BPK_10BIT_SIGN_EXTENDED¾VPORTCAP_BPK_10BIT_DENSEhCtRst:行(水平方向)计数复位模式。下面是在Vport.h内定义的可能的值:¾VPORTCAP_HRST_EAV¾VPORTCAP_HRST_START_HBLK¾VPORTCAP_HRST_START_HSYNC¾VPORTCAP_HRST_SAV¾VPORTCAP_HRST_END_HBLK¾VPORTCAP_HRST_END_HSYNCvCtRst:场(垂直方向)计数复位模式.下面是在Vport.h内定义的可能的值:¾VPORTCAP_VRST_START_VBLK¾VPORTCAP_VRST_START_VSYNC¾VPORTCAP_VRST_END_VBLK¾VPORTCAP_VRST_END_VSYNC¾VPORTCAP_VRST_EAV_V1¾VPROTCAP_VRST_EAV_V0fldDect:场侦测使能,此项功能仅在使用外部同部时使用。当使能时,需要确定场侦测的方式。一般是由H-Sync与V-Sync的关系或由Field输入管脚来确定。下面是在Vport.h内定义的可能的值:¾VPORTCAP_FLDD_ENABLE¾VPORTCAP_FLDD_ENABLEextCtl:外部同步使能。下面是在Vport.h内定义的可能的值:VPORTCAP_EXC_DISABLEVPORTCAP_EXC_ENABLEfldInv:场反转使能。下面是在Vport.h内定义的可能的值:¾VPORTCAP_FINV_DISABLE¾VPORTCAP_FINV_ENABLEfldXStrt1:第一场起始像素点横坐标其值大于等0fldYStrt1:第一场起始像素点纵坐标其值大于等0fldXStrt2:第二场起始像素点横坐标其值大于等0fldYStrt2:第二场起始像素点纵坐标其值大于等0fldXStop1:第一场起始像素点横坐标其值大于等fldXStrt1fldYStop1:第一场起始像素点纵坐标其值大于等fldYStrt1fldXStop2:第二场起始像素点纵坐标其值大于等fldXStrt2fldYStop2:第二场起始像素点纵坐标其值大于等fldYStrt2thrld:设定产生DMA中断的门槛,以双字节以单位numFrmBufs:设定驱动程序中采集缓冲区的个数alignment:采集缓冲区的对齐长度mergeFlds:指定场在缓冲区中的存放方式,可以将两场分别存放,也可以排成逐行方式存放(两场交叉存放)。下面是在Vport.h内定义的可能的值:¾VPORT_FLDS_MERGED¾VPORT_FLDS_SEPARATEDSegId:DSP/BIOS存贮空间ID,驱动用来分配视频帧的缓冲区。edmaPri:EDMA的优先级irqId:EDMA中断安排autoSyncEnable:是否使能断帧自动同步功能。下面是在Vport.h内定义的可能的值:¾TRUE¾FALSE2.1.3显示通路参数typedefstruct{Intdmode;IntfldOp;Intsca