


版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具批發(fā)銷售活動方案
- 家鄉(xiāng)年會活動方案
- 小學(xué)全員活動方案
- 小吃大型會展活動方案
- 小學(xué)潔凈鄉(xiāng)村活動方案
- 小學(xué)創(chuàng)全活動方案
- 安徽省醫(yī)院宣傳活動方案
- 對話教學(xué)活動方案
- 小學(xué)教研課活動方案
- 小公司端午活動方案
- JTJ300-2000 港口及航道護(hù)岸工程設(shè)計(jì)與施工規(guī)范
- 血管外科科普知識宣傳
- 小米汽車發(fā)布會
- 2022年浙江省臺州市溫嶺中學(xué)提前招生數(shù)學(xué)試卷
- 安全應(yīng)急管理培訓(xùn)
- 高中化學(xué)核心素養(yǎng)(北師大王磊)
- 40篇英語短文搞定高考3500個單詞(全部)
- 工程建筑物拆除、清運(yùn)及建筑廢棄物綜合招投標(biāo)書范本
- 保密管理與商業(yè)機(jī)密保護(hù)
- 【低保政策執(zhí)行過程中產(chǎn)生的消極效果及優(yōu)化建議分析11000字(論文)】
- 未婚先孕流產(chǎn)補(bǔ)償協(xié)議
評論
0/150
提交評論