来源:本站整理 作者:佚名 2009-05-06 16:15:49
微型驱动主要通过一些函数来完成对外部设备的直接控制。只要微型驱动创建了规定的函数,应用程序就可以方便地通过DIO适配模块、PIo适配模块或(和)GIO类驱动调用。
例如:GIO_create被调用时,会运行mdCreate-Chan来创建一个通道。
这些微型驱动函数包括:mdBindDev/mdUBind-Dev(绑定/删除通道函数):在程序建立接口时调用,完成设备的初始化硬件设备/在程序结束时调用,卸载设备。mdCreateChan/mdDeleteChan(创建/删除通道):需要在应用程序与设备实例之间创建一个逻辑通信通道,用于交换驱动数据。应用程序可创建一个或多个逻辑通道,微型驱动用通道对象来代表这些通道。这两个函数就是用来分配和释放通道对象。mdSubmitChan(递交I/O请求):该函数处理传递给它的IOM_Pack-et结构体中的命令代码(cmd),根据命令代码,完成相应的处理或返回错误代码。ISR(服务设备中断并完成I/O操作):IOM微型驱动在中断的ISR中将以处理完的IOM_Packet请求出队,启动下一次传输或服务请求,调用类驱动的回调函数与应用程序进行同步,并返回出队的IOM_Packet。mdControlChan(控制设备):用来操作外部设备。
这些微型驱动的函数入口放在接口表(IOM_Fxns)中,供适配模块或GIO类驱动调用。
2 TMS320DM642视频驱动
下面以TMS320DM842芯片为例,介绍有关TMS320DM642视频采集与显示的驱动程序的开发。通过编写驱动程序,完成视频信号的实时采集与显示功能。TMS320DM642是TI公司推出的一款专门用于视频/图像处理的定点数字信号处理器,它基于C64x内核,带有3个可配置的视频端口,与视频采集芯片直接相连,无需外加逻辑电路或FIFO缓存,只需编写相关解编码芯片的驱动程序,就可以完成视频信号的采集与显示。在这里使用的解码、编码芯片分别为PHILIPS SAA7115和SAA7105。
2.1 视频类驱动
在视频驱动程序结构中,为了最大程度地提高视频驱动代码的复用性和通用性,将类驱动又划分为两层结构,其中上层为FVID模型,它是在DSP/BIOS GIO类驱动之上的简单封装,下层是GIO类驱动程序。GIO类驱动提供独立的、一般的API函数集并且为微型驱动提供广泛的服务,而上层的FVID模型向上层的视频采集、显示结构提供定制的API函数。
在视频驱动中,主要是通过调用FVID模块函数来完成类驱动代码的编写工作。FVID主要有以下几个API函数:FVID_create:分配并初始化通道对象;FVID_control:向微型驱动发送控制命令;FVID_al-loc:向应用程序分配视频端口缓冲区;FVID_ex-change:交换缓冲区;FVID_free:释放缓冲区;FVID_delete:删除通道对象。
在配备视频接口的设备驱动时,至少指定它要开设3个以上的视频缓冲区(FVID模型中,默认分配3个缓冲区),帧缓冲区通过FVID_alloc(),FVID_free(),FVID_exchange()三个函数在应用程序与驱动之间交换。
2.2 视频微型驱动
视频微型驱动也分为两层结构,上层为通用视频端口层部分,下层为指定编解码芯片微驱动层部分,它们通过外部设备控制接口(External Device Control,EDC)实现对外围芯片的操作。这种微驱动结构的好处是,当使用不同的芯片时,只需修改指定编解码芯片微驱动那一部分,不需将整个微驱动重新编写,使得驱动的复用性大大增强。
视频驱动程序模型如图3所示。
2.3 TMS320DM642视频驱动设计步骤
2.3.1 注册微型驱动
由于应用程序、类驱动最终都是要通过微型驱动的函数来完成对外部设备的直接控制,所以驱动程序设计的第一步就是要在DSP/BIOS Config中的Input/Output->Device Drivers->Uger-Defined Devices项目添加设备并注册微驱动,进行属性的设置,并指明IOM_Fxns函数表地址和设备参数地址,如图4所示。
DSP/BIOS会在内部维护一个“设备表”,其中包含User-Defined Devices对象进行配置的设备实例。
2.3.2 编写类驱动代码
FVID函数会在设备表中查找已注册的微驱动,并调用微驱动函数完成对外部设备的操作控制。
上一页 [1] [2] [3]