基于GIO/FVID的DSP视频驱动程序

发布者:rnm888最新更新时间:2007-08-13 来源: EDN China关键字:缓冲  数据  输入  异步 手机看文章 扫描二维码
随时随地手机看文章
引言

随着时代的发展,DSP技术在远程监控、可视电话、工业检测等视频处理领域得到了广泛的应用,对于不同的视频处理系统,会使用不同的视频设备,所以有必要为视频没备设计驱动程序,为高层应用程序提供统一的接口来操作底层硬件。只要是遵循此驱动程序接口标准开发的高层应用程序,都可以在具有相同接口的不同硬件平台上运行,具有很好的通用性和可移植性。同时高层应用程序设计人员只要会使用设备驱动程序提供的API接口,就不必了解底层硬件的具体实现,可以大大提高整个视频系统的开发效率。

对于视频设备,TI公司也提出了对应的视频设备驱动程序模型,但这些模型主要是针对6000系列高端DSP,甚至是DM64X这样的视频处理专用DSP设计的。而TMS320F2812(简称F2812)DSP这样的低端处理器,内部存储空间较小,且没有DM64X那样专用的视频接口。本文针对这类问题,提出了对TI视频驱动模型进行简化和改造的方法,使视频设备驱动程序占用尽量少的系统资源,来完成对视频硬件设备的操作。这种视频驱动模型的裁减方法,对于使用低端处理器的视频处理系统具有借可鉴性。

1、基于DSP/BIOS的外设 驱动开发模型

TI公司为开发DsP的外设驱动程序,推出了DSP/BIOS Device Driver kit,定义了标准的设备驱动模型,并提供了一系列的API接口。如图1所示,外设驱动程序分为两层:

①类驱动(class driver)。类驱动程序用来为应用程序提供接口。这部分程序与设备无关,主要功能包括维护设备数据缓冲区,向上提供API接口供应用层程序调用,并协调应用程序对外设操作的同步和阻塞;向下提供适配层与迷你驱动层相连,实现API接口函数到迷你驱动层程序的映射。类驱动程序与硬件无关,只要外设驱动模型选定了,类驱动程序就定下来了,不需要做多少修改。

②迷你驱动(mini driver)。迷你驱动程序与设备相关,所以设计迷你驱动程序是外设驱动开发中的重点。迷你驱动程序与类驱动层的接口格式是统一的,但迷你驱动程序对底层硬件的操作是根据硬件平台的不同而变化的。迷你驱动接收类驱动层发出的IOM_Packet命令包,决定对底层硬件进行什么样的操作。

外设驱动程序模型又可以分为以下3类:

①PIP/PI0模型。基于数据管道的I/O模型,每个管道都在维护自己的一个缓冲区。当数据写入缓冲区,或从缓冲区取出数据时,便会激发notifyReader和notifyWriter函数实现数据的同步。

②SIO/DIO模型。基于数据流的I/O模型,一个数据流是单向的,要么是输入,要么是输出,而且SIO/DIO模璎使用异步方式来操作I/0,对于数据的读写、处理可以同时进行。

③GI0模型。通用的I/O模型,灵活性很强,且没有适配层,直接操作迷你驱动程序,主要用来设计新型的设备驱动模型。

2、视频处理系统硬件平台

硬件平台如图2所示。系统以TI公司的F2812 DSP作为中心处理器,以模拟摄像机进行视频信号采集,再使用SAA7111视频解码芯片将其转换为BT601格式的数字视频信号。DSP将数字视频信号处理后,再写入输出帧缓存AL422中,并控制视频编码芯片ADV7177,将其转换为模拟电视信号输出。整个系统以l片CPLD——IspMachLC4128来协调各个芯片之间的时序关系。

3、视频设备驱动程序开发

3.1 设备驱动程序模型的选择

如上文介绍,常用的驱动程序模型包括3类:PIO、SIO和GIO。比较这3种模型可以知道:PIO支持更底层的通信,适合设计比较简单的外设驱动程序。例如在TI公司的6X11DSK板上实现的音频采集和回放,一般都是基于PIO模型的。而SIO模型具有很好的缓冲器分配回收机制,比较适合描述视频设备,但是SIO的很多功能在本系统中使用不到,而且GIO模型设计的目的就是针对特殊硬件的新型设备,所以最终考虑使用GIO设备驱动模型。

TI公司最初设计的GIO模型其实是有缺陷的,主要在数据缓冲区管理的问题上,应用程序在取得缓冲区进行数据处理之后,却无法将缓冲区返回设备驱动程序。于是TI公司在推出DM6北这一款主要用于视频处理的DSP芯片的同时,对GIO模型进行了改进,提出了专门针对视频设备的FVID模型。FVID模型是建立在GIO模型之上的,以FVID_alloc、FVID_exchangc、FVID_free函数对GIO模型中的GIO_submit函数进行封装,解决了GIO模型中驱动程序不能回收缓冲区的问题。

此外FVID模型还专门设计了FVID_frame结构。此结构中包含了常用的视频信号的信息,如行数、列数、YUV结构、场频等,很适合描述视频数据帧。但FVID主要是针对DM64X系统设计的,DM64X的很多功能在F2812 DSP上都不具备。所以本设计针对F2812 DSP视频处理系统,对FVID模型进行了一定的简化,保留类驱动程序,而重写了迷你驱动层程序。
 
3.2 视频处理程序运行流程

在设计完成的视频驱动程序基础上,开发一个典型的视频处理应用程序,其运行流程如图3所示。首先使用FVID_create函数建立GIO_capture和GIO_play两个视频通道.再以GIO_capture通道的FVID_control函数发出cmd_start,采集到1帧视频数据。应用程序以GIO_capture通道的FVID_alloc函数向驱动程序申请采集到的数据帧,进行处理后再以FVID_exchange函数将修改后的数据帧返回驱动程序,最后再调用GI0_play通道的FVID_control函数发出cmd_display命令将数据帧输出。由图3可以看到,应用程序调用的这些FVID_XXX接口函数会自动由类驱动程序层层向下映射,到达迷你驱动层程序;而迷你层程序可以直接操纵底层硬件设备,来完成整个视频的采集、处理和显示的过程。

3.3 迷你驱动程序的设计

迷你层驱动程序足整个设计的重点所在,下面详细介绍其实现方法。迷你层驱动程序主要由表1所列的几个函数组成。

对各个函数的具体实现如下:

①mdBindDev函数。在应用程序建立设备接口(如FVID_create函数)时被调用,完成对外部设备的初始化。而与其对应的是md_UBindDev函数,使用nadUBindDev函数会使设备处于无效状态,不能再使用。

②mdCreateChan函数。使用此函数为应用程序和驱动程序建立通信通道,同时为每个通道申请缓冲区。在TI公司发 布的FVID模型中,为每个通道都分配了3个缓冲区,轮流与外部设备交换数据,每个缓冲区对应1帧视频数据,这样的设计在DM642这样可以外扩大容量SDRAM的系统中是完全可行的。但是对于本系统,F2812DSP外部只扩展了512K×16位的SRAM,既要做视频输入的帧缓存,义要存放一部分程序,这样存储空间就不够了。所以本设计中进行了简化,对视频输入设备采用两缓冲区轮转的机制,如图4(a)所示。而对于视频输出设备,以AL422 FIFO作为硬件帧缓存,而不在SRAM中再为其分配缓冲区。与mdCreateChan对应的是md-DeleteChan函数,用于删除设备通道,释放缓冲区资源。

③mdSubmitChan函数。负责管理缓冲区。分别接受应用程序发出的FVID_ALLOC、FVID_EXCHANGE、FVID_FREE三个命令并进行处理。其中FVID_ALLOC命令对应图4中(a)到(b)的过程,应用程序从两个缓冲区中取出最新的一帧视颧数据,埘其中的数据做处理,而只剩下一个缓冲区用来接受外部设备输入的数据。FVID_EXCHANGE对应图4中(b)到(c)的过程,应用程序处理完1帧数据,将这1帧数据返回驱动程序,准备用来显示,同时再读入新的l帧数据进行处理。FVID_FREE对应图4中(c)到(a)的过程,应用程序将处理完的数据帧返回驱动程序,而不再向驱动程序申请新的数据帧。以上3个命令足针对视频输入接口GIO_capture而言的,而对于输出设备接口GIO_play,在SRAM中没有分配缓冲区,所以其nldSubmitChan函数内部设为空函数。

④mdControlChan函数。用来操作外部视频设备,完成对视频数据的采集和输出。对于GIO_capture和GIO_play这两个设备接口的mdControlChan函数接受的命令是不同的:

视频输入GIO_capture接口的mdControlCham函数只接受cmd_start命令,完成1帧视频数据的采集;而视频输出GIO_play接口的mdControlChan函数只接受cmd_display命令.完成视频信号的输出。

3.4 视频驱动模型裁剪的一般方法

TI公司设计的GIO/FVID视频设备驱动原型相对复杂,且占用较多的系统资源,要使其可以应用于更通用的低端处理器系统,就必须进行改造和裁减。在改造中要注意以下几个方面:

①阻塞的I/0操作。TI公司6000系列的DSP具有FDMA功能,传输数据不需要CPU的干预,而DM64X还具有专用的视频接口,传输数据不会占用外部扩展总线,所以视频数据的处理和输入输出是可以并行的。而低端处理器是不具备这样功能的,视频设备一般都是通过外部扩展总线连接的,所以对视频设备的操作必须设计为阻塞型的I/O操作,视频数据输入/输出的过程是由CPU来完成,且要保证对视频设备的操作不会被其他操作中断。

②对视频数据缓冲区的管理。GIO/FVID视频设备驱动原型中使用的3缓冲区模型,虽然功能很完善,却占用了太多的存储空间,所以对于实际的视频处理系统就要进行调整,改为两缓冲区甚至是单缓冲区模型。对于具有独立硬件缓存的输出设备,可以考虑不再为其分配动态缓冲区。

③对视频设备的操作。mdControlChan函数主要用来操作外部视频设备,只要保留对实际系统有用的操作就足够了,而GI0/FVID视频设备驱动原犁中定义的很多操作都可以省略。

4、小结

本文介绍了基于DSP/BIOS的外设驱动程序模型,并针对基于F2812DSP的视频处理系统这一具体的硬件平台,重点介绍了开发GIO/FVID设备驱动的流程和针对低端处理器系统的视频驱动模型裁减方法。本视频驱动程序为开发各种视频处理应用程序(如JPEG图像EPA控制网络中ZigBee压缩、MPEG视频压缩、视频监控程序等)提供了有力的支持。本文介绍的设备驱动程序的开发方法,对于同类视频处理系统,特别是对于使用TI2000系州DSP这样系统资源比较有限的视频处理系统,具有很好的可借鉴性。

关键字:缓冲  数据  输入  异步 引用地址:基于GIO/FVID的DSP视频驱动程序

上一篇:基于FPGA的DS/CDMA解扩解调模块设计与实现
下一篇:基于GIO/FVID的DSP视频驱动程序

推荐阅读最新更新时间:2024-05-02 20:37

数据压缩技术在电力系统通信中的应用
  随着微型计算机与通信技术的发展与日益成熟,一大批新型的电力系统故障录波装置和SCADA系统源源不断地被引入电力系统,由微波信道(或电力载波、公用电话线等信道)将大批量数据传送到电网调度中心,是目前广为采用的方法。波特率不可能太高,所需通信时间太长的问题已成为一大难题。解决这一难题的有效途径是数据的压缩与解压技术,即将发送端待传输的数据进行压缩,而接收端将接收到的压缩数据解压以获得原始数据。如传输电力系统某一波形数据文件的长度为23 376字节,若不采用压缩而直接传输,所需时间为40 min,若采用自适应的哈夫曼数据压缩与解压技术压缩后再传输,需22 min左右(与波形数据有关)。   其次,尽管计算机存储器的价格有降低的趋势,
[嵌入式]
数据说话:四核手机究竟比双核快多少
      越来越多的手机开始采用四核处理器,让无数仍在使用双核甚至单核PC的用户情何以堪 不知不觉,手机已经迈入四核时代。以Android为首的智能手机“军备竞赛”愈演愈烈,买Android手机不选个四核的,自己都会觉得out了。 那么,在日常使用中,四核手机到底比双核手机快多少呢? 我们挑选了12款不同价位的四核和双核Android手机,对常见的、需要短暂等待的普通操作进行测试。这个测试不能反映四核手机的全部优势,比如大型游戏的流畅度和画面效果,而是仅仅通过一些常见操作供大家参考。 本次对比的12款手机 这次对比主要通过开机时间、关机时间,在同一WiFi环境(10M ADSL)下打开新浪首页(www.sina.com.cn)
[手机便携]
NI 推出内置信号调理的PXI Express数据采集产品
美国国家仪器有限公司(National Instruments,简称NI)近日发布了公司第一款带有内置信号调理的数据采集(DAQ)模块,用于PXI Express可扩展、高性能测量。新款NI SC Express系列产品具有更高的精确度、高数据吞吐量,在同类产品中具有最佳的同步性,可用于测量应变计、电桥传感器、热电偶和高压模拟输入。PXI Express为机箱内的每个SC Express模块提供250 MB/s的专用带宽,从而帮助工程师提高通道数的同时,不影响采样率或数据吞吐量。由于具有更小的体积、更简易的电缆管理,以及在软件中自动实现同步等特性,SC Express模块简化了工程师创建和管理高通道数传感器测量系统的复杂性。
[测试测量]
NI 推出内置信号调理的PXI Express<font color='red'>数据</font>采集产品
采用STM32的PWM输入功能计算输入PWM的周期
1、时钟部分,TIMER2的时钟频率,我是初始化为36M. RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟=系统时钟/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // 倍频系数为9 PLLCLK= 8 *9=72 2、TIMER初始化 TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = 18; TIM_TimeBaseStructure.TIM_CLOC
[单片机]
CML Microcircuits BPSK无线数据调制器简化许可频段设计
全球无线数据解决方案供应商CML Microcircuits Ltd(以下简称CML)今天宣布推出一款灵活的数据调制器CMX7146,能够简化采用BPSK(二进制相移键控)和差分BPSK调制(也称为PRK,相位反转键控或2PSK)的传输(transmit-only)解决方案设计。 CMX7146能通过可编程信号滤波生成精确的基带模拟同相(in-phase)和正交信号,这样产生的高精度信号完全可用于传输,并且适合于针对用户选择的RF载波进行上变频。 与其他BPSK解决方案相比,CMX7146具有更高的灵活性,可以更好地支持低速BPSK调制。它可在数据速率和调制整形(modulation shaping)方面提供广泛的配置,同
[网络通信]
CML Microcircuits BPSK无线<font color='red'>数据</font>调制器简化许可频段设计
瑞士服务公司Multiven控诉思科盗取其数据
Multiven指控思科进行间谍活动,称该网络巨头盗窃了Multiven数千份文件。 Multiven是一家总部位于苏黎世的IT服务公司,长期以来与思科关系僵化。Multiven多次起诉该网络巨头(2008年和去年分别在美国和瑞士起诉),称思科绑定网络维护服务的项目构成滥用垄断地位。目前,这两次起诉被证实均已败诉。思科也发起诉讼,称Multiven首席执行官PeterAlfred-Adekeye(前思科雇员)入侵思科系统盗取软件。Alfred-Adekeye甚至一度被捕,他称这全是思科所为(思科否认参与这一活动)。 如今,Multiven向美国司法部和瑞士网络犯罪协调组提起诉讼,控告“思科入侵其知识库mysolvr.
[网络通信]
AD5791数据转换可提高MRI图像质量
MRI(核磁共振成像)扫描可以提供特别清晰的人体图像,常用于诊断种类广泛的各种疾病和损伤,如老年痴呆症、肿瘤和韧带撕裂等。Analog Devices, Inc.,全球领先的数据转换技术提供商以及医疗成像行业的长期合作者,最新宣布在数据转换领域取得突破性进展,有助于为临床医生和放射科医生提供超清晰的图像,帮助他们看清比以前更细小的解剖结构和病变,如乳癌细胞。 ADI的AD5791高精度20位数模转换器 (DAC)是业界首款具有真正1ppm(百万分之一)分辨率和精度的DAC器件,其精度和分辨率均高出同类转换器4倍。1ppm的模拟系统设计通常都面临复杂的工程技术挑战,需要将多个较低分辨率的DAC和大量分立器件与支持IC整合在一起
[工业控制]
AD5791<font color='red'>数据</font>转换可提高MRI图像质量
为什么变频器的输入电流比输出电流小?
变频器输入端的电流一般会小于变频器输出侧的电流主要是有三个方面的原因: 一、运行频率 在变频器低频运行的情况下,变频器输入侧的电流是比较有可能小于变频器输出侧的电流的,之所以会出现这种情况,您需要了解的以下几个方面的内容: 1)变频器是按照电动机的实际需要来分配能量的,假如电动机需要30KW的功率,此时,只要变频器的功率 30KW,就能供给电动机30KW的功率; 2)变频器输入端的电压可以认为是不变的,因为电源的电压一般都是处于一个较为稳定的状态,比方说380V,大部分现场的电压波形都是比较小的,且与变频器的实际运行频率无关; 3)变频器输出端的电压是随着变频器实际运行频率的变化而变化,一般来说,变频器的实际运行频率越高,变频
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved