vxWorks下设备驱动模板文档格式.docx

上传人:b****6 文档编号:16691619 上传时间:2022-11-25 格式:DOCX 页数:9 大小:16.72KB
下载 相关 举报
vxWorks下设备驱动模板文档格式.docx_第1页
第1页 / 共9页
vxWorks下设备驱动模板文档格式.docx_第2页
第2页 / 共9页
vxWorks下设备驱动模板文档格式.docx_第3页
第3页 / 共9页
vxWorks下设备驱动模板文档格式.docx_第4页
第4页 / 共9页
vxWorks下设备驱动模板文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

vxWorks下设备驱动模板文档格式.docx

《vxWorks下设备驱动模板文档格式.docx》由会员分享,可在线阅读,更多相关《vxWorks下设备驱动模板文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

vxWorks下设备驱动模板文档格式.docx

#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*/

vxBusLib.h>

hwif/vxbus/vxBus.h>

hwif/vxbus/vxbPlbLib.h>

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);

/*中断响应函数*/

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设备注册入口*/

/*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=

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);

/*设备初始化*/

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;

/*下面添加硬件要求的代码*/

/*设备探寻*/

LOCALBOOLDEVICEProbe(structvxbDev*pDev)

/*PLB标准写法start*/

BOOLretVal=TRUE;

if(pDev->

busID==VXB_BUSID_PLB)

retVal=TRUE;

else

retVal=FALSE;

return(retVal);

/*PLB标准写法end*/

/*PCI写法start*/

UINT16venId;

UINT16devId;

/*子设备ID及硬件版本,假如有的话*/

/*UINT16subDevId;

UINT32hwRev;

*/

inti;

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,并填写到结构里面*/

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->

if(vxbIntConnect(pDev,0,DEVICEInt,(void*)(pDev->

pDrvCtrl))!

=OK)

DEVICE:

vxbIntConnectFail\n"

else

vxbIntConnectOK\n"

if(vxbIntEnable(pDev,0,DEVICEInt,(void*)(pDev->

vxbIntEnableFail\n"

vxbIntEnableOK\n"

/*使能中断*/

DEVICEIntEnable(pDev->

LOCALvoidDEVICEInt(DEVICE_STRUCT*pDrvCtrl)

intn;

intlockId;

n=pDrvCtrl->

nVxUnit;

lockId=intCpuLock();

/*探寻本设备中断源*/

/*处理中断*/

/*清除本设备中断源*/

DEVICEIntClear(pDrvCtrl);

intCpuUnlock(lockId);

/*中断控制函数*/

LOCALvoidDeviceIntEnableDEVICE_STRUCT*pDrvCtrl)

LOCALvoidDeviceIntDisable(DEVICE_STRUCT*pDrvCtrl)

LOCALvoidDeviceIntClear(DEVICE_STRUCT*pDrvCtrl)

Hwconfig.c

conststructhcfResourceDEVICEResources[]={

{"

deviceId"

HCF_RES_INT,{(void*)(DEVICE_UNIT0_DEVICE_ID)}},

/*下面写需要的资源*/

#defineDeviceNumNELEMENTS(DEVICEResources)

....

/*设置中断路由,放到合适的位置上*/

DEVICE_INT_DESC,

DEVICE_XBAR_DESC,

DEVICE_ROUTE_DESC,

inconststructhcfDevicehcfDeviceList[]={

....

{DEVICE_CARD_VXBNAME,DEVICE_UNIT0_DEVICE_ID,VXB_BUSID_PLB/*PCI*/,0,DEVICENum,DEVICEResources},

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1