首页 vxWorks下设备驱动模板

vxWorks下设备驱动模板

举报
开通vip

vxWorks下设备驱动模板.基于vxBus的设备驱动模板vxWorks6.x设备驱动采用了新型的vxBus构架,该构架和原来的设备驱动有很大不同,初上手会有很多不方便。下面提供的模板有助于快速形成一个vxBus设备驱动设备驱动在3个地方体现:头文件,代码文件,hwconfig.c,根据下面模板,把所有DEVICE换成自己的设备,并做相应操作即可,免去很多重复代码的苦恼,开发者仅需要关注功能即可。这个模板处理了中断,但没有提供处理基本IO的方法,模板不是用来学习的,怎样完整地写一个vxbus的驱动,还是需要学习的。头文件#ifndefDEVI...

vxWorks下设备驱动模板
.基于vxBus的设备驱动模板vxWorks6.x设备驱动采用了新型的vxBus构架,该构架和原来的设备驱动有很大不同,初上手会有很多不方便。下面提供的模板有助于快速形成一个vxBus设备驱动设备驱动在3个地方体现:头文件,代码文件,hwconfig.c,根据下面模板,把所有DEVICE换成自己的设备,并做相应操作即可,免去很多重复代码的苦恼,开发者仅需要关注功能即可。这个模板处理了中断,但没有提供处理基本IO的方法,模板不是用来学习的,怎样完整地写一个vxbus的驱动,还是需要学习的。头文件#ifndefDEVICE_h#defineDEVICE_h#defineDEVICE_CARD_NAME"设备名"#defineDEVICE_CARD_DESC"设备描述"#defineDEVICE_CARD_VXBNAME"设备vxBus名"#defineDEVICE_CARD_INT_PIN[中断管脚]#defineDEVICE_CARD_INT_CORE_PIN[核中断管脚]#defineDEVICE_CARD_INT_CORE_NUM[中断处理核]Word专业资料.#defineDEVICE_INT_DESC{DEVICE_INT_PIN,DEVICE_CARD_VXBNAME,0,0}#defineDEVICE_XBAR_DESC{DEVICE_INT_PIN,DEVICE_INT_CORE_PIN}#defineDEVICE_ROUTE_DESC{DEVICE_INT_PIN,DEVICE_INT_CORE_NUM}#defineDEVICE_UNIT0_DEVICE_ID0/*假如有多个同型号设备begin*/#defineDEVICE_UNIT1_DEVICE_ID1...../*假如有多个同型号设备end*//*其他设备宏*/#endif/*DEVICE_h*/代码文件#include/*addedforvxBus*/#include#includeWord专业资料.#include#include#include"DEVICE.h"/*其他必要的INCLUDE*//*设备数据结构*/typedefstruct{VXB_DEVICE_IDpDev;intnVxUnit;/*其他需要的成员变量*/}DEVICE_STRUCT;/*总线加载函数*/LOCALvoidDEVICEInstInit(structvxbDev*pDev);LOCALvoidDEVICEInstInit2(structvxbDev*pDev);LOCALvoidDEVICEInstConnect(structvxbDev*pDev);/*方法函数(假如有的话)*//*探寻函数*/LOCALBOOLDEVICEProbe(structvxbDev*pDev);/*中断响应函数*/Word专业资料.LOCALvoidDEVICEInt(DEVICE_STRUCT*pDrvCtrl);/*vxBus注册总线加载函数*/LOCALstructdrvBusFuncsDEVICEFuncs={DEVICEInstInit,/*devInstanceInit*/DEVICEInstInit2,/*devInstanceInit2*/DEVICEInstConnect/*devConnect*/};/*vxBus设备方法函数*/LOCALdevice_method_tDEVICEMethods[]={/*方法函数(假如有的话)*/{0,0}};/*PCI设备需要填写*/LOCALstructvxbPciIDDEVICEDevIDList[]={{DEVICE_DEVID,DEVICE_VENDORID}};/*vxBus设备注册入口*/Word专业资料./*pci设备start*/LOCALstructvxbPciRegisterDEVICERegistration={{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*/LOCALstructvxbPlbRegisterDEVICERegistration={{Word专业资料.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*//**************************************总入口***********************************/voidDEVICERegister(void){vxbDevRegister((structvxbDevRegInfo*)&(DEVICERegistration));return;}/*************************************总线接口************************************/LOCALvoidDEVICEInstInit(structvxbDev*pDev){vxbNextUnitGet(pDev);Word专业资料.return;}/*设备初始化*/LOCALvoidDEVICEInstInit2(structvxbDev*pDev){DEVICE_STRUCT*pDrvCtrl;pDrvCtrl=malloc(sizeof(DEVICE_STRUCT));if(pDrvCtrl==NULL)return;bzero((char*)pDrvCtrl,sizeof(DEVICE_STRUCT));pDev->pDrvCtrl=pDrvCtrl;pDrvCtrl->pDev=pDev;/*下面添加硬件要求的代码*/return;}/*设备探寻*/LOCALBOOLDEVICEProbe(structvxbDev*pDev){/*PLB标准写法start*/BOOLretVal=TRUE;if(pDev->busID==VXB_BUSID_PLB){Word专业资料.retVal=TRUE;}else{retVal=FALSE;}return(retVal);/*PLB标准写法end*//*PCI写法start*/UINT16venId;UINT16devId;/*子设备ID及硬件版本,假如有的话*//*UINT16subDevId;UINT32hwRev;*/inti;DEVICE_STRUCT*pDrvCtrl;pDrvCtrl=pCev->pDrvCtrl;VXB_PCI_BUS_CFG_READ(pDev,PCI_CFG_VENDOR_ID,2,&venId);VXB_PCI_BUS_CFG_READ(pDev,PCI_CFG_DEVICE_ID,2,&devId);/*查询Bar,并填写到结构里面*/Word专业资料.for(i=0;ipDrvCtrl);/*清中断*/DEVICEIntClear(pDev->pDrvCtrl);Word专业资料./*挂接中断*/if(vxbIntConnect(pDev,0,DEVICEInt,(void*)(pDev->pDrvCtrl))!=OK){printf("DEVICE:vxbIntConnectFail\n");}else{printf("DEVICE:vxbIntConnectOK\n");}if(vxbIntEnable(pDev,0,DEVICEInt,(void*)(pDev->pDrvCtrl))!=OK){printf("DEVICE:vxbIntEnableFail\n");}else{printf("DEVICE:vxbIntEnableOK\n");}/*使能中断*/DEVICEIntEnable(pDev->pDrvCtrl);}Word专业资料./*中断响应函数*/LOCALvoidDEVICEInt(DEVICE_STRUCT*pDrvCtrl){intn;intlockId;n=pDrvCtrl->nVxUnit;lockId=intCpuLock();/*探寻本设备中断源*//*处理中断*//*清除本设备中断源*/DEVICEIntClear(pDrvCtrl);intCpuUnlock(lockId);}/*中断控制函数*/LOCALvoidDeviceIntEnableDEVICE_STRUCT*pDrvCtrl){}LOCALvoidDeviceIntDisable(DEVICE_STRUCT*pDrvCtrl){}Word专业资料.LOCALvoidDeviceIntClear(DEVICE_STRUCT*pDrvCtrl){}Hwconfig.c#include"DEVICE.h".....conststructhcfResourceDEVICEResources[]={{"deviceId",HCF_RES_INT,{(void*)(DEVICE_UNIT0_DEVICE_ID)}},/*下面写需要的资源*/};#defineDeviceNumNELEMENTS(DEVICEResources)..../*设置中断路由,放到合适的位置上*/DEVICE_INT_DESC,DEVICE_XBAR_DESC,DEVICE_ROUTE_DESC,inconststructhcfDevicehcfDeviceList[]={Word专业资料.....{DEVICE_CARD_VXBNAME,DEVICE_UNIT0_DEVICE_ID,VXB_BUSID_PLB/*PCI*/,0,DEVICENum,DEVICEResources},....}Word专业资料
本文档为【vxWorks下设备驱动模板】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
书海
暂无简介~
格式:doc
大小:90KB
软件:Word
页数:13
分类:
上传时间:2022-05-24
浏览量:1