




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 別墅物業(yè)招標(biāo)合同范本
- 2025年福建省安全員-B證考試題庫(kù)及答案
- 勞動(dòng)合同范本教師
- 南京耐磨地坪合同范例
- 公司汽車(chē)合同范本
- 勞務(wù)雇傭種菜合同范本
- 農(nóng)商銀行授權(quán)推廣合同范本
- 聲勢(shì)在小學(xué)音樂(lè)教學(xué)中的應(yīng)用策略
- 賣(mài)米合同范本
- 養(yǎng)老機(jī)構(gòu)合同范本
- 細(xì)菌群體感應(yīng)系統(tǒng)及其應(yīng)用課件
- 司法鑒定程序通則(試行)
- 內(nèi)襯修復(fù)用HTPO管材企標(biāo)
- 部編教材一年級(jí)下冊(cè)生字筆順筆畫(huà)
- 通達(dá)信指標(biāo)——江恩輪
- 二維火收銀使用手冊(cè)
- 神經(jīng)電生理檢查ppt課件
- 管路滑脫風(fēng)險(xiǎn)評(píng)估表
- 塑鋼板樁專(zhuān)項(xiàng)施工方案
- EN12680.3中文
- 歐科模塊化風(fēng)冷冷水熱泵機(jī)組報(bào)警代碼和維修步驟
評(píng)論
0/150
提交評(píng)論