FVID驱动及函数用法_第1页
FVID驱动及函数用法_第2页
FVID驱动及函数用法_第3页
FVID驱动及函数用法_第4页
FVID驱动及函数用法_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘自/szh_515/blog/static/29076175200941811218677/TI公司为开发DSP的外设驱动程序,推出了DSP/BIOS Device Driver Kit(DDK),定义了标准的设备驱动模型,并提供了一系列的API接口。外设驱动程序分为两层: 类驱动(class driver)。类驱动程序用来为应用程序提供接口。这部分程序与设备无关,主要功能包括维护设备数据缓冲区,向上提供API接口供应用层程序调用,并协调应用程序对外设操作的同步和阻塞;向下提供适配层与迷你驱动层相连,实现API接口函数到迷你驱动层程序的映射。类驱动程序与硬

2、件无关,只要外设驱动模型选定了,类驱动程序就定下来了,不需要做多少修改。 迷你驱动(mini driver)。迷你驱动程序与设备相关,所以设计迷你驱动程序是外设驱动开发中的重点。迷你驱动程序与类驱动层的接口格式是统一的,但迷你驱动程序对底层硬件的操作是根据硬件平台的不同而变化的。迷你驱动接收类驱动层发出的IOMPacket命令包,决定对底层硬件进行什么样的操作。外设驱动程序模型又可以分为以下3类:PIP/PIO模型。基于数据管道的I/O模型,每个管道都在维护自己的一个缓冲区。当数据写入缓冲区,或从缓冲区取出数据时,便会激发notifyReader()和notifyWriter()函数实现数据的

3、同步。SIO/DIO模型。基于数据流的I/O模型,一个数据流是单向的,要么是输入,要么是输出,而且SIO/DIO模型使用异步方式来操作I/O,对于数据的读写、处理可以同时进行。 GIO模型。通用的I/O模型,灵活性很强,且没有适配层,直接操作迷你驱动程序,主要用来设计新型的设备驱动模型。比较PIO、SIO和GIOPIO支持更底层的通信,适合设计比较简单的外设驱动程序。例如在TI公司的6X11DSK板上实现的音频采集和回放,一般都是基于PIO模型的。而SIO模型具有很好的缓冲器分配回收机制,比较适合描述FVID驱动模型TI公司最初设计的GIO 模型存在缺陷的,主要在数据缓冲区管理的问题上,应用程

4、序在取得设备驱动程序的缓冲区进行数据处理之后,无法将缓冲区返回设备驱动程序。于是TI公司在推出DM642这一款主要用于视频处理的DSP芯片的同时,对GIO模型进行了改进,提出了专门针对视频设备的FVID模型。FVID模型是建立在GIO模型之上的,以FVID_alloc()、FVID_exchange()、FVID_free()函数对GIO模型中的GIOsubmit()函数进行封装,解决了GIO模型中驱动程序不能回收缓冲区的问题。此外FVID模型还专门设计了FVIDframe结构。此结构中包含了常用的视频信号的信息,如行数、列数、YUV结构、场频等,很适合描述视频数据帧,为视频场合设计的FVID

5、模型主要是针对DM64X 系统设计的.迷你驱动各个函数的具体实现如下: mdBindDev()函数。在应用程序建立设备接口(如FVIDcreate()函数)时被调用以实施设备邦定,完成对外部设备的初始化。而与其对应的是mdUBindDev()函数,使用mdUBindDev()函数会使设备处于无效状态,不能再使用。 mdCreateChan()函数。使用此函数为应用程序和驱动程序建立通信通道,同时为每个通道申请缓冲区。在TI公司发布的FVID模型中,为每个通道都分配了3个缓冲区,轮流与外部设备交换数据,每个缓冲区对应1帧视频数据。与mdCreateChan()对应的是md_DeleteChan(

6、)函数,用于删除设备通道,释放缓冲区资源。 mdSubmitChan()函数。负责管理缓冲区,分别接受应用程序发出的FVIDALLOC()、FVIDEXCHANGE()、FVIDFREE()三个命令并进行处理。其中FVIDALLOC命令获取驱动程序中的缓存区,应用程序从三个缓冲区中取出最新的一帧视频数据,对其中的数据做处理,而只剩下的缓冲区用来接受外部设备输入的数据。FVIDEXCHANGE()将使用完的缓存区与驱动程序的最新数据缓存区交换,应用程序处理完1帧数据,将这1帧数据返回驱动程序,再读入新的1帧数据进行处理。FVIDFREE()将使用完的缓存区重新返回给驱动程序,应用程序将处理完的数

7、据帧返回驱动程序,而不再向驱动程序申请新的数据帧。 mdControlChan()函数。用来操作外部视频设备,完成对视频数据的采集和输出。应用程序通过FVID_Control()函数将命令传递给GIO_Control()函数,然后再GIO_Control()传递给mdControlChan()函数,最后将命令分发到指定的设备。FVID 函数:1.FVID_create()作用:是分配并初始化FVID通道对象;语法:fvidChan = FVID_create (name, mode, *status, optArgs, *attrs);参数定义:String name /* handle to

8、 an instance of the device */Int mode /* pointer to buffer allocated by driver */Int *status /* pointer to size of buffer pointed to by */Ptr optArgs /* */FVID_Attrs *attrs /* */其中:name是设备实例的句柄,是一个字符串mode 是选择的模式,只有两个值:IOM_INPUT 设置采集模式,IOM_OUTPUT设置显示模式。status是由下层mini driver返回的状态值。attrs 是指向FVID_Attrs结

9、构的指针:FVID_Attrs的定义如下:typedef struct FVID_Attrs Uns timeout; FVID_Attrs;timeout成员用来指定旗语同步,它的值可以是:SYS_FOREVER:会让FVID_alloc, FVID_free and FVID_exchange的调用不确定的等待到这个调用完成.数字的timeout值会让这些APIs阻塞一段指定的时间(以系统时钟). 0值会让APIs不阻塞,他们会立刻返回,这种情况下,应用程序会检查返回的status值来保证调用已经成功完成.备注:FVID_alloc, FVID_free 和 FVID_exchange 的

10、调用只能在 DSP/BIOS task (TSK).FVID_create的返回值:如果通道成功的打开了,那么FVID_create返回一个指向通道的句柄.这个句柄可以用来让后来的模块调用这个通道.实列: /* Initialize the attributes */FVID_ATTRS dispAttrs = FVID_ATTRS;/* Create an instance to a video display device */ chan-Handle = FVID_create(“display0”, IOM_INPUT, NULL, NULL,&dispAttrs);2.FVID_co

11、ntrol()作用是:发送一个控制命令给下层的mini_driver语法: status = FVID_control (fvidChan, cmd, args);参数定义:FVID_Handle fvidChan /* handle to an instance of the device */ Int cmd /* control command */ Ptr args /* pointer to control command arguments */ Return Value Int status /* returns IOM_COMPLETED if successful */参数说

12、明:fvidChan 是FVID_create()创建的指向通道的句柄。cmd有两个值:IOM_ABORT-作用是中止所以的未定的I/O工作。 IOM_FLUSH-作用是所以采集口的工作被丢弃,所以显示I/O的工作正常进行。Args是要传递的命令(参数或者结构体)的指针。返回值:如果调用成功,FVID_control返回IOM_COMPLETED .如果有错误产生,这个调用会返回一个负值。实例:/* abort all pending video driver I/O jobs */FVID_control(fvidChan, IOM_ABORT, NULL);3.FVID-alloc()作用

13、:申请获得驱动程序缓存单元。语法:status = FVID_alloc (fvidChan, bufp);参数定义: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer allocated by driver */ Return Value Int status /* returns IOM_COMPLETED if successful */参数说明: fvidChan 是FVID_create()创建的指向通道的句柄。 bufp 是输出参数,指向所申请的驱

14、动缓存空间的指针。 返回值:如果调用成功,FVID_alloc()返回IOM_COMPLETED,如果有错误产生,这个调用会返回一个负值。 备注:这个函数只能是在外设已经加载和初始化之后才能调用。其中的句柄应该由FVID_create()函数提供。 实例:/* allocate a buffer from the device */status = FVID_alloc(chanHandle, dispBuf);4.FVID_exchange()作用:交换应用程序和驱动程序缓存空间,实际作用相当于FVID_free()和FVID_alloc()函数的组合。语法: status = FVID_e

15、xchange (fvidChan, bufp);参数定义: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer exchanged by driver */ LgUns *pSize /* pointer to size of buffer pointed to by bufp */参数说明: fvidChan 是FVID_create()创建的指向通道的句柄。 bufp 是输入输出参数,刚开始指向的是应用程序需要交换的缓存空间,交换后,指向与驱动程序进行缓存

16、空间交换后的内存空间。 pSize 是指向bufp内存大小的指针。返回值:如果调用成功,FVID_exchange()返回IOM_COMPLETED,如果有错误产生,这个调用会返回一个负值。 备注:这个函数只能是在外设已经加载和初始化之后才能调用。其中的句柄应该由FVID_create()函数提供。实例:/* allocate a buffer from the device */status = FVID_exchange(chanHandle, dispBuf);4.FVID_free()作用:释放返回应用程序申请的缓存给驱动程序语法: status = FVID_free (fvidCh

17、an, bufp);参数定义: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer to be relinquished to driver */ LgUns *pSize /* pointer to size of buffer pointed to by bufp */参数说明: fvidChan 是FVID_create()创建的指向通道的句柄。 bufp 是输入参数,指向的是应用程序需要释放返回的缓存空间。 pSize 是指向bufp内存大小的指针。返回

18、值:如果调用成功,FVID_free()返回IOM_COMPLETED,如果有错误产生,这个调用会返回一个负值。备注:这个函数只能是在外设已经加载和初始化之后才能调用。其中的句柄应该由FVID_create()函数提供。实例:Example /* free a buffer back to the device */status = FVID_free(chanHandle, dispBuf);5.FVID_delete()作用: 申请关闭一个FVID channel 对象。语法: status = FVID_delete (fvidChan);参数定义: FVID_Handle fvidChan /* handle to an in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论