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

下載本文檔

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

文檔簡介

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

2、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 中斷處理核#defi ne DEVICE_INT_DESC DEVICE_INT_PIN,DEVICE_CARD_VXBNAME,O,O #defi ne DEVICE_XBAR_DESC

3、 DEVICE_INT_PIN,DEVICE_INT_CORE_PIN#defi ne DEVICE_ROUTE_DESC DEVICE_INT_PIN,DEVICE_INT_CORE_NUM#defi ne DEVICE_UNIT0_DEVICE_ID 0/*假如有多個同型號設(shè)備 begin*/#defi ne DEVICE_UNIT1_DEVICE_ID 1/*假如有多個同型號設(shè)備end*/*其他設(shè)備宏*/#e ndif/*DEVICE_h*/代碼文件#in clude <vxWorks.h>/*added for vxBus*/#in clude <vxBusLib.h

4、>#in clude <hwif/vxbus/vxBus.h>#i nclude <hwif/vxbus/vxbPlbLib.h>#in elude <hwif/vxbus/hwC on f.h>#i nclude "DEVICE.h"/*其他必要的INCLUDE*/*設(shè)備數(shù)據(jù)結(jié)構(gòu)*/typedef structVXB_DEVICE_ID pDev; int n VxU nit;/*其他需要的成員變量*/ DEVICE_STRUCT;/*總線加載函數(shù)*/LOCAL void DEVICEI nstl nit (struct vxbD

5、ev * pDev);LOCAL void DEVICEI nstl nit2(struct vxbDev * pDev);LOCAL void DEVICEI nstCo nn ect(struct vxbDev * pDev);/*方法函數(shù)(假如有的話)*/*探尋函數(shù)*/LOCAL BOOL DEVICEProbe(struct vxbDev * pDev);/*中斷響應(yīng)函數(shù)*/LOCAL void DEVICEI nt(DEVICE_STRUCT * pDrvCtrl);/*vxBus 注冊總線加載函數(shù)*/LOCAL struct drvBusFu ncs DEVICEFu ncs =D

6、EVICEI nstln it,/* devI nsta ncel nit */DEVICE In st In it2,/* devI nsta ncelnit2 */DEVICEI nstCo nnect/* devCo nnect */;/*vxBus 設(shè)備方法函數(shù)*/LOCAL device_method_t DEVICEMethods=/*方法函數(shù)(假如有的話)*/0, 0;/*PCI設(shè)備需要填寫*/LOCAL struct vxbPciID DEVICEDevlDList= DEVICE_DEVID, DEVICE_VENDORID ;/*vxBus 設(shè)備注冊入口 */*pci 設(shè)備

7、 start*/LOCAL struct vxbPciRegister DEVICERegistrati on =NULL,/* pNext*/VXB_DEVID_DEVICE,/* devID */VXB_BUSID_PCI,/* busID = PCI */,VXBUS_VERSION_4,DEVICE_CARD_VXBNAME, /* 設(shè)備名稱 */& DEVICEFu ncs.DEVICEMethods,DEVICEProbeNELEMENTS(DEVICEDevlDList),DEVICEDevIDList;/*pci 設(shè)備 end*/*plb 設(shè)備 start*/LOCAL

8、 struct vxbPlbRegister DEVICERegistrati on =VXB_DEVID_DEVICE,/* devID,固定,表示這是一個設(shè)備*/VXB_BUSID_PLB,/* busID = PLB , 表示這個設(shè)備掛接在 PLB上*/VXBUS_VERSION_4,/*版本號,6.7為版本4 */NULL,/* pNext, 般都用 NULL */DEVICE_CARD_VXBNAME,/* 設(shè)備名稱,必須和 hwconfig.c 中統(tǒng)一 */& DEVICEFu ncs./* pDrvBusFu ncs,設(shè)備總線函數(shù)組在后面定義*/DEVICEMethods

9、,/* pMethods ,設(shè)備方法組,在后面定義*/DEVICEProbe/* devProbe ,設(shè)備探測 */;/*plb 設(shè)備 end*/*總?cè)?I *void DEVICERegister(void) vxbDevRegister(struct vxbDevRegI nfo *)&(DEVICERegistratio n); return;/*總線接*LOCAL void DEVICEI nstl nit (struct vxbDev * pDev)vxbNextU nitGet(pDev);return;/*設(shè)備初始化*/LOCAL void DEVICEI nstln i

10、t2(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 DEVICEProbe(struct vxbDev * pDev)/*PLB標(biāo)準(zhǔn)寫法

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

12、pDev, PCI_CFG_VENDOR_ID, 2, &venld);VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_DEVICE_ID, 2, &devId);/*查詢Bar,并填寫到結(jié)構(gòu)里面*/for (i = 0; i < VXB_MAXBARS; i+)/*根據(jù)需要填寫*/if (填寫過程中有錯誤)return (FALSE);if (devld != DEVICE_DEVID) &&(venId !=DEVICE_VENDORID)prin tf("ca nn ot find the DEVICE device

13、rn");return (FALSE);return (TRUE);/*PCI 寫法 end*/*掛接中斷*/LOCAL void DEVICE In stCo nn ect(struct vxbDev * pDev)/*禁用中斷*/DEVICE In tDisable(pDev->pDrvCtrl);/*清中斷*/DEVICEI ntClear(pDev->pDrvCtrl);/*掛接中斷*/if(vxblntConnect(pDev,O,DEVICEInt,(void *)(pDev->pDrvCtrl) != OK) prin tf("DEVICE:

14、 vxbIn tCo nn ect Failn ”);elseprin tf("DEVICE: vxbln tCo nn ect OKn");if(vxbIntEnable(pDev,O,DEVICEInt,(void *)(pDev->pDrvCtrl) != OK)printf("DEVICE: vxbIntEnable Failn");elseprin tf("DEVICE: vxbI ntEn able OKn");/*使能中斷*/DEVICE In tE nable(pDev->pDrvCtrl);/*中斷響應(yīng)函

15、數(shù)*/LOCAL void DEVICEI nt(DEVICE_STRUCT * pDrvCtrl) int n;int lockId;n = pDrvCtrl-> nVxUnit; lockld=i ntCpuLock();/*探尋本設(shè)備中斷源*/*處理中斷*/*清除本設(shè)備中斷源*/DEVICE In tClear(pDrvCtrl); in tCpu Un lock(lockId);/*中斷控制函數(shù)*/LOCAL void DeviceI ntEn able DEVICE_STRUCT * pDrvCtrl)LOCAL void DeviceI ntDisable(DEVICE_STRUCT * pDrvCtrl)LOCAL void Devicel ntClear(DEVICE_STRUCT * pDrvCtrl) Hwconfig.c#i nclude "DEVICE.h" const struct hcfResource DEVICEResources = "deviceId", HCF_RES_INT, (void *)(DEVICE_UNIT0_DEVICE_ID) ,/*下面寫需要的資源*/ ;#d

溫馨提示

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

最新文檔

評論

0/150

提交評論