亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux的外部AD驅(qū)動(dòng)程序設(shè)計(jì)

        2015-05-21 03:59:34周海峰
        儀表技術(shù)與傳感器 2015年5期
        關(guān)鍵詞:驅(qū)動(dòng)程序調(diào)用中斷

        周海峰,李 俊,劉 嘉,陳 波

        (南京工業(yè)大學(xué)自動(dòng)化與電氣工程學(xué)院,江蘇南京 211816)

        0 引言

        現(xiàn)代工業(yè)自動(dòng)化控制中現(xiàn)場采集的信號(hào)多為模擬信號(hào),而處理器不能直接處理模擬信號(hào),因此就需要將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)以供處理器處理[1]。AD7606是一個(gè)8通道16位AD轉(zhuǎn)換芯片可采用并口、SPI口與處理器進(jìn)行數(shù)據(jù)通信。嵌入式Linux是一款開源的操作系統(tǒng),在ARM處理器中移植嵌入式Linux操作系統(tǒng)并進(jìn)行AD的驅(qū)動(dòng)編程可提高嵌入式系統(tǒng)數(shù)據(jù)采集精度,提高處理器資源利用率,增強(qiáng)系統(tǒng)可擴(kuò)展性。

        1 系統(tǒng)硬件

        本設(shè)計(jì)中AD轉(zhuǎn)換芯片采用AD7606,它是一款8通道16位同步采樣模數(shù)轉(zhuǎn)換器,可處理±10 V、±5 V雙極性輸入型號(hào),提供16位/8位并口總線和SPI串行數(shù)據(jù)總線與處理器數(shù)據(jù)交換。處理器采用S3C2440,為32位精簡指令集(RISC)微處理器,基于ARM920T核心,低功耗、簡單、精致且全靜態(tài)設(shè)計(jì)。系統(tǒng)接線如圖1所示。

        (1)OS為過采樣倍率引腳,可根據(jù)實(shí)際需求選擇無過采樣、2倍過采樣、4倍過采樣、8倍過采樣等,將3個(gè)OS引腳與ARM的GPIO口引腳相連,來控制采樣模式。

        (2)RAGE為量程范圍選擇引腳,當(dāng)RAGE引腳電平拉低表示信號(hào)輸入范圍、±5 V,反之要求信號(hào)輸入范圍為±10V。

        (3)CONVSTA、B為啟動(dòng)轉(zhuǎn)換開始控制腳,和ARM的GPB1腳相連,定時(shí)觸發(fā)AD芯片啟動(dòng)轉(zhuǎn)換。

        圖1 系統(tǒng)框圖

        (4)片選信號(hào)CS和RD信號(hào)與ARM的nGCS2相連,來控制轉(zhuǎn)換數(shù)據(jù)結(jié)果的讀取控制。

        (5)BUSY引腳接ARM的EINT1以中斷方式觸發(fā)ARM讀取轉(zhuǎn)換結(jié)果。

        (6)DB數(shù)據(jù)總線引腳和S3C2440的LDATA總線相連。

        2 系統(tǒng)軟件設(shè)計(jì)

        由于Linux操作系統(tǒng)開源代碼,支持的處理器品種多,具有可根據(jù)實(shí)際控制的需求對(duì)其進(jìn)行剪切的特點(diǎn)[2],其越來越多的被用于嵌入式中,加入Linux操作系統(tǒng)的嵌入式能更優(yōu)化的使用硬件資源,相比較于不加操作系統(tǒng)的嵌入式設(shè)備其性能更好擴(kuò)展性更高。本系統(tǒng)開發(fā)過程采用Linux的網(wǎng)路文件NFS系統(tǒng),可在計(jì)算機(jī)上面直接開發(fā)程序,調(diào)試過程直接通過網(wǎng)絡(luò)讀取硬盤上的內(nèi)核和文件系統(tǒng)可免去內(nèi)核制作燒錄Flash的麻煩。

        2.1 設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

        設(shè)備驅(qū)動(dòng)程序采用模塊化方式加載,由處理器定時(shí)觸發(fā)啟動(dòng)轉(zhuǎn)換,AD轉(zhuǎn)換器8路模擬輸入信號(hào)完成模數(shù)轉(zhuǎn)換后將BUSY信號(hào)線拉低來觸發(fā)處理器執(zhí)行讀數(shù)據(jù)操作,處理器讀數(shù)據(jù)時(shí)將CS和RD信號(hào)線拉低,AD根據(jù)讀取觸發(fā)信號(hào)將數(shù)據(jù)送到數(shù)據(jù)引腳,處理器讀取數(shù)據(jù)到內(nèi)存。

        2.1.1 模塊加載和卸載

        Linux采用模塊機(jī)制加載和卸載驅(qū)動(dòng)程序,可以在加入新驅(qū)動(dòng)程序的時(shí)候不用重新編譯內(nèi)核[3],另外在運(yùn)行的過程中不需要用的設(shè)備驅(qū)動(dòng)可以不加入內(nèi)存運(yùn)行,當(dāng)需要調(diào)用設(shè)備時(shí)候再由處理器調(diào)度加入內(nèi)存,這樣可大大提高設(shè)備的系統(tǒng)性能[4]。當(dāng)執(zhí)行輸入模塊加載指令時(shí)候,模塊初始化函數(shù)module_init()被調(diào)用,當(dāng)調(diào)用rmmod命令時(shí)候移除模塊,此時(shí)操作系統(tǒng)調(diào)用module_exit()模塊移除函數(shù)。

        (1)注冊(cè)模塊函數(shù)實(shí)現(xiàn)adcdev_init():

        若注冊(cè)成功misc_register()函數(shù)返回0。根據(jù)需要可將外部設(shè)備連接到內(nèi)存地址空間上或者連接到I/O地址空間,對(duì)于嵌入式設(shè)備,內(nèi)存一般使用很少,而ARM處理器支持1G內(nèi)存空間,所以可以將外部設(shè)備接到多余內(nèi)存空間上,這樣可以使用訪問內(nèi)存方式來讀寫外設(shè)數(shù)據(jù),在調(diào)用read函數(shù)讀取數(shù)據(jù)前需將物理地址映射到虛擬地址,在此調(diào)用ioremap()函數(shù)來實(shí)現(xiàn)。

        (2)卸載模塊函數(shù)實(shí)現(xiàn)adcdev_exit():

        調(diào)用雜設(shè)備注銷函數(shù)實(shí)現(xiàn)模塊移除。

        2.1.2 file_operations結(jié)構(gòu)體

        主要用來存儲(chǔ)驅(qū)動(dòng)模塊提供的對(duì)設(shè)備進(jìn)行各種操作的函數(shù)的指針。該結(jié)構(gòu)體的各個(gè)域都對(duì)應(yīng)驅(qū)動(dòng)模塊用來處理用戶層每個(gè)被請(qǐng)求的函數(shù)的地址,其實(shí)現(xiàn)如下。

        例如當(dāng)上層應(yīng)用軟件調(diào)用open()函數(shù)打開設(shè)備時(shí)候,驅(qū)動(dòng)程序便會(huì)調(diào)用驅(qū)動(dòng)程序的adcdev_open()函數(shù)返回打開的文件節(jié)點(diǎn)。

        2.1.3 設(shè)備打開接口函數(shù)

        該函數(shù)主要實(shí)現(xiàn)中斷的注冊(cè)和定時(shí)發(fā)送觸發(fā)信號(hào)和進(jìn)程的并發(fā)沖突。在上層多任務(wù)運(yùn)行的時(shí)候會(huì)出現(xiàn)同時(shí)訪問同一個(gè)資源的時(shí)候,如果處理不好則會(huì)出現(xiàn)數(shù)據(jù)覆蓋甚至內(nèi)核奔潰的情況,因此在編寫驅(qū)動(dòng)的時(shí)候加上互斥鎖[5],使得一個(gè)設(shè)備只能被一個(gè)進(jìn)程打開,在進(jìn)程結(jié)束之后釋放鎖以給其它進(jìn)程使用的機(jī)會(huì),在open()函數(shù)中調(diào)用down_trylock(&lock)來查詢?cè)O(shè)備狀態(tài)是否可被用,若沒有被征用則獲得鎖,當(dāng)然在進(jìn)程結(jié)束后要在close()函數(shù)加入up(&lock)釋放鎖。

        設(shè)置GPB1為PWM輸出引腳,并實(shí)現(xiàn)5kHZ的采用頻率,主要配置如下:

        在open函數(shù)注冊(cè)中斷,設(shè)置為EINT1中斷輸入,中斷的實(shí)現(xiàn)函數(shù)為adcdev_interrupt(),中斷的觸發(fā)方式為下降沿觸發(fā)。

        2.1.4 中斷服務(wù)函數(shù)

        當(dāng)AD芯片轉(zhuǎn)換完后拉低BUSY引腳,從而觸發(fā)ARM的中斷響應(yīng),采用中斷避免了處理器不斷查詢導(dǎo)致的資源浪費(fèi),這樣處理器可以將時(shí)間片分配給其它進(jìn)程,提高了系統(tǒng)的運(yùn)行效率。聲明等待隊(duì)列以實(shí)現(xiàn)阻塞型輸入[6],在讀取完數(shù)據(jù)之后調(diào)用wake_up_interruptible()喚醒等待的進(jìn)程。

        當(dāng)調(diào)用readw()時(shí)CS和RD引腳電平會(huì)被拉低,AD芯片會(huì)將AD轉(zhuǎn)化果從緩存區(qū)送到數(shù)據(jù)引腳。Linux下執(zhí)行著多個(gè)進(jìn)程,在中斷執(zhí)行的過程中如果有更高優(yōu)先級(jí)的中斷發(fā)生則會(huì)響應(yīng)更高級(jí)中斷可能會(huì)覆蓋一些變量[7],為了可靠性執(zhí)行中斷處理函數(shù)過程中需禁止其它中斷,在中斷服務(wù)函數(shù)中調(diào)用local_irq_disable()函數(shù)。

        2.1.5 讀取AD轉(zhuǎn)換結(jié)果

        Linux用戶層和內(nèi)核層分開,當(dāng)用戶層調(diào)用硬件讀取數(shù)值時(shí)候要通過調(diào)用copy_to_user()將數(shù)據(jù)傳送到用戶層。一般情況下在上層讀取數(shù)據(jù)而AD未轉(zhuǎn)換完時(shí),進(jìn)程就會(huì)一直等待,直到AD轉(zhuǎn)換完并觸發(fā)中斷程序讀取數(shù)據(jù)后才能將數(shù)據(jù)讀到用空間[8],在此期間CPU還是會(huì)分配給該線程時(shí)間片,這樣就浪費(fèi)了CPU的資源,因此在此采用阻塞的方式進(jìn)行讀取。建立等待隊(duì)列,在中斷函數(shù)響應(yīng)完后會(huì)喚醒等待讀取數(shù)據(jù)的進(jìn)程[9],該進(jìn)程在等待期間為睡眠狀態(tài),處理器可以將該睡眠狀態(tài)的進(jìn)程的時(shí)間片分給其它進(jìn)程以提高處理器多任務(wù)處理的能力。

        2.2 驅(qū)動(dòng)程編譯加載

        在編寫驅(qū)動(dòng)的同一目錄下編寫Makefile文件并執(zhí)行make命令,后將生成的adc.ko文件拷貝到網(wǎng)絡(luò)文件相關(guān)文件夾,開啟嵌入式系統(tǒng),到相關(guān)目錄執(zhí)行insmod adc.ko命令。

        2.3 應(yīng)用程序設(shè)計(jì)

        用戶空間在調(diào)用設(shè)備驅(qū)動(dòng)讀取參數(shù)時(shí)候應(yīng)先調(diào)用open()函數(shù)打開設(shè)備找到相關(guān)文件節(jié)點(diǎn)[10],然后調(diào)用相關(guān)的讀寫控制函數(shù)進(jìn)行讀寫和控制。

        3 系統(tǒng)測試

        將1號(hào)、5號(hào)通道加載3 V電,8號(hào)通道加載5 V電,其余通道接地,運(yùn)行應(yīng)用程序,將相關(guān)引腳接入示波器觀測AD轉(zhuǎn)換讀取狀態(tài),示波器波形如圖2所示,其中CH1為PWM啟動(dòng)AD轉(zhuǎn)化信號(hào),CH3為讀取信號(hào),CH4為轉(zhuǎn)AD換完信號(hào)。

        從圖2中可看出AD芯片在啟動(dòng)轉(zhuǎn)換后正常發(fā)出轉(zhuǎn)換完標(biāo)志,CONVA,B信號(hào)觸發(fā)驅(qū)動(dòng)程序中斷響應(yīng),中斷函數(shù)在接收到中斷信號(hào)后發(fā)出讀取8通道轉(zhuǎn)換結(jié)果信號(hào)。

        圖2 數(shù)模轉(zhuǎn)換引腳信號(hào)顯示

        在客戶端Linux操作系統(tǒng)輸入kermit啟動(dòng)串口客戶端,接收嵌入式系統(tǒng)讀出的轉(zhuǎn)換結(jié)果如圖3所示。

        圖3 數(shù)模轉(zhuǎn)換結(jié)果

        4 結(jié)束語

        現(xiàn)有的ARM處理器內(nèi)部雖然集成了AD轉(zhuǎn)換器但大多為10位或13位,在測量控制要求較高的場合利用外部AD可實(shí)現(xiàn)更高精度的數(shù)據(jù)采集。同時(shí)若在外部開發(fā)的嵌入設(shè)備中加入嵌入式Linux操作系統(tǒng)可使硬件資源得到優(yōu)化使用,且能提高系統(tǒng)的性能和擴(kuò)展性,同時(shí)可剪切的設(shè)計(jì)可大大降低設(shè)備的硬件要求。本系統(tǒng)外擴(kuò)了16位AD芯片,采用動(dòng)態(tài)模塊方式編寫驅(qū)動(dòng),采用這種方式節(jié)省了內(nèi)存的使用空間,經(jīng)測式系統(tǒng)安全可執(zhí)行,有廣泛的應(yīng)用空間。

        [1]李偉.基于專用信號(hào)采集設(shè)備的電路板故障診斷系統(tǒng)研究:[學(xué)位論文].武漢:武漢理工大學(xué),2012

        [2]CORBET J,RUBINI A,HARTMAN G K.LINUX DEVICE DRIVER.3rd ed.United States of America:O'Reilly Media Inc,2005.

        [3]陸爾東,鄧?yán)?,符意德,?Linux下的設(shè)備驅(qū)動(dòng)及其管理機(jī)制.計(jì)算機(jī)應(yīng)用,2003(1):124-125.

        [4]潘玲嬌.嵌入式16通道同步數(shù)據(jù)采集系統(tǒng)設(shè)計(jì).儀表技術(shù)與傳感器,2013(11):91 -93.

        [5]楊宗德.Linux高級(jí)程序設(shè)計(jì).北京:人民郵電出版社,2008.

        [6]LOVE R.Linux Kernel Development.3rd ed.United States of America:Addison - Wesley Professional,2010.

        [7]張磊,王學(xué)慧.Linux內(nèi)核調(diào)試技術(shù).計(jì)算機(jī)工程,2003,29(10):81-83.

        [8]陳鼐.基于ARM的嵌入式數(shù)據(jù)采集與處理系統(tǒng):[學(xué)位論文].南京:南京航空航天大學(xué),2007.

        [9]顏庭柏,陳鐘榮.嵌入式系統(tǒng)數(shù)據(jù)采集和發(fā)布的構(gòu)建.計(jì)算機(jī)工程,2007,33(19):270 -272.

        [10]艾紅,鄧大偉,鄺野.遠(yuǎn)程數(shù)據(jù)采集和監(jiān)測系統(tǒng)研究.自動(dòng)化儀表,2012,33(8):31 -33.

        猜你喜歡
        驅(qū)動(dòng)程序調(diào)用中斷
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        跟蹤導(dǎo)練(二)(5)
        千里移防,衛(wèi)勤保障不中斷
        解放軍健康(2017年5期)2017-08-01 06:27:44
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        AT89C51與中斷有關(guān)的寄存器功能表解
        FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
        驅(qū)動(dòng)程序更新與推薦
        驅(qū)動(dòng)程序更新與推薦
        一个人的视频免费播放在线观看| 免费xxx在线观看| 国产免费资源高清小视频在线观看 | 国产精品成年片在线观看| 在线免费欧美| 日本高清成人一区二区三区 | 在线日本高清日本免费| av免费在线免费观看| 真人做爰片免费观看播放| 欧美亚洲国产另类在线观看| 中文字幕一区二区三在线| 久久精品亚州中文字幕| 午夜福利试看120秒体验区| 伊人22综合| 中文字幕久久熟女人妻av免费| 亚洲桃色视频在线观看一区 | 亚洲av网一区天堂福利| 经典三级免费看片天堂| 末成年女a∨片一区二区| 欧美成人久久久| 少妇人妻字幕一区二区| 国产乱码人妻一区二区三区| 人妻丝袜无码国产一区| 国产精品三级在线专区1| 亚洲av本道一本二本三区| 成人内射国产免费观看| 国产一区二区三区av在线无码观看| 亚洲欧美v国产蜜芽tv| 亚洲av高清天堂网站在线观看| 亚洲熟妇av日韩熟妇在线| 欧美日韩精品福利在线观看| 亚洲国产中文字幕九色| 久久精品国产99国产精品澳门| 猫咪免费人成网站在线观看| 久久久久亚洲AV无码专区一区| 亚洲一区二区三区99| 特黄特色的大片观看免费视频| 欧美日韩中文字幕久久伊人| 亚洲天码一区二区三区| 免费无码高潮流白浆视频| 四虎精品成人免费观看|