vxWorks下設備驅動模板_第1頁
vxWorks下設備驅動模板_第2頁
vxWorks下設備驅動模板_第3頁
vxWorks下設備驅動模板_第4頁
vxWorks下設備驅動模板_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、RD_NAME "設備名"#define DEVICE_CARD_DESC "設備描述"#define DEVICE_CARD_VXBNAME "設備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_VXBNAME,0,0#define DEVICE_XBA

3、R_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/*假如有多個同型號設備begin*/#define DEVICE_UNIT1_DEVICE_ID 1./*假如有多個同型號設備end*/*其他設備宏*/#endif/*DEVICE_h*/代碼文件#include <vxWorks.h>/*added for vxBus*/#include <vxBusLib.

4、h>#include <hwif/vxbus/vxBus.h>#include <hwif/vxbus/vxbPlbLib.h>#include <hwif/vxbus/hwConf.h>#include "DEVICE.h"/*其他必要的INCLUDE*/*設備數據結構*/typedef structVXB_DEVICE_ID pDev;int nVxUnit;/*其他需要的成員變量*/ DEVICE_STRUCT;/*總線加載函數*/LOCAL void DEVICEInstInit (struct vxbDev * pDev)

5、;LOCAL void DEVICEInstInit2(struct vxbDev * pDev);LOCAL void DEVICEInstConnect(struct vxbDev * pDev);/*方法函數(假如有的話)*/*探尋函數*/LOCAL BOOL DEVICEProbe(struct vxbDev * pDev);/*中斷響應函數*/LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl);/*vxBus 注冊總線加載函數*/LOCAL struct drvBusFuncs DEVICEFuncs =DEVICEInstInit, /*

6、devInstanceInit */DEVICEInstInit2, /* devInstanceInit2 */DEVICEInstConnect /* devConnect */;/*vxBus 設備方法函數*/LOCAL device_method_t DEVICEMethods =/*方法函數(假如有的話)*/0, 0;/*PCI 設備需要填寫*/LOCAL struct vxbPciID DEVICEDevIDList = DEVICE_DEVID, DEVICE_VENDORID ;/*vxBus 設備注冊入口*/*pci 設備start*/LOCAL struct vxbPciR

7、egister DEVICERegistration = 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*/LOCAL struct vxbPlbRegis

8、ter DEVICERegistration = 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

9、,設備方法組,在后面定義*/ DEVICEProbe /* devProbe ,設備探測*/ ;/*plb 設備end*/*總入口*/void DEVICERegister(void)vxbDevRegister(struct vxbDevRegInfo *)&(DEVICERegistration); return;/*總線接口*/LOCAL void DEVICEInstInit (struct vxbDev * pDev) vxbNextUnitGet(pDev); return;/*設備初始化*/LOCAL void DEVICEInstInit2(struct vxbDev

10、* 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;/*設備探尋*/LOCAL BOOL DEVICEProbe(struct vxbDev * pDev)/*PLB 標準寫法start*/ BO

11、OL retVal = TRUE; if (pDev->busID = VXB_BUSID_PLB) retVal = TRUE; else retVal = FALSE; return(retVal);/*PLB 標準寫法end*/*PCI 寫法start*/ UINT16 venId; UINT16 devId;/*子設備ID及硬件版本,假如有的話*/ /* UINT16 subDevId; UINT32 hwRev;*/ int i; DEVICE_STRUCT *pDrvCtrl; pDrvCtrl = pCev->pDrvCtrl; VXB_PCI_BUS_CFG_REA

12、D (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("cannot find the DEVICE

13、 devicern"); return (FALSE); return (TRUE);/*PCI 寫法end*/*掛接中斷*/LOCAL void DEVICEInstConnect(struct vxbDev * pDev)/*禁用中斷*/ DEVICEIntDisable(pDev->pDrvCtrl);/*清中斷*/ DEVICEIntClear(pDev->pDrvCtrl);/*掛接中斷*/ if(vxbIntConnect(pDev,0,DEVICEInt,(void *)(pDev->pDrvCtrl) != OK) printf("DEVI

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

15、應函數*/LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl)int n;int lockId;n = pDrvCtrl->nVxUnit;lockId=intCpuLock();/*探尋本設備中斷源*/*處理中斷*/*清除本設備中斷源*/DEVICEIntClear(pDrvCtrl);intCpuUnlock(lockId);/*中斷控制函數*/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) ,/*下面寫需要的資源*/;#d

溫馨提示

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

評論

0/150

提交評論