vxWorks下设备驱动模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)