vxWorks下设备驱动模板

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于vxBus的设备驱动模板

vxWorks6.x 设备驱动采用了新型的vxBus构架,该构架和原来的设备驱动有很大不同,初上手会有很多不方便。下面提供的模板有助于快速形成一个vxBus 设备驱动

设备驱动在3个地方体现:

头文件,代码文件,hwconfig.c,根据下面模板,把所有DEVICE换成自己的设备,并做相应操作即可,免去很多重复代码的苦恼,开发者仅需要关注功能即可。

这个模板处理了中断,但没有提供处理基本IO的方法,模板不是用来学习的,怎样完整地写一个vxbus的驱动,还是需要学习的。

头文件

#ifndef DEVICE_h

#define DEVICE_h

#define DEVICE_CARD_NAME "设备名"

#define DEVICE_CARD_DESC "设备描述"

#define DEVICE_CARD_VXBNAME "设备vxBus名"

#define DEVICE_CARD_INT_PIN [中断管脚]

#define DEVICE_CARD_INT_CORE_PIN [核中断管脚]

#define DEVICE_CARD_INT_CORE_NUM [中断处理核]

#define DEVICE_INT_DESC {DEVICE_INT_PIN,DEVICE_CARD_VXBNAME,0,0}

#define DEVICE_XBAR_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_PIN}

#define DEVICE_ROUTE_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_NUM}

#define DEVICE_UNIT0_DEVICE_ID 0

/*假如有多个同型号设备begin*/

#define DEVICE_UNIT1_DEVICE_ID 1

.....

/*假如有多个同型号设备end*/

/*其他设备宏*/

#endif/*DEVICE_h*/

代码文件

#include

/*added for vxBus*/

#include

#include

#include

#include

#include "DEVICE.h"

/*其他必要的INCLUDE*/

/*设备数据结构*/

typedef struct

{

VXB_DEVICE_ID pDev;

int nVxUnit;

/*其他需要的成员变量*/

} DEVICE_STRUCT;

/*总线加载函数*/

LOCAL void DEVICEInstInit (struct vxbDev * pDev); LOCAL void DEVICEInstInit2(struct vxbDev * pDev); LOCAL void DEVICEInstConnect(struct vxbDev * pDev); /*方法函数(假如有的话)*/

/*探寻函数*/

LOCAL BOOL DEVICEProbe(struct vxbDev * pDev);

/*中断响应函数*/

LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl);

/*vxBus 注册总线加载函数*/

LOCAL struct drvBusFuncs DEVICEFuncs =

{

DEVICEInstInit, /* devInstanceInit */

DEVICEInstInit2, /* devInstanceInit2 */

DEVICEInstConnect /* devConnect */

};

/*vxBus 设备方法函数*/

LOCAL device_method_t DEVICEMethods[] =

{

/*方法函数(假如有的话)*/

{0, 0}

};

/*PCI 设备需要填写*/

LOCAL struct vxbPciID DEVICEDevIDList[] =

{

{ DEVICE_DEVID, DEVICE_VENDORID }

};

/*vxBus 设备注册入口*/

/*pci 设备start*/

LOCAL struct vxbPciRegister DEVICERegistration =

{

{

NULL, /* pNext */

VXB_DEVID_DEVICE, /* devID */

VXB_BUSID_PCI, /* busID = PCI */

VXBUS_VERSION_4,

DEVICE_CARD_VXBNAME, /*设备名称*/

&DEVICEFuncs,

DEVICEMethods,

DEVICEProbe

},

NELEMENTS(DEVICEDevIDList),

DEVICEDevIDList

};

/*pci 设备end*/

/*plb 设备start*/

LOCAL struct vxbPlbRegister DEVICERegistration =

{

{

NULL, /* pNext,一般都用NULL */

VXB_DEVID_DEVICE, /* devID,固定,表示这是一个设备*/

VXB_BUSID_PLB, /* busID = PLB ,表示这个设备挂接在PLB上*/

VXBUS_VERSION_4, /* 版本号,6.7为版本4 */

DEVICE_CARD_VXBNAME, /*设备名称,必须和hwconfig.c中统一*/

&DEVICEFuncs, /* pDrvBusFuncs,设备总线函数组在后面定义*/

DEVICEMethods, /* pMethods ,设备方法组,在后面定义*/

DEVICEProbe /* devProbe ,设备探测*/

}

};

/*plb 设备end*/

/**************************************总入口***********************************/

void DEVICERegister(void)

相关文档
最新文档