当前位置:文档之家› 基于DM642的视频解码设备TVP5150驱动程序的设计

基于DM642的视频解码设备TVP5150驱动程序的设计

第29卷 第3期2006年9月电子器件Ch inese Jo urnal o f El ectro n D evicesVol.29 No.3Sep.2006Driver Program Design for Video Decoder TVP5150Based on DM642XU Zhi -wei ,M A Deng -j i ,L I NG Feng ,Z HU Shan -an ,H E Zheng -jun(College o f E lectr ica l Eng ineering ,Zhejiang Un iver sity ,H angz hou 310027,Ch ina )A bstract :Aimed at embedded video surveillance sy stem co nsisted o f high -pow ered video pro cessing chip TM S320DM642and video decode r TVP5150of TI ,this paper intro duces the Class /Mini -Driver M odule of DM642,and designs the device driver prog rams for video capturing.Further mo re ,it provides the so lution of splitting -screen problem w hen DM 642is capturing video.This driver pro gram has been applied to the video surveillance sy stem and testing result indicate s that this prog ram runs stably.Key words :DM642;TVP5150;class /mini -driver m odule ;splitting -screen .EEACC :6140C基于DM642的视频解码设备TVP5150驱动程序的设计徐志伟,马登极,林 峰,朱善安,何正军(浙江大学电气学院,杭州310027)收稿日期:2005-10-13作者简介:马登极(1981-),男,河北人,工学硕士,主要从事嵌入式底层软件的研究,pony mdj @yaho o.co ;徐志伟(1978-),男,浙江富阳人工学硕士,主要从事嵌入式底层软件的研究。

摘 要:针对T I 推出的高端专用视频处理芯片T M S320D M 642和视频解码芯片T V P5150构建的嵌入式视频监控系统,介绍了DM 642的类/微型驱动模型,在此基础上设计了视频采集底层设备驱动程序,并对DM 642在图像采集时产生的分屏现象提出了解决办法。

本驱动程序已在视频监控系统中得到应用,运行稳定。

关键词:DM 642;T V P5150;类/微型驱动模型;分屏现象。

中图分类号:O432.2;TP391.41文献标识码:B 文章编号:1005-9490(2006)03-0945-06 随着现代化图像处理技术的飞速发展,人们对图像采集系统的实时性和可靠性要求越来越高。

嵌入式图像采集处理系统具有体积小、成本低、可靠性高、安装方便等优点,在交通、安防监控等领域都有广泛的应用。

TMS320DM 642[1]是TI (Texas In -strum ents )于2002年推出的一款高端专用视频处理芯片,由于它超强的单核处理性能,在视频领域将有非常广泛的应用,与之相应的外围视频设备也会越来越多。

所以,为这些外围设备编写驱动程序已经成为依赖操作系统管理硬件设备的内在要求。

1 DM642系统整体构架和功能简介如图1所示,DM 642有三个视频VPo rt 口,VP0和VP1与视频解码芯片相连作视频输入,V P2与视频编码芯片连接作视频输出。

另外还有存储模块,电源模块,网络模块等。

VP0和V P1各被分成两个8bit 的视频输入接口,连接4片视频解码芯片,实现4路的视频采集功能。

图1 DM 642系统整体架构2 视频解码芯片的选择和设计目前被广泛使用的视频解码芯片是TI 推出的SAA 7115和TVP5150。

虽然SAA7115芯片功能强大,支持水平、垂直、场同步信号控制并具有片上1/2缩放功能,但SA A7115的功耗比较大,用一个电源带4片SAA7115比较困难,而且操作也很复杂,在本嵌入式系统的设计中选择了更加适合系统低功耗功能稳定要求的TVP5150芯片。

TVP5150[2]是TI 推出的一款超低功耗的高性能混合信号视频解码芯片,可自动识别NTSC /PA L /SECAM 制式的模拟信号,按照YCbCr4:2:2的格式转化成数字信号,以8位内嵌同步信号的ITU -R BT.656格式输出。

具有价格低、体积小、操作简便的特点。

DM642对TVP5150芯片的操作是通过I2C [3]总线实现的,硬件连接如图2所示。

TV P5150和DM642的连接方式采用最简连线的I TU -R BT.656方式,不需要像视频采集芯片SAA7115所要求的水平、垂直、场同步信号线,结构简单。

图2 T V P5150与DM 642的硬件连接3 DM642视频输入端驱动程序设计DM642为设备驱动开发者提供了一种类/微型驱动模型(class /mini -driver mo del )[3]。

该模型在功能上将设备驱动程序分为依赖硬件层和不依赖硬件层两层,两层之间使用通用接口。

如图3所示,上层应用程序不直接控制底层微型驱动,而是通过一个叫做类驱动(Class Drive r )的中间层来对微型驱动(M ini Driver )执行操作。

这样的模型设计在结构上更加清晰,程序易于移植和扩展,代码复用性高,从而提高程序的开发效率。

类驱动具有承上启下的作用,对上为应用程序提供接口,向下传达指令,通常用于完成多线程I /O 请求的序列化功能和同步功能,同时对设备对象进行管理。

微型驱动为类驱动和DSP /BIOS 设备驱动管理提供标准接口,通过芯片支持库(Chip Sup -图3 类微型驱动模型结构狆狅狉狋犔犻犫狉犪狉狔)[4]控制外设的寄存器、内存和中断资源对外部设备实现控制。

微型驱动程序必须将特定的外部设备有效地表示给类驱动。

3.1 类驱动模型和选择类驱动模型中提供了三种模块:管道管理模块(PIP )、流输入输出模块(SIO )和通用输入输出模块(GIO )。

3.1.1 PIP 模块和SIO 模块。

PIP 和SIO 两个模块提供应用程序使用的A PI 接口,用于支持DSP 和外设之间的数据交互。

这两种模块都需要通过类驱动中相应的适配模块和微型驱动的IOM 连接实现数据交互。

PIP 的适配模块称为PIO ,SIO 的适配模块称为DIO 。

PIP 模块提供管理异步I /O 的数据管道。

每个管道对象都拥有一块同样大小的缓存,PIP 模块的接口函数就是通过缓存进行数据交互的。

PIO 适配模块通过PIP 模块从应用程序中获得缓存,并将获得的缓存提供给微型驱动使用。

当微型驱动使用完缓存时,PIO 模块还可以将缓存交还给应用程序。

SIO 模块为每个DSP /BIOS 线程提供一个独立的I /O 机制,执行点对点(point -to -point )数据交流。

它支持动态创建。

DIO 模块可以简化SIO 模块和IOM 之间的连接,使得通信和同步变得更简单。

3.1.2 G IO 模块GIO 模块[5]的传输模式是基于流输入输出模式的同步I /O 模式,更适合文件系统I /O 。

在编写类驱动时,可以直接调用GIO 的读写API 函数,这些函数的接口已经内置于微型驱动的IOM 中。

GIO 模块在提供必要的同步读/写API 函数及其扩展函数的同时,将代码和使用数据缓存的大小尽量简化。

如图4所示,应用程序可以调用GIO 的A PI 函数直接与微型驱动的IOM 交换数据,操作简单。

根据以上介绍可以看到,GIO 模块不需要二级接口,操作简单、稳定。

所以我们在设计DM642视946 电 子 器 件 第29卷图4 通用输入输出模块(GIO )与微型驱动接口频采集类驱动的时候采用了通用输入输出模块GIO 。

3.2 微型驱动模型为了最大可能地增加驱动代码的复用性和通用性,DM642视频采集回放的构架在图1类/微型驱动模型的基础上作了如图5所示的改进:图5 DM 642视频采集回放微型驱动架构图3中把微型驱动模型分为两部分:普通微型驱动部分和特殊微型驱动部分[6]。

普通微型驱动部分仍然保留有IOM Mini —Driver 的所有API 接口函数。

特殊微型驱动部分是面向外围芯片的,它通过一个叫作EDC (External Device Control )的专用接口提供了对外围芯片的打开、控制、关闭的接口函数:typedef str uct EDC _F xns {EDC _Handle (*o pen )(S tring name ,A rg o ptA rg );Int (*close )(P tr dev Handle );Int (*ctrl )(P tr devH andle ,U ns cmd ,A r g ar g );}EDC _F xns ;通过这三个函数完成对TVP5150的控制操作,所以,如果编写其它图像芯片(比如视频回放芯片SAA7105[7])驱动的时候,对微型驱动部分的驱动不需要作很大改动。

这样特殊微型驱动部分与普通微型驱动部分实现了无缝结合,使用简单。

4 驱动程序设计和实现根据类/微型驱动程序的模型,驱动程序的设计可以分为三个层次:类驱动程序,微型驱动程序和芯片驱动程序。

4.1 类驱动程序的设计基于使用方便和代码封装性的考虑,在GIO 模型的基础上又封装了一层模型:FVID 类驱动模型,如图6所示。

图6 F VID 类驱动封装与GIO 的关系F VID 对GIO 模型的封装代码如下:#define F VID _create (name ,mode ,status ,o ptA r gs ,at -tr s )\GIO _create (name ,mode ,sta tus ,optA rg s ,attr s )#define F V ID _allo c (gioChan ,bufp )\GIO _submit (g ioChan ,F V ID _A L LO C ,bufp ,N U L L ,N U L L )#define F V ID _co nt rol (gioChan ,cmd ,arg s )\GIO _co ntrol (g ioChan ,cmd ,arg s )当然,我们可以改变FVID 模型的名字,比如把FVID _creat 改为VIDEO _creat ,这样驱动程序提供给应用程序的接口就比较简单易读。

相关主题