vxWorks下设备驱动模板_第1页
vxWorks下设备驱动模板_第2页
vxWorks下设备驱动模板_第3页
vxWorks下设备驱动模板_第4页
vxWorks下设备驱动模板_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.鉴于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<vxWorks.h>/*addedforvxBus*/#include<vxBusLib.h>#include<hwif/vxbus/vxBus.h>Word专业资料.#include<hwif/vxbus/vxbPlbLib.h>#include<hwif/vxbus/hwConf.h>#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;i<VXB_MAXBARS;i++){/*依据需要填写*/}if(填写过程中有错误)return(FALSE);if((devId!=DEVICE_DEVID)&&(venId!=DEVICE_VENDORID)){printf("cannotfindtheDEVICEdevice\r\n");return(FALSE);}return(TRUE);/*PCI写法end*/}/*挂接中止*/LOCALvoidDEVICEInstConnect(structvxbDev*pDev){/*禁用中止*/DEVICEIntDisable(pDev->pDrvCtrl);/*清中止*/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(DEVICERes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论