新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C2410及嵌入式Linux的氫氣濃度的檢測(cè)系統(tǒng)的解決方案

基于S3C2410及嵌入式Linux的氫氣濃度的檢測(cè)系統(tǒng)的解決方案

作者: 時(shí)間:2010-12-12 來源:網(wǎng)絡(luò) 收藏

2.3 ADC與微處理器接口電路

傳感器輸出信號(hào)頻率一般都遠(yuǎn)小于1 kHz。根據(jù)香農(nóng)采樣定理可知,采樣頻率至少要大于信號(hào)最高頻率的2倍。另外,為了滿足最小2 mg/m3的分辨率,這里采用美國(guó)ADI公司推出的一款高速低功耗串行12位8 通道A/D轉(zhuǎn)換器AD7888。它是單電源工作,電壓VDD范圍為2.7~5.25 V。AD7888有2.5 V的片內(nèi)基準(zhǔn)電壓,也可以使用外部基準(zhǔn)電壓,范圍從1.2 V到VDD。模擬輸入電壓從O到VREF,采樣頻率可高達(dá)125 kHz,可與多種串行接口(SPI/QSPI/MICROWIRE/DSP)兼容。

本監(jiān)測(cè)系統(tǒng)的核心處理器是三星公司推出的16/32位RISC處理器。它為手持設(shè)備和一般應(yīng)用提供了低價(jià)格、低功耗、高性能的小型微控制器提供了豐富的內(nèi)部設(shè)備:分開的16KB的指令Cache和16 KB的數(shù)據(jù)Cache,MMU虛擬存儲(chǔ)器管理,LCD控制器,支持NAND Flash系統(tǒng)引導(dǎo),系統(tǒng)管理器,3通道UART,4通道的DMA,4通道PWM定時(shí)器,I/O端口,RTC,8通道10位ADC和觸摸屏接口,I2C總線接口,USB主從機(jī),USB設(shè)備,SD主卡和MMC卡接口,2通道的SPI以及內(nèi)部PLL時(shí)鐘倍頻器等。

該系統(tǒng)利用SPI實(shí)現(xiàn)A/D轉(zhuǎn)換器與ARM處理器的數(shù)據(jù)傳輸,其接口電路如圖3所示。SPlCLK0為SPI串行時(shí)鐘信號(hào),SPIMISO0和 SPIMOSI0數(shù)據(jù)引腳用來發(fā)送和接收串行數(shù)據(jù)。nSS0作為SPI的片選信號(hào),低電平有效。

3 系統(tǒng)軟件結(jié)構(gòu)設(shè)計(jì)

本系統(tǒng)在上移植了韓國(guó)Mizi公司開發(fā)的Bootloader(VIVI)、-2.6.14內(nèi)核以及cramfs根文件系統(tǒng),構(gòu)建了具有操作系統(tǒng)的軟件環(huán)境。

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

設(shè)備驅(qū)動(dòng)程序是為特定硬件提供給用戶程序的一組標(biāo)準(zhǔn)化接口,它隱藏了設(shè)備工作的細(xì)節(jié)。但對(duì)于特定的硬件設(shè)備來說,其對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序不同,所以不同外部設(shè)備驅(qū)動(dòng)程序的開發(fā)是軟件設(shè)計(jì)過程中必不可少的一部分。

Linux常以模塊的形式加載設(shè)備,便于多個(gè)設(shè)備的協(xié)調(diào)工作也利于應(yīng)用程序的開發(fā)和擴(kuò)展。設(shè)備驅(qū)動(dòng)在加載時(shí)首先需要調(diào)用入口函數(shù)ini- t_module()。該函數(shù)完成設(shè)備驅(qū)動(dòng)的初始化工作,比如寄存器置位、結(jié)構(gòu)體賦值等。其中最重要的一個(gè)工作就是向內(nèi)核注冊(cè)該設(shè)備,字符設(shè)備調(diào)用函數(shù) register_chrdev()完成注冊(cè),塊設(shè)備調(diào)用函數(shù)reglster_blkdev()完成注冊(cè)。相應(yīng)地,設(shè)備驅(qū)動(dòng)在卸載時(shí)需要調(diào)用 cleanup_mod-ule()。該函數(shù)完成相應(yīng)資源的回收、設(shè)備的注銷、釋放主設(shè)備號(hào)和設(shè)備文件名等。字符設(shè)備利用 unregister_chrdev()注銷設(shè)備,塊設(shè)備利用unregister_blkdev()注銷設(shè)備。

Linux內(nèi)核中,每個(gè)設(shè)備驅(qū)動(dòng)程序都對(duì)應(yīng)一個(gè)file_operations數(shù)據(jù)結(jié)構(gòu)。在file_operations數(shù)據(jù)結(jié)構(gòu)中,定義了一些與此設(shè)備相關(guān)的打開、關(guān)閉、讀/寫、控制等功能函數(shù),當(dāng)用戶進(jìn)行系統(tǒng)調(diào)用時(shí),將自動(dòng)使用驅(qū)動(dòng)程序中特定的函數(shù)來實(shí)現(xiàn)具體的操作。實(shí)際上,編寫設(shè)備驅(qū)動(dòng)程序的過程也就是實(shí)現(xiàn)struct file_operations結(jié)構(gòu)中的部分所需函數(shù)的過程。

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

有了設(shè)備驅(qū)動(dòng)程序提供底層硬件與應(yīng)用程序的接口,Linux系統(tǒng)訪問底層設(shè)備就像訪問普通文件一樣。例如,打開設(shè)備使用系統(tǒng)調(diào)用open(),關(guān)閉設(shè)備使用系統(tǒng)調(diào)用close(),讀/寫設(shè)備使用系統(tǒng)調(diào)用read()和write()等。應(yīng)用程序流程如圖4所示。首先系統(tǒng)上電復(fù)位,程序初始化,然后掃描鍵盤值,看是否有鍵值按下。若有,則進(jìn)行按鍵處理并按輸入步驟設(shè)置程序;若無,則開中斷并啟動(dòng)A/D轉(zhuǎn)換,等待轉(zhuǎn)換完成產(chǎn)生中斷,進(jìn)入中斷服務(wù)程序。中斷服務(wù)程序流程如圖5所示。首先關(guān)閉中斷,讀取A/D采集數(shù)據(jù),調(diào)用適用于緩變信號(hào)的中值濾波算法處理轉(zhuǎn)換結(jié)果,將連續(xù)采樣的5次采樣值按大小排序,取中間值為本次有效值。然后,存儲(chǔ)處理后的數(shù)據(jù)并送顯示器顯示。最后,從中斷返回到主程序中,再判斷當(dāng)前數(shù)據(jù)是否超過設(shè)定的臨界值。若大于臨界值,作報(bào)警處理;否則就開中斷,等待下一次轉(zhuǎn)換結(jié)束。依此循環(huán)處理。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉