999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VxWorks下數據采集卡驅動程序開發

2008-04-12 00:00:00楊智慧李正熙
現代電子技術 2008年7期

摘 要:數據采集卡是典型的字符設備,以其為例,分析了VxWorks下字符設備驅動程序的結構,說明了字符設備驅動的開發思路,列出了開發的具體步驟,為驅動開發人員提供了參考。而用戶在使用該設備驅動時,無需了解底層實現,即設備寄存器的操作,只需熟悉VxWorks下標準的I/O函數即可實現對數據采集卡的操作,極大地方便了應用程序開發。

關鍵詞:VxWorks;字符設備;驅動;ADT700

中圖分類號:TP316文獻標識碼:B

文章編號:1004-373X(2008)07-113-02

Driver Development of Data Acquisition Card under VxWorks

YANG Yang,YANG Zhihui,LI Xu,LI Zhengxi

(Machine and Electronic Engineering School,North China University of Technology,Beijing,100041,China)



Abstract:The data acquisition card is a typical character equipment.Taking it as the example,the paper analyzes the structure of the character device drives under VxWorks,explains the development ideas of the character device drivers,lists the concrete step of development and provides a reference to driver developers.At the same time,users don′t need to know how to operate the device register,but only pay attention to the standard I/O function,which is convenient to develop program.

Keywords:VxWorks;character device;driver;ADT700

1 引 言

隨著嵌入式技術的發展,數據采集廣泛應用于現場設備中。本文根據實際項目需求,開發了數據采集卡在VxWorks操作系統下的驅動程序,以方便應用程序開發。

本文采用的數據采集卡為盛博協同公司基于PC/104總線的ADT700采集卡,他通過總線與PC/104嵌入式系統構成一個高性能的數據采集與控制系統。ADT700具有如下特點:

模擬輸入[HTSS] 16單端/8差分輸入;12位分辨率;100 kHz最大A/D采樣率;0 ~ +10 V,-5~+5 V,-10~+10 V雙極性或單極性輸入量程;1,2,4,8倍可編程增益;DMA實現數據的高速傳輸。

模擬輸出[HTSS] 4通道輸出;-5~+5 V,-10~+10 V,0~5 V,0~10 V量程可選;通道單獨置數或4通道同時置數。

數字量I/O[HTSS] 可編程外圍接口,24通道TTL/CMOS兼容;I/O接口上拉或下拉限流電阻。

定時/計數器[HTSS] 6個16位、10 MHz(最大)定時/計數器。

2 VxWorks及其字符設備驅動

VxWorks是一個基于搶占式的實時操作系統,他以其高度的可靠性、優秀的實時性、靈活的可裁性廣泛應用到許多行業中。在VxWorks中,I/O系統提供了與設備無關的用戶接口,應用程序可以通過標準的接口函數如:create( ),remove( ),open( ),close( ),read( ),write( ),ioctl( )等來訪問設備驅動程序,而不用關心驅動程序是如何實現的。ADT700屬于字符型設備,他的驅動程序需要支持以上接口函數。

下面以字符設備中open( )操作為例,說明字符設備驅動程序結構。

如圖1所示,當應用程序調用fd=open(“/xx0”,O[CD#*2]RDONLY,0)時,I/O系統根據文件名“/xx0”在設備列表中查找設備(設備是以文件形式存在的,文件名即設備名)(如①所示);查找到相應設備后根據驅動號定位到驅動表中(如②所示);I/O系統在文件描述表中預留一個表項fd=3(如③所示);然后I/O系統調用驅動程序中的xxoOpen( )函數,返回需要保留的值,即設備描述指針(如④所示);I/O系統將驅動號和驅動返回值填到文件描述符表中(如⑤所示);最后,I/O系統返回新open( )的文件在文件描述符表中的索引,應用程序得到文件描述符fd=3(如⑥所示)。用戶可以通過操作文件來訪問I/O設備。



圖1 字符設備驅動程序結構

3 驅動實現

3.1 功能分類

ADT700具有A/D,D/A轉換,數字I/O,定時/計數等功能,對其進行分析,可分為3類:

(1) A/D轉換為只讀,而D/A轉換為只寫;

(2) 數字I/O既可讀又可寫;

(3) 定時/計數器基本無需讀寫,只設置即可。

根據以上功能,得出需要實現3個驅動,分別為:

(1) adtDrv驅動,用于讀入A/D轉換后的數據,寫出D/A轉換的數據,設備描述符為“/adt”;

(2) ppiDrv驅動,用于讀入或寫出數字I/O的數字,設備描述符為“/ppi”;

(3) pitDrv驅動,用于設置定時/計數器,設備描述符為“/pit”。

3.2 基本流程

(1) 安裝驅動

I/O系統的功能是將用戶的I/O請求轉換成對相應驅動程序具體操作函數的調用,他通過維護一個包括所有驅動程序操作函數的地址表來實現的。通過調用iosDrvInstall( )可以動態安裝驅動程序,該函數的參數就是7種基本I/O操作函數指針。iosDrvInstall( )函數將這些地址寫入驅動表中的一塊空閑存儲區中,并返回這塊存儲區的編號,編號即驅動程序號,可被與驅動程序相關聯的設備使用。iosDrvInstall( )的原型是:

int iosDrvInstall(FUNCPTR pCreate,FUNCPTR pDelete,FUNCPTR pOpen,FUNCPTR pClose,FUNCPTR pRead,FUNCPTR pWrite,FUNCPTR pIoctl);

當調用iosDrvInstall( )注冊I/O函數成功后,在shell下用iosDrvShow命令可以觀察驅動表中ADT700的驅動入口。

(2) 創建設備

創建設備過程即是調用設備創建函數iosDevAdd( )將此設備加入到I/O系統的設備列表中。iosDevAdd( )的原型為:

STATUS iosDevAdd ( DEV[CD#*2]HDR *pDevHdr,char *name,int drvnum);

其中:DEV[CD#*2]HDR是一個指向該設備的描述符指針;而DEV[CD#*2]HDR結構中的第一項則指向下一個設備的描述符指針。

設備創建成功后,在shell下用devs命令可以觀察設備列表中ADT700的設備描述符。

以ADT700中adtDrv驅動為例,以上兩步的完成過程如圖2所示。

圖2 adtDrv驅動程序安裝

(3) 實現I/O函數

安裝驅動和創建設備完成后,就需要實現I/O函數,即填充驅動表中的函數了。對于字符型設備而言,打開設備操作與創建設備操作通常使用相同的函數,底層驅動中都用xxOpen( )完成;而設備驅動一旦安裝,就無需刪除, remove( )無效,因此在底層驅動中xxRemove( )為空。下面給出了ppiDrv驅動中ppiRead( )的實現模板。

int ppiRead(int ppiDevId,UCHAR *pBuf, int nByte)

{

PPI[CD#*2]DEV* pPpiDev= (PPI[CD#*2]DEV*)ppiDevId;

int ReadLength = ERROR;

UCHAR ch; 

if(pPpiDev == (PPI[CD#*2]DEV*)NULL)

{

errnoSet(S[CD#*2]PPI[CD#*2]NODEV);

return (ERROR);

}

if(pPpiDev->ReadyToRead)

{

ReadLength = 0; 

while(ReadLength < nByte)

{

if((pPpiDev->pinnum)PORTA) /* 如果輸入口為A*/

{

ch = ReadDigitalIO(0); /* 讀A 口數據*/

pBuf[ReadLength++] = ch;

}

/* 讀其他輸入口*/

} 

}

return (ReadLength);

}

完成以上3步,就基本實現了驅動程序,此時,在應用程序中可以用標準接口函數進行操作了。以打開ADT700中定時/計數器(驅動為pitDrv)為例。

int fd = open(\"/pit/timer\",O[CD#*2]RDWR,0);

此時,在shell用iosFdShow命令可以觀察到新創建的文件描述符“/pit/timer”。

4 結 語

本文以數據采集卡驅動程序為例,詳細介紹了VxWorks操作系統下字符設備驅動程序的開發過程。本驅動程序封裝了ADT700幾乎所有功能,支持標準的I/O系統接口函數。用戶可將ADT700當作文件,只需定義文件名建立文件描述符,而無需關心底層實現,即可完成對他的操作,從而縮短了應用程序開發時間,提高了效率。

參 考 文 獻

[1]盛博協同科技有限公司.SEM/ADT700技術手冊(版本1.2)[Z].2006.

[2]周啟平,張楊.VxWorks下設備驅動程序及BSP開發指南[M].北京:中國電力出版社,2006.

[3]李忠民,楊剛,顧亦然,等.ARM嵌入式VxWorks實踐教程[M].北京:北京航空航天大學出版社,2006.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。

主站蜘蛛池模板: 茄子视频毛片免费观看| 日韩欧美一区在线观看| 亚洲成人网在线播放| 国产成人综合在线观看| 亚洲免费播放| P尤物久久99国产综合精品| 激情视频综合网| 欧美人与牲动交a欧美精品 | 91福利在线观看视频| 国产幂在线无码精品| 1级黄色毛片| 日韩第八页| 人妻丰满熟妇AV无码区| 综合人妻久久一区二区精品| 国产成人精品一区二区三在线观看| 久久久久国色AV免费观看性色| 国产毛片不卡| 亚洲欧美日韩久久精品| 久久综合色天堂av| 亚洲日韩精品无码专区97| 在线国产91| 国产精品永久免费嫩草研究院| 青青青伊人色综合久久| av尤物免费在线观看| 青青青亚洲精品国产| 国产微拍一区| 欧美成人国产| 四虎成人精品在永久免费| 久久精品国产精品国产一区| 最新国产成人剧情在线播放 | 亚洲国产91人成在线| 国国产a国产片免费麻豆| 国产一区二区三区免费观看| 久久福利片| 蜜桃视频一区二区三区| 亚洲欧美激情小说另类| 免费无码网站| 国产网站免费| 思思热精品在线8| 亚洲第一中文字幕| 久久婷婷六月| 97成人在线视频| 啪啪免费视频一区二区| 国产美女无遮挡免费视频网站 | 黄色在线不卡| 91小视频在线观看免费版高清| 免费在线色| 国产精品网曝门免费视频| 一本大道香蕉中文日本不卡高清二区 | 亚洲精品男人天堂| 国产成人精品一区二区三在线观看| 91色在线观看| 国产自在线播放| 国产精品福利一区二区久久| a色毛片免费视频| 欧美亚洲欧美| 天堂网亚洲系列亚洲系列| 精品一区国产精品| 91欧美在线| 538国产视频| 性网站在线观看| 国产爽妇精品| 国产成在线观看免费视频| 国产va免费精品| 亚洲综合经典在线一区二区| 午夜不卡视频| 乱系列中文字幕在线视频| 中文字幕1区2区| 在线观看视频99| 国产免费久久精品99re丫丫一| 久久久久人妻一区精品色奶水| 国产欧美日韩另类精彩视频| 一级毛片在线播放免费| 996免费视频国产在线播放| 亚洲av无码专区久久蜜芽| 国产成人在线小视频| 久久午夜影院| 亚洲色成人www在线观看| 国产乱子伦精品视频| vvvv98国产成人综合青青| 欧美中文字幕无线码视频| 999国产精品永久免费视频精品久久 |