vxWorks下設(shè)備驅(qū)動(dòng)模板_第1頁(yè)
vxWorks下設(shè)備驅(qū)動(dòng)模板_第2頁(yè)
vxWorks下設(shè)備驅(qū)動(dòng)模板_第3頁(yè)
vxWorks下設(shè)備驅(qū)動(dòng)模板_第4頁(yè)
vxWorks下設(shè)備驅(qū)動(dòng)模板_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于 vxBus 的設(shè)備驅(qū)動(dòng)模板vxWorks6.x 設(shè)備驅(qū)動(dòng)采用了新型的 vxBus 構(gòu)架,該構(gòu)架和原來(lái)的設(shè)備驅(qū)動(dòng)有很大不同,初 上手會(huì)有很多不方便。下面提供的模板有助于快速形成一個(gè) vxBus 設(shè)備驅(qū)動(dòng)設(shè)備驅(qū)動(dòng)在 3 個(gè)地方體現(xiàn):頭文件,代碼文件, hwconfig.c, 根據(jù)下面模板,把所有 DEVICE 換成自己的設(shè)備,并做相應(yīng) 操作即可,免去很多重復(fù)代碼的苦惱,開(kāi)發(fā)者僅需要關(guān)注功能即可。這個(gè)模板處理了中斷,但沒(méi)有提供處理基本 IO 的方法,模板不是用來(lái)學(xué)習(xí)的,怎樣完整地 寫(xiě)一個(gè) vxbus 的驅(qū)動(dòng),還是需要學(xué)習(xí)的。頭文件#ifndef DEVICE_h#define DEVICE_h

2、#define DEVICE_CARD_NAME " 設(shè)備名 "#define DEVICE_CARD_DESC " 設(shè)備描述 "#define DEVICE_CARD_VXBNAME " 設(shè)備 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_V

3、XBNAME,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/* 假如有多個(gè)同型號(hào)設(shè)備 begin*/#define DEVICE_UNIT1_DEVICE_ID 1 /* 假如有多個(gè)同型號(hào)設(shè)備 end*/* 其他設(shè)備宏 */ #endif/*DEVICE_h*/代碼文件#include <vxWorks.h>/*adde

4、d for vxBus*/#include <vxBusLib.h>#include <hwif/vxbus/vxBus.h>#include <hwif/vxbus/vxbPlbLib.h>#include <hwif/vxbus/hwConf.h>#include "DEVICE.h"/* 其他必要的 INCLUDE*/* 設(shè)備數(shù)據(jù)結(jié)構(gòu) */ typedef structVXB_DEVICE_ID pDev;int nVxUnit;/* 其他需要的成員變量 */ DEVICE_STRUCT;/* 總線加載函數(shù) */LOCA

5、L void DEVICEInstInit (struct vxbDev * pDev);LOCAL void DEVICEInstInit2(struct vxbDev * pDev); LOCAL void DEVICEInstConnect(struct vxbDev * pDev); /* 方法函數(shù) (假如有的話 )*/* 探尋函數(shù) */LOCAL BOOL DEVICEProbe(struct vxbDev * pDev);/* 中斷響應(yīng)函數(shù) */LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl);/*vxBus 注冊(cè)總線加載函數(shù) */LOC

6、AL struct drvBusFuncs DEVICEFuncs =DEVICEInstInit,/* devInstanceInit */DEVICEInstInit2,/* devInstanceInit2 */DEVICEInstConnect /* devConnect */ ;/*vxBus 設(shè)備方法函數(shù) */LOCAL device_method_t DEVICEMethods =/* 方法函數(shù) (假如有的話 )*/0, 0 ;/*PCI 設(shè)備需要填寫(xiě) */ LOCAL struct vxbPciID DEVICEDevIDList = DEVICE_DEVID, DEVICE_

7、VENDORID ;/*vxBus 設(shè)備注冊(cè)入口 */*pci 設(shè)備 start*/LOCAL struct vxbPciRegister DEVICERegistration =NULL,VXB_DEVID_DEVICE, VXB_BUSID_PCI, VXBUS_VERSION_4,/* pNext */* devID */* busID = PCI */DEVICE_CARD_VXBNAME, /* 設(shè)備名稱(chēng) */&DEVICEFuncs,DEVICEMethods,DEVICEProbe,NELEMENTS(DEVICEDevIDList),DEVICEDevIDList;/*

8、pci 設(shè)備 end*/*plb 設(shè)備 start*/LOCAL struct vxbPlbRegister DEVICERegistration =NULL,/* pNext, 一般都用 NULL */VXB_DEVID_DEVICE,VXB_BUSID_PLB,VXBUS_VERSION_4,/* devID, 固定,表示這是一個(gè)設(shè)備 */* busID = PLB , 表示這個(gè)設(shè)備掛接在 PLB 上*/* 版本號(hào) ,6.7 為版本 4 */DEVICE_CARD_VXBNAME,/* 設(shè)備名稱(chēng) ,必須和 hwconfig.c 中統(tǒng)一 */&DEVICEFuncs, DEVICEM

9、ethods, DEVICEProbe/* pDrvBusFuncs, 設(shè)備總線函數(shù)組在后面定義 */ /* pMethods , 設(shè)備方法組 ,在后面定義 */* devProbe , 設(shè)備探測(cè) */;/*plb 設(shè)備 end*/*總?cè)肟? void DEVICERegister(void) vxbDevRegister(struct vxbDevRegInfo *)&(DEVICERegistration); return;*總線接口*LOCAL void DEVICEInstInit (struct vxbDev * pDev)vxbNextUnitGet(pDev);retur

10、n;/* 設(shè)備初始化 */LOCAL void DEVICEInstInit2(struct vxbDev * 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;/* 設(shè)備探尋 */LOCAL BOOL

11、 DEVICEProbe(struct vxbDev * pDev)/*PLB 標(biāo)準(zhǔn)寫(xiě)法 start*/BOOL retVal = TRUE;if (pDev->busID = VXB_BUSID_PLB) retVal = TRUE;elseretVal = FALSE;return(retVal);/*PLB 標(biāo)準(zhǔn)寫(xiě)法 end*/*PCI 寫(xiě)法 start*/UINT16 venId;UINT16 devId;/* 子設(shè)備 ID 及硬件版本,假如有的話 */* UINT16 subDevId;UINT32 hwRev;*/int i;DEVICE_STRUCT *pDrvCtrl;

12、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);/*查詢(xún)Bar,并填寫(xiě)到結(jié)構(gòu)里面 */for (i = 0; i < VXB_MAXBARS; i+)/*根據(jù)需要填寫(xiě) */if (填寫(xiě)過(guò)程中有錯(cuò)誤 ) return (FALSE);if (devId != DEVICE_DEVID) &&(venId !=DEVICE

13、_VENDORID) printf("cannot find the DEVICE devicern"); return (FALSE);return (TRUE);/*PCI 寫(xiě)法 end*/*掛接中斷 */LOCAL void DEVICEInstConnect(struct vxbDev * pDev)/* 禁用中斷 */DEVICEIntDisable(pDev->pDrvCtrl);/*清中斷 */DEVICEIntClear(pDev->pDrvCtrl);/*掛接中斷 */if(vxbIntConnect(pDev,0,DEVICEInt,(voi

14、d *)(pDev->pDrvCtrl) != OK) printf("DEVICE: vxbIntConnect Failn");else printf("DEVICE: vxbIntConnect OKn");if(vxbIntEnable(pDev,0,DEVICEInt,(void *)(pDev->pDrvCtrl) != OK) printf("DEVICE: vxbIntEnable Failn");elseprintf("DEVICE: vxbIntEnable OKn");/* 使能中

15、斷 */ DEVICEIntEnable(pDev->pDrvCtrl);/* 中斷響應(yīng)函數(shù) */LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl)int n;int lockId;n = pDrvCtrl->nVxUnit; lockId=intCpuLock();/* 探尋本設(shè)備中斷源 */* 處理中斷 */* 清除本設(shè)備中斷源 */ DEVICEIntClear(pDrvCtrl); intCpuUnlock(lockId);/* 中斷控制函數(shù) */LOCAL void DeviceIntEnable DEVICE_STRUCT * pDrvCtrl) LOCAL void DeviceIntDisable(DEVICE_STRUCT * pDrvCtrl) LOCAL void DeviceIntClear(DEVICE_STRUCT * pDrvCtrl)Hwconfig.c#include "DEVICE.h" const struct hcfResource DEVICEResources = "deviceId", HCF_RES_INT, (void *)(DEVICE_UNIT0_DEVICE_ID) ,/* 下面寫(xiě)需要的資源 */;#def

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論