新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于DSP/BIOS的外设驱动开发模型及DSP视频驱动程序

基于DSP/BIOS的外设驱动开发模型及DSP视频驱动程序

作者:时间:2011-06-04来源:网络收藏
进行数据处理之后,却无法将缓冲区返回设备程序。于是TI公司在推出DM6北这一款主要用于处理的芯片的同时,对GIO进行了改进,提出了专门针对设备的FVID。FVID是建立在GIO模型之上的,以FVID_alloc、FVID_exchangc、FVID_free函数对GIO模型中的GIO_submit函数进行封装,解决了GIO模型中程序不能回收缓冲区的问题。

本文引用地址:http://www.eepw.com.cn/article/150653.htm

此外FVID模型还专门设计了FVID_frame结构。此结构中包含了常用的信号的信息,如行数、列数、YUV结构、场频等,很适合描述视频数据帧。但FVID主要是针对DM64X系统设计的,DM64X的很多功能在F2812 上都不具备。所以本设计针对F2812 视频处理系统,对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函数,用于删除设备通道,释放缓冲区资源。



评论


相关推荐

技术专区

关闭