文档详情

vxWorks设备驱动开发指南.docx

发布:2025-06-13约15.06万字共207页下载文档
文本预览下载声明

vxWroks6.8设备驱动开发指南——写具体类设备驱动

3DMA驱动

3.1简介

本章描述了DMA驱动。

3.2概要

有些硬件设计包括一个通用DMA引擎,处理来自DMA的访问,或到外部设备,或从内存到内存。这些DMA引擎通常集成在片上CPU系统中。DMA驱动类为系统中其它设备提供DMA引擎服务的一套标准方法。

提供的vxbDmaLib库提供用于DMA引擎。这个DMA库提供的函数是vxbDmaChanAlloc()和vxbDmaChanFree()。

3.3VxBus驱动方法

由vxbDmaLib库提供的函数充分使用三个VxBus驱动方法:

■{vxbDmaResourceGet}()

■{vxbDmaResourceRelease}()

■{vxbDmaResDedicatedGet}()

DMA驱动通过这些方法的关联函数提供对它们服务的访问。

3.3.1{vxbDmaResourceGet}()

{vxbDmaResourceGet}()方法用于DMA库来分配一个DMA驱动管理的设备上的DMA通道。原型如下:

STATUS(vxbDmaResourceGet)

(

VXB_DEVICE_IDpInst,

VXB_DEVICE_IDpReqDev,

VXB_DMA_REQUEST·pReq

)

这个原型,pInst指DAM设备本身,pReqDev指请求一个DMA通道的设备,和pReq是一个指针,指向一个结构,描述DMA通道的期望的属性。

VXB_DMA_REQUEST结构定义在:

installDir/vxworks-6.x/target/src/hwif/h/util/vxbDmaDriverLib.h

结构定义如下:

typedefstructvxbDmaRequest

{

VXB_DEVICE_IDinstance;/DMArequestordeviceid/

UINT32

minQueueDepth;/*minimumqueue

depth

requested·/

UINT32

flags;/*flagsusedduringDMA

allocation*/

VXB_DMA_RESOURCE_IDpChan;/*DMAchannelid*/

void·pDedicatedChanInfo;/*dedicatedchannel

information·/

VXB_DMA_REQUEST;

这个结构很大程度上对应传递给vxbDmaChanAlloc()的参数。DMA设备驱动正常选择一个基于minQueueDepth和flagsDMA通道,并返回指向通道的指针pChan。设备驱动调用DMA驱动的通道分配代码——无论通过和函数——可以有选择的传递一个执行一个结构的指针,这个指针包括具体于期望DMA通道的信息,专有于请求者。DMA驱动可以充分使用这个信息来设置一个专有的DMA通道。

3.3.2{vxbDmaResourceRelease}()

{vxbDmaResourceRelease}()方法用于DMA库来释放DMA驱动管理的设备上的DMA通道。原型如下:

STATUS(vxbDmaResourceRelease)

VXB_DEVICE_IDpInst,

VXB_DMA_RESOURCE_IDpChan

)

大多数情况下,驱动的仅有要求是释放具体的分配给设备的DMA通道,由pChan标识,pInst指向DMA设备的VxBus设备ID。

3.3.3{vxbDmaResDedicatedGet}()

DMA库使用{vxbDmaResDedicatedGet}()方法来分配一个DMA方法专属于调用方法的具体设备。这个方法的功能和{vxbDmaResourceGet)()类似。然而,制约于硬件限制或其他限制,你可能想使用这个设备来保证具体设备分配给具体通道。如这通过检查设备名关联的设备实例,由pReqDev标识,来完成,或检查使用的成员传递pReq的

pDedicatedChanInfo信息。原型如下:

STATUS(vxbDmaResDedicatedGet)

(

VXB_DEV

显示全部
相似文档