新闻中心

EEPW首页>消费电子>设计应用> 基于TMS320DM642的视频采集驱动程序的实现

基于TMS320DM642的视频采集驱动程序的实现

作者:鹿宝生, 陈启美 时间:2008-08-21 来源:电子技术应用 收藏
  应用程序通过GIO类驱动调用微驱动的标准API函数,这些标准API函数的描述如表2所示。这些规定的函数将放入微驱动的函数接口表(IOM_Fxns)中,以供应用程序通过GIO类驱动调用。

本文引用地址://m.amcfsurvey.com/article/87221.htm


  在图3中,微驱动的IOM接口将应用程序获取图像的命令打包生成数据包,并向微驱动发送。数据包的格式如下: typedef struct IOM_Packet {

  QUE_Elem link; /* 数据包队列 */
  Ptr addr; /* 数据地址 */
  Uns size; /* 数据长度 */
  Arg misc; /* 保留使用 */
  Arg arg; /* 应用程序 */
  Uns cmd; /* 命令字段 */
  Int status; /* 命令完成状态 */
  } IOM_Packet;

  数据包中数据长度与数据地址两字段由应用程序提供,分别表示获取图像的大小及图像存储目的地址。微驱动依据数据包中的命令字段,调用mdSubmitChan函数将数据包放入数据包队列,等待中断服务函数的处理。视频采集中的硬件中断由视频端口内部FIFO的状态触发,中断服务程序根据数据包中的数据地址字段,通过EDMA将视频端口内部FIFO中的视频数据读入SDRAM中的图像存储目的地址。依据数据包中的数据长度字段,在完成相应大小图像的采集后,中断服务程序还将完成以下功能:出列数据包;设置下一次传送或服务请求;设置数据包中的命令完成状态,并向应用程序返回。

  3 视频采集驱动中的视频数据传输

  视频端口内部FIFO与SDRAM之间的视频数据传输通常有以下几种方法:软件查询、中断和EDMA方法。软件查询消耗CPU的资源太大,是不可取的,中断数据传输虽可节省很多CPU时间,但没有发挥DM642的EDMA资源。EDMA[6]是在DMA基础上发展起来的,用于在没有CPU参与的情况下完成不同存储空间之间的数据搬移。DM642提供了64个独立的EDMA通道,通道的优先级可编程设置,在没有CPU参与的情况下实现片内存储器、片内外设以及外部存储空间之间的数据高速搬移。因此,为减轻CPU的负担,发挥DM642的强大的外部数据传输能力,视频采集驱动使用EDMA完成视频数据从FIFO到SDRAM的传输。

  3.1 基于双EDMA通道的视频数据传输

  利用EDMA将FIFO中的数据传输到SDRAM中有两种方法,但是它们的性能却差别很大。一种方法是利用EDMA将FIFO中的数据直接传送到SDRAM中。这种方法虽然简单且易于操作,但它没有充分发挥SDRAM的页读写的优越性,原因在于EDMA读取FIFO和写入SDRAM时分为两个不同过程来实现,因此EMIF(外部存储器接口)的时序不断地在两者之间切换,造成很大的时间浪费,所以这种传输效率不高。

  由于DM642视频端口的内部FIFO提供“满”、“半满”、“空”三种状态,另一方法使用两个EDMA通道进行数据传输。以亮度信号的传输为例,当用于存储亮度分量的内部FIFO半满(640字节)时,触发DM642的硬件中断,在中断服务程序中启用一个EDMA通道将数据从FIFO中读出,存放到缓冲区BUF中。传输完毕后,启动另一个EDMA通道将数据从BUF中传输到SDRAM中。这样,两个EDMA通道分别进行读取FIFO和写入SDRAM的操作,避免了EMIF时序的切换,可以保证EDMA的有效传输。

  3.2 EDMA链表在场合成中的使用

  在隔行扫描模式下,每帧分为两场,两场在时域上是分开的,但在数据处理时需要将两场合成一帧进行处理,因此要进行大量的数据搬移,占用了大量的CPU时间。通过EDMA链表可自动实现场合成,不需占用额外的CPU时间。

  EDMA的参数RAM存放了有关的传输参数,这些参数用于产生EDMA读写操作所需要的地址。如图4所示,在使用EDMA通道传输奇数场与偶数场时,分别使用不同的EDMA参数RAM。两组参数RAM的目的地址分别指向存储图像的第一行与第二行象素的首地址,并且两组参数RAM通过链接地址循环相连。在EDMA通道的传输中,奇数场传输任务的结束会自动地根据当前参数RAM的链接地址装载传输偶数场的参数RAM,又由两组参数RAM的目的地址可知,奇数场与偶数场分别经EDMA通道传输至帧缓冲区后被隔行存储,这样在无需占用额外CPU时间的前提下就实现了场合成。

  4 视频采集驱动程序的调用实例

/BIOS应用程序通过GIO类驱动调用微驱动之前,需使用/BIOS配置工具注册微驱动,将其命名为VP_CAPTURE,并启动GIO模块。

  在应用程序中,GIO_create函数使用已注册的微驱动VP_CAPTURE创建GIO通道,通过调用GIO_submit函数完成应用程序对视频数据的采集操作。部分源代码如下:

  (1) 创建通道

  GIO_Handle capChan;
  int status;
  capChan = GIO_create('VP_CAPTURE'),
  IOM_INPUT, &status, (Ptr)&DM642_vCapParams, NULL);
  (2) 发送获取图像的数据包

  GIO_submit(capChan, IOM_READ, bufp, NULL, NULL);其中,DM642_vCapParams包含了视频采集的初始化参数,如图像大小、同步方式等;bufp用于指出采集图像的存储地址。不同的视频应用程序在使用类驱动时,可以通过改变这两个变量复用视频设备。这样,极大地提高了驱动程序的工作效率,对视频外设的控制也大大简化了。

  使用类/微驱动模型开发的视频采集驱动程序,有效地解决了图像采集和图像实时处理之间的关系,在几乎不需要CPU的干涉下,利用EDMA完成了图像数据的高速传输;通过使用类驱动复用驱动程序,视频应用程序的开发效率获得了极大的提高。视频采集驱动程序现已在自主开发的视频处理板卡上运行良好,为进一步开发远程视频监控系统、可视电话等视频应用打下了坚实的基础。

  参考文献

  1/BIOS Driver Developer’s Guide. Literature Number: SPRU616. Texas Instruments Incorporated, November 2002
  2 TMS320C6000 Chip Support Library API Reference Guide. Literature Number: SPRU401. Texas Instruments Incorporated,December 2002
  3 TMS320C6000 DSP/BIOS Application Programming Interface. Literature Number: SPRU403. Texas Instruments Incorporated,October 2002
  4Technical Overview.Literature Number:SPRU615.Texas Instruments Incorporated, September 2002
  5 TMS320C64x DSP Video Port/ VCXO Interpolated Control (VIC) Port Reference Guide. Literature Number: SPRU629. Texas Instruments Incorporated, April 2003
  6 TMS320C6000 Peripherals Reference Guide. Literature Num-ber:SPRU190. Texas Instruments Incorporated, February 2001


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭