基于DSP的视频采集驱动程序的设计

2011-10-24 21:22:15来源: 互联网

    视频终端的核心是图像的数字化处理模块。基于PC机的数字视频处理,给出了算法研究的途径,而基于高速DSP的应用模块才提供了实时嵌入式视频处理的可能。然而,基于DSP的海量视频数据的实时处理的关键则是实时、合理的视频数据采集。本文针对自行研制的基于数字信号处理器 href="http://www.21ic.com/ex/t.php?cid=1&xh=TMS320DM642" target=_blank>TMS320DM642(以下简称DM642)DSP的视频处理板卡,使其在C64x系列DSP的实时操作系统DSP/BIOS的环境下运行,实现基于类/微驱动模型的视频采集驱动程序,并进一步描述采用EDMA(增强的直接存储器存取控制器)的数字视频图像信号的实时传输。

  1 类/微驱动程序模型

  C64x系列的DSP系统给出了类/微驱动模型[1] 的驱动程序结构,采用该模型进行驱动程序设计,应用程序可以复用绝大部分相似设备的驱动程序,从而提高驱动程序的开发效率。类/微驱动模型结构如图1所示,该模型在功能上将驱动程序分为依赖硬件层(微驱动)和不依赖硬件层(类驱动)两层,并在两层之间给出通用接口。上层的应用程序不直接控制微驱动,而是通过类驱动对其进行控制。每一个类驱动在应用程序代码中表现为一个API函数,并通过标准微驱动的接口IOM与微驱动进行通信。

 


  在类/微驱动模型中,类驱动通常用于完成多线程I/O请求的序列化功能和同步功能,同时对设备实例进行管理。类驱动通过每个外部设备独有的微驱动对设备进行操作。微驱动采用芯片支持库[2]控制外设的寄存器、内存和中断资源。微驱动程序必须将特定的外部设备有效地表示给类驱动。

  类驱动使用DSP/BIOS中的API函数[3]实现诸如同步等的系统服务,DSP/BIOS定义了三种类驱动模块:管道管理模块(PIP)、流输入输出管理模块(SIO)和通用输入输出模块(GIO)。在PIP和SIO类驱动中,调用的API函数已经存在于DSP/BIOS的PIP和SIO模块中了,这些API函数需将参数传给相应的适配模块,才能与微驱动交换数据。而在GIO类驱动中,调用的API函数则直接与微驱动通信。

  2 基于DM642的视频采集驱动

  2.1 硬件结构

  笔者利用TI公司的多媒体处理芯片DM642自行研制了嵌入式视频处理板卡。卡上的主要组成模块有视频采集模块、视频处理模块以及网络发送模块,其中视频采集模块主要由DSP芯片DM642[4]、视频A/D 转换芯片SAA7115和同步动态存储器芯片SDRAM等组成,如图2所示。来自摄像头的视频信号通过SAA7115进行数字化处理,输出的数字视频信号经过视频端口的内部FIFO缓冲后,由DM642通过EDMA将数据传送到片外SDRAM中,以便供视频应用程序使用。

 


  主芯片DM642的处理能力达到4800MIPS,它的最大特点是芯片内部集成了三个可配置的视频端口[5],这些视频端口提供了与通用视频A/D转换芯片的无缝接口,因而无需外加CPLD(复杂可编程逻辑器件)和FIFO就可以满足系统设计的要求。SAA7115支持六路CVBS(复合模拟视频输入)或三路S-VIDEO (S端子信号)输入,支持多种格式的数字RGB和YUV视频信号输出。DM642通过IIC总线控制SAA7115的内部寄存器。

  采用类/微驱动模型编写DM642芯片视频端口的视频采集驱动程序,驱动必须满足如下几个基本功能:

  · 可同时处理DM642的三个视频端口;
  · 支持应用程序配置视频采集的参数,支持获取图像数据;
  · 支持场图像的采集,支持对CVBS和S-VIDEO两种模拟信号的采集。

  在视频采集过程中,最重要的是对视频数据进行实时控制和有效的传输,因此需要使用硬件中断,并在中断服务程序中,根据视频端口内部FIFO的状态通过EDMA完成视频数据的读入。

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

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

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

 

 

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

  DSP/BIOS应用程序通过GIO类驱动调用微驱动之前,需使用DSP/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完成了数字视频图像数据的高速传输;通过使用类驱动复用驱动程序,视频应用程序的开发效率获得了极大的提高。视频采集驱动程序现已在自主开发的视频处理板卡上运行良好,为进一步开发远程视频监控系统、可视电话等视频应用打下了坚实的基础。

关键字:设计

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2011/1024/article_8693.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
设计

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved