觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告_第1頁
觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告_第2頁
觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告_第3頁
觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告_第4頁
觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、觸摸屏控制實(shí)驗(yàn)設(shè)計(jì)報(bào)告序隨著中國工業(yè)化的快速發(fā)展,對工業(yè)自動(dòng)化控制的要求也在不斷提高和完善。觸摸屏作為一種可視化的人機(jī)界面,以其體積小、可靠性高的特點(diǎn)逐漸取代傳統(tǒng)的按鈕控制和儀表控制,成為工業(yè)控制中人機(jī)界面的主流。本文分析了觸摸屏設(shè)備的特點(diǎn)、國外現(xiàn)狀和發(fā)展趨勢,設(shè)計(jì)了一種基于嵌入式實(shí)時(shí)操作系統(tǒng)WinCE5.0和ARM9系列AT91SAM9261為核心處理器的大型觸摸屏控制器??紤]到觸摸屏設(shè)備的功能需求,提出了本課題的設(shè)計(jì)指標(biāo),制定了觸摸屏控制器的總體設(shè)計(jì)方案,具體體現(xiàn)在控制器硬件設(shè)計(jì)和操作系統(tǒng)移植兩個(gè)方面。硬件平臺(tái)采用模塊化、結(jié)構(gòu)化的思想進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。分析了觸摸屏控制器中的主要硬件模塊,包括

2、處理器核心模塊、存儲(chǔ)模塊、觸摸屏模塊、鍵盤模塊、以太網(wǎng)模塊和USB主從模塊,并給出了硬件設(shè)計(jì)方法和電路實(shí)現(xiàn)。硬件測試環(huán)境的建立是為了調(diào)試我弟弟的硬件模塊?;诖罱ǖ挠布脚_(tái),本文重點(diǎn)研究了嵌入式操作系統(tǒng)WinCE 5.0的移植和BSP的開發(fā)。分析了WinCE 5.0操作系統(tǒng)的架構(gòu)和移植原理,在了解了三星公司的S3C2410 BSP之后,給出了基于AT91SAM9261的WinCE 5.0 BSP的開發(fā)過程。詳細(xì)分析了WinCE 5.0 Bootloader的工作原理和體系結(jié)構(gòu)。根據(jù)觸摸屏系統(tǒng)的功能需求和硬件資源的分配,設(shè)計(jì)了觸摸屏設(shè)備的Bootloader,并給出了具體的開發(fā)步驟。深入研究了O

3、AL的功能和原理,詳細(xì)給出了OAL開發(fā)中的重要功能和主要模塊。針對觸摸屏控制器的主要硬件模塊,在分析WinCE 5.0中斷模型和中斷機(jī)制的基礎(chǔ)上,開發(fā)了觸摸屏驅(qū)動(dòng)程序、矩陣鍵盤驅(qū)動(dòng)程序和USB主機(jī)驅(qū)動(dòng)程序。在開發(fā)的BSP的基礎(chǔ)上,利用WinCE 5.0操作系統(tǒng)定制工具Plarform Builder對操作系統(tǒng)內(nèi)核進(jìn)行定制和編譯,并對操作系統(tǒng)的性能進(jìn)行測試。測試結(jié)果表明,WinCE 5.0操作系統(tǒng)能夠成功移植到觸摸屏控制器上,能夠滿足工業(yè)現(xiàn)場的實(shí)時(shí)性要求。本課題對于基于ARM9和WinCE的觸摸屏設(shè)備的開發(fā)具有較高的參考價(jià)值,對于基于ARM和WinCE的其他開發(fā)也具有一定的參考價(jià)值。關(guān)鍵詞:觸摸

4、屏;Clinux;司機(jī);C/OS-II;S _ CPU _ A . ASM前言1.1課題的研究背景目前,隨著計(jì)算機(jī)技術(shù)的發(fā)展,人們對電子產(chǎn)品的要求越來越高,不僅要求其具有良好的性能、可靠性和通用性,還要求其設(shè)計(jì)美觀、操作人性化。觸摸屏和手寫漢字輸入就是這種需求的產(chǎn)物,這些技術(shù)已經(jīng)廣泛滲透到我們的生活中。比如銀行查詢系統(tǒng),ATM機(jī),高端手機(jī)上的手寫輸入法,各種手寫板,都是這個(gè)領(lǐng)域的產(chǎn)品。隨著觸摸屏技術(shù)的不斷改進(jìn)和創(chuàng)新,越來越多的電子產(chǎn)品使用觸摸屏作為輸入設(shè)備,對用戶來說非常方便和直觀。而且省去了鍵盤和按鍵,可以增加便攜式電子展品的屏幕尺寸,給用戶帶來非常舒適的視覺效果。對于產(chǎn)品設(shè)計(jì)師來說,設(shè)計(jì)產(chǎn)

5、品更加靈活,更容易推出個(gè)性化的產(chǎn)品。觸摸屏使得人機(jī)交互只需要手指觸摸就能完成操作。操作簡單直觀,經(jīng)久耐用,節(jié)省空間。2077年6月,蘋果推出iPhone Handpad,掀起了觸摸屏應(yīng)用于電子設(shè)備的高潮。其用戶界面設(shè)計(jì)更加人性化。你可以點(diǎn)擊空的觸摸屏代替按鍵和滾輪來完成手機(jī)的所有操作,而且它還增加了很多按鍵操作無法實(shí)現(xiàn)的功能。顯然,它是一個(gè)多媒體娛樂平臺(tái)。課件好的觸摸屏產(chǎn)品很受用戶歡迎,將是未來高檔電子產(chǎn)品不可或缺的輸入設(shè)備。目前,漢字輸入電腦、手機(jī)等電子產(chǎn)品的主要方式是飲馬和形碼。但是如果我們使用的電子輸入設(shè)備是觸摸屏,我們會(huì)更傾向于使用手寫輸入。事實(shí)上,將漢字輸入電腦等電子設(shè)備一直是中國使

6、用和設(shè)計(jì)各種電子產(chǎn)品的難題。電腦方面,馬殷輸入法有智能雙拼、微軟雙頻、紫光拼音輸入法、搜狗輸入法等。,但是如果用戶不知道這個(gè)漢字的讀音,會(huì)很麻煩,重碼率很高,影響輸入率。對于形碼輸入法,流行王碼和王碼。兩種輸入法都是基于漢字分解成根,根對應(yīng)不同的字母鍵,通過這種編碼方式獲得漢字的輸入。這種方法重碼率低,輸入速度快,但缺點(diǎn)是用戶區(qū)需要學(xué)習(xí)記憶根碼。但如果用觸摸屏輸入漢字(即在線輸入),則符合漢字通常的書寫習(xí)慣,用戶使用起來更容易。這種輸入法的關(guān)鍵技術(shù)在于手寫字符的識(shí)別,要解決的問題是一個(gè)類別數(shù)量很大的模式識(shí)別問題。隨著模式識(shí)別、計(jì)算機(jī)等技術(shù)的發(fā)展,在線漢字輸入系統(tǒng)現(xiàn)在已經(jīng)比較成熟,很多產(chǎn)品已經(jīng)成

7、功應(yīng)用到現(xiàn)實(shí)生活中,收到了良好的反響。1.2觸摸屏技術(shù)簡介觸摸屏于20世紀(jì)70年代問世,1971年由美國人薩姆赫特發(fā)明。因?yàn)楦鞣N技術(shù)人員的原因,70年代以后觸摸屏技術(shù)發(fā)展相對緩慢。當(dāng)時(shí)它的響應(yīng)速度、可靠性、使用壽命、對惡劣環(huán)境的適應(yīng)能力都差強(qiáng)人意。現(xiàn)在這種情況得到了很大的改善,也正是因?yàn)檫@種改善,才掀起了一波觸摸屏應(yīng)用的熱潮。目前觸摸屏技術(shù)有很多種,包括矢量壓力傳感器觸摸屏、電阻感應(yīng)觸摸屏、紅外觸摸屏、電容感應(yīng)重靜音觸摸屏、表面聲波觸摸屏等。其中矢量壓力傳感器的觸摸屏已經(jīng)從歷史舞臺(tái)上消失,現(xiàn)在廣泛使用的是其他四種方式。下面簡單介紹一下這些技術(shù)。1.2.1個(gè)電阻式觸摸屏電阻式觸摸屏分為四線電阻式

8、觸摸屏和五線電阻式觸摸屏。在四線電阻式觸摸屏的兩個(gè)透明導(dǎo)電層上施加5V的恒定電壓,兩個(gè)導(dǎo)電層引出兩條導(dǎo)線,即支路值和水平觸摸點(diǎn)。只有經(jīng)過4個(gè)步驟才能完成觸摸點(diǎn)檢測功能。該原理將在后面詳細(xì)描述。這種觸摸屏分辨率高,感應(yīng)響應(yīng)速度快,需要在系統(tǒng)運(yùn)行時(shí)進(jìn)行一次校正。穩(wěn)定性高,無浮感。五線電阻觸摸屏的基本層是通過精密的電阻網(wǎng)絡(luò)在玻璃的導(dǎo)電層上加上垂直和水平兩個(gè)電壓長度。外部鎳-金導(dǎo)電層僅用作純導(dǎo)電層。電的導(dǎo)電層需要引出四根線,外層的導(dǎo)電層會(huì)引出一根線。在圖1.1中,我們給出了它的原理圖。四根導(dǎo)線從第一導(dǎo)電層引出,一根導(dǎo)線從外部導(dǎo)電層引出。通過在觸摸后及時(shí)檢測IT0(氧化銦錫)層接觸點(diǎn)的X軸和Y軸的電壓值

9、來測量觸摸點(diǎn)的位置。它的特點(diǎn)是:分辨率高,傳輸響應(yīng)快,需要一次校正,穩(wěn)定性高,無觸摸飄逸現(xiàn)象,價(jià)格高,對外部導(dǎo)電層的劃傷有很好的容忍度,這是四線電阻式觸摸屏所不具備的。1.2.2電容式觸摸屏電容式觸摸屏是四層玻璃屏幕。最外層只有0.0015mm厚的二氧化硅玻璃保護(hù)層,然后夾在IT0(IT0是透明導(dǎo)體銦錫氧化物)和IT0層之間,最里層是玻璃基層。玻璃瓶表面和夾層涂有這兩層不同功能的IT0導(dǎo)電層。IT0層用作屏蔽層,以確保良好的工作環(huán)境。夾層的IT0層作為檢測和定位的工作層,在四個(gè)角或四個(gè)邊引出四個(gè)電極。這四個(gè)電極在導(dǎo)體中形成低壓交流電場。當(dāng)我們觸摸石英玻璃保護(hù)層時(shí),手指和工作表面之間形成的耦合電

10、容會(huì)吸走非常小的電流。這個(gè)電流從四個(gè)角或者四邊的電極流出,這個(gè)電流信息和手指到四個(gè)角的距離成正比。通過這種方法,可以精確地計(jì)算觸摸點(diǎn)的位置。這種觸摸屏可以很好的保護(hù)導(dǎo)體,防止外界環(huán)境對觸摸屏的影響。比如觸摸屏在被污染、油污、灰塵的情況下依然可以很好的工作。但是耦合電容不穩(wěn)定,會(huì)導(dǎo)致觸點(diǎn)“流動(dòng)”。目前,解決這一問題的主要方法是切斷校準(zhǔn)方法。1.2.3個(gè)紅外觸摸屏觸摸屏在顯示器外配有外框,外框上配有紅外發(fā)生裝置和接收傳感裝置,使屏幕的四邊形成為縱橫交叉的紅外矩陣。當(dāng)手指或其他物體阻擋了穿過該位置的水平和垂直紅外線時(shí),相應(yīng)位置的接收信號急劇下降,從而完成對觸摸點(diǎn)坐標(biāo)的檢測。下面的圖1.2是紅外觸摸屏

11、的示意圖。這種觸摸屏價(jià)格昂貴,不受電流和靜電干擾,可以安裝。方便。1.2.4表面聲波觸摸屏表面聲波是一種沿介質(zhì)表面?zhèn)鞑サ臋C(jī)械波。觸摸屏包括聲波產(chǎn)生和接收裝置。觸摸屏的左上角和右下角分別固定有垂直和水平超聲波發(fā)射器,右上角固定有兩個(gè)對應(yīng)的超聲波接收器。屏幕四邊由疏到密45度角刻有非常精準(zhǔn)的反射條紋。當(dāng)發(fā)射器發(fā)射窄脈沖時(shí),聲能通過不同的路徑到達(dá)接收器,最早的在右邊,最晚的在左邊。接收到的信號是在X軸方向通過不同路徑的所有聲信號的集合。該波形信號的時(shí)間軸反映了疊加前原始波形的位置,即X軸坐標(biāo)。當(dāng)發(fā)射信號和接收信號波形之間沒有接觸時(shí),接收信號波形與參考波形完全相同。當(dāng)手指或其他能吸收或阻擋聲波能量的物

12、體接觸屏幕時(shí),X軸上從手指部分向上的聲波能量被部分吸收,接收到的波形中必然存在一個(gè)衰減間隙,即在某一時(shí)刻。這樣就可以確定觸摸位置的X軸坐標(biāo),同樣可以得到對應(yīng)的Y軸坐標(biāo)。圖1.3是表面聲波觸摸觸摸屏示意圖。這種觸摸屏具有分辨率高、耐刮擦、壽命長、透光率高等優(yōu)點(diǎn),安裝時(shí)只需校準(zhǔn)一次。適合安裝在公共場所。1.3本文的主要內(nèi)容和結(jié)構(gòu)安排本文主要討論如何實(shí)現(xiàn)一個(gè)基于觸摸屏控制器的聯(lián)機(jī)手寫漢字識(shí)別系統(tǒng)。首先,介紹了觸摸屏控制器的硬件結(jié)構(gòu)和固件編程。獲取觸摸點(diǎn)數(shù)據(jù)后,通過模式識(shí)別對數(shù)據(jù)信息進(jìn)行處理,判斷觸摸屏上書寫的字符。字符識(shí)別處理包括預(yù)處理、歸一化、特征形成和特征提取,生成字庫,最后搜索字庫得到字符。第

13、二章是觸摸屏控制器的硬件設(shè)計(jì)。2.1硬件設(shè)計(jì)本設(shè)計(jì)中硬件平臺(tái)微處理器為摩托羅拉公司的MC68VZ328,是M68k系統(tǒng)的32位低功耗微處理器。它采用SoC技術(shù)設(shè)計(jì),具有典型嵌入式微處理器的特征。觸摸屏選用TI(原來是Burr-Brown公司的產(chǎn)品),因?yàn)樵摴疽驯籘I公司收購,所以以下使用TI公司的ADS7843。本設(shè)計(jì)中,CPU和觸摸屏工作在主從模式,觸摸屏工作在從狀態(tài)。本設(shè)計(jì)中的硬件電路不同于傳統(tǒng)設(shè)計(jì),而是充分利用了ADS7843中的忙信號線,如圖1所示。ADS7843是一款四線電阻式觸摸屏控制芯片,主要完成兩件事:一是完成電極電壓的切換;其次,采集接觸點(diǎn)的電壓值。它由兩層透明的電阻導(dǎo)體層

14、組成,導(dǎo)體層中間填充有由粘性絕緣液體材料制成的隔離層和由具有良好導(dǎo)電性的材料制成的電極。觸摸屏工作時(shí),上下導(dǎo)體層相當(dāng)于一個(gè)電阻網(wǎng)絡(luò),如圖2所示。當(dāng)在某一層電極上施加電壓時(shí),會(huì)在網(wǎng)絡(luò)上形成電壓梯度。如果有外力使上下兩層在某一點(diǎn)接觸,可以在另一層上不加電壓的情況下測量接觸點(diǎn)的電壓,從而知道接觸點(diǎn)的坐標(biāo)。例如,如果將電壓施加到頂部電極(X+,X-),將在頂部導(dǎo)體層上形成電壓梯度;當(dāng)外力使上下兩層在某一點(diǎn)接觸時(shí),可以在底層測出接觸點(diǎn)的電壓,然后根據(jù)電壓與電極(X+)的距離關(guān)系就可以知道該點(diǎn)的X坐標(biāo)。然后,將電壓切換到底部電極(Y+,Y-),在頂層測量接觸點(diǎn)的電壓,這樣就知道了Y坐標(biāo)。要在水平和垂直導(dǎo)體

15、層之間切換電壓以進(jìn)行A/D轉(zhuǎn)換,需要通過串行外設(shè)接口(SPI)向ADS7843發(fā)送一個(gè)控制字,然后在轉(zhuǎn)換完成后通過SPI讀出電壓轉(zhuǎn)換值。2.2觸摸屏硬件原理介紹在開始寫觸摸屏驅(qū)動(dòng)之前,我們必須對硬件的工作原理有一個(gè)基本的了解。許多不同的觸摸技術(shù)會(huì)將屏幕上某個(gè)位置的壓力或接觸轉(zhuǎn)換為有意義的數(shù)字坐標(biāo)。典型的觸摸技術(shù)包括 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏表面聲波觸摸屏、紅外觸摸屏和電容式觸摸屏。如果你想了解更

16、多這些技術(shù),可以登錄elotouch或者apollodisplays。這里是重點(diǎn)。 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏。電阻式觸摸屏非常受歡迎,您會(huì)發(fā)現(xiàn)許多評估板和開發(fā)套件都集成了電阻式觸摸屏。電阻式觸摸屏受歡迎的主要原因是它們價(jià)格便宜,可以直接與用戶的系統(tǒng)電連接。它叫做 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/

17、ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏,因?yàn)樗鼈儽举|(zhì)上是電阻分壓器。它們由兩層薄電阻層組成,中間隔著一層非常薄的絕緣層,絕緣層通常以塑料顆粒的形式存在。當(dāng)你觸摸屏幕時(shí),它會(huì)使兩個(gè)薄電阻層變形,足以在它們之間建立電連接。然后軟件通過檢測分壓器上產(chǎn)生的電壓來計(jì)算兩層的短路位置,最終確定觸摸位置。 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏有“四線”、“五行”、“八

18、線”等幾種類型。線越多,精度越高,溫漂越小,但基本操作是一樣的。在最簡單的四線設(shè)計(jì)中,有一個(gè)稱為“X軸”的電阻層,其上施加一定的電壓,另一個(gè)稱為“Y軸”的電阻層作為接收層,測量X軸位置對應(yīng)的電壓值。這個(gè)過程再反過來執(zhí)行,即Y軸層上電,X軸層用于電壓檢測。圖2是 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏的簡單等效電路。注意兩個(gè)完全獨(dú)立的讀數(shù),即X軸位置數(shù)據(jù)和Y軸位置數(shù)據(jù)。在四線或五線電阻式觸摸屏中,無法同時(shí)讀取這

19、些數(shù)據(jù)。軟件必須先讀取一個(gè)軸,然后再讀取另一個(gè)軸。閱讀的順序無關(guān)緊要。將 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏需要一個(gè)模數(shù)轉(zhuǎn)換器(ADC)將產(chǎn)生的電壓轉(zhuǎn)換成數(shù)字信號。直到最近,這個(gè)ADC幾乎一直是主CPU的外圍設(shè)備。Burr Brown NS7843或NS7846是ADC控制器。圖2:觸摸屏電路的簡單等效電路。制造者。該設(shè)備是一個(gè)12位模數(shù)轉(zhuǎn)換器,其嵌入式邏輯電路通過交替激勵(lì)一個(gè)薄層,然后從另一個(gè)層進(jìn)行轉(zhuǎn)換

20、來控制觸摸屏。雖然可以使用GPIO等信號線來完成薄層上電的切換,但是這種設(shè)備可以分擔(dān)很多任務(wù),還可以提供一種產(chǎn)生觸摸或筆壓中斷的方式。2.3基于兩種CPU的參考板第一塊板是飛思卡爾的MX9823ADS評估板,采用飛思卡爾的MC9328MX1處理器。評估板可直接從Freescale經(jīng)銷商處訂購。評估套件包括QVGA(240 x320)彩色LCD和觸摸屏。第二塊板采用夏普LH79524 ARM處理器。夏普的這種參考板可以從LogicPD公司訂購,并帶有集成的顯示器和觸摸套件。有幾種可更換的顯示器套件可供選擇,分辨率從QVGA到800 x600像素不等。本文不提供每個(gè)驅(qū)動(dòng)程序的詳細(xì)代碼,而是介紹驅(qū)動(dòng)

21、程序的設(shè)計(jì)和流程,并重點(diǎn)介紹引言的重要部分。讀者可以從FTP:/FTP . embedded ./pub/2005/07 Maxwell下載每個(gè)驅(qū)動(dòng)的全部源代碼。一般來說,軟件提供的功能完成以下步驟:1.配置控制器硬件。2.確定屏幕是否被觸摸。3.獲得穩(wěn)定和去抖動(dòng)的位置測量數(shù)據(jù)。4.校準(zhǔn)觸摸屏5.將觸摸狀態(tài)和位置變化信息發(fā)送到更高級別的圖形軟件。2.4硬件配置觸控驅(qū)動(dòng)要做的第一件事就是配置硬件。對于這些集成控制器,這意味著通過將數(shù)據(jù)寫入映射到存儲(chǔ)器的寄存器中,控制器被配置為某個(gè)狀態(tài)。這個(gè)過程由每個(gè)驅(qū)動(dòng)程序中的TouchConfigureHardware()執(zhí)行。 HYPERLINK ./%20

22、%20%20%20:/%20%20%20%20cellphone.eet-china%20%20%20%20/ART_8800449933_2000007_TA_d83fc14e.HTM t _blank 函數(shù)已完成。至于觸控驅(qū)動(dòng)是否應(yīng)該使用中斷驅(qū)動(dòng),其實(shí)例子中的驅(qū)動(dòng)使用的是中斷驅(qū)動(dòng)模式。坦率地說,我這樣做是因?yàn)槭褂弥袛嗪苡腥?。不要從這個(gè)例子推斷出使用中斷永遠(yuǎn)是最好的或者最正確的設(shè)計(jì)方法,也不要聽別人說不使用中斷驅(qū)動(dòng)方法的觸控驅(qū)動(dòng)是“錯(cuò)誤的”。這只是因?yàn)椤拜喸儭睂τ谇度胧较到y(tǒng)程序員來說似乎是一個(gè)貶義詞。我曾經(jīng)問過一位客戶,他的輸入設(shè)備是在輪詢還是在中斷服務(wù)。答案是“這是嵌入式系統(tǒng),我們不做任何

23、輪詢”。當(dāng)時(shí)問這個(gè)問題的時(shí)候覺得自己像個(gè)傻子,但是進(jìn)一步討論之后發(fā)現(xiàn)query其實(shí)是一個(gè)合理的,值得考慮的。如果使用RTOS,經(jīng)常會(huì)中斷所有的任務(wù)來等待某種外部事件,處理器經(jīng)常處于空閑循環(huán)狀態(tài),沒有什么有意義的事情可做。在這種情況下,使用空閑任務(wù)來查詢觸摸屏上的輸入可能是更好的設(shè)計(jì)方式。根據(jù)你的整體系統(tǒng)需求,查詢可能也是一個(gè)值得考慮的合理設(shè)計(jì)方法。中斷配置的方法因具體的操作系統(tǒng)而異。讀者會(huì)發(fā)現(xiàn),每個(gè)受支持的RTOS都有一個(gè)受(#ifdef)限制的代碼段。在所有情況下,驅(qū)動(dòng)程序?qū)嶋H上使用兩種不同的中斷:1.第一次觸摸屏幕時(shí)喚醒主機(jī)的中斷稱為PEN_DOWN中斷。2.當(dāng)一組模擬-數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換完成時(shí)

24、的第二個(gè)中斷信號。下一個(gè)問題是,我們希望以多快的速度從ADC接收采樣輸入讀數(shù)。采樣速度將影響我們需要如何配置時(shí)鐘來驅(qū)動(dòng)觸摸屏和ADC。我們希望時(shí)鐘足夠快,以提供響應(yīng)性輸入并實(shí)現(xiàn)精確跟蹤,但又不能太快,以免影響轉(zhuǎn)換精度或使系統(tǒng)功耗超出要求。根據(jù)我的經(jīng)驗(yàn),觸摸屏需要以至少20Hz或50 ms的速度向上級軟件提供位置更新數(shù)據(jù),只要上級軟件能跟上,越快越好。我們不太擔(dān)心功耗。如果觸摸輸入響應(yīng)比這慢得多,則在用戶的觸摸輸入和顯示屏上可觀察到的響應(yīng)之間會(huì)有明顯且令人討厭的滯后。20Hz的更新速度聽起來沒有太大的挑戰(zhàn),但是提供20Hz的更新速度實(shí)際上需要采樣速度接近200Hz。具體數(shù)值取決于在確保輸入穩(wěn)定之

25、前,我們準(zhǔn)備取多少讀數(shù)。為了去抖動(dòng)和平均觸摸輸入位置的值,我們需要過采樣。 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏,尤其是便宜的,通常會(huì)有很多噪音和抖動(dòng)。圖3:X軸移動(dòng)時(shí)Y軸上的偏移。在向更高級別的軟件發(fā)送位置更新數(shù)據(jù)之前,駕駛員需要對每個(gè)軸上的輸入進(jìn)行多次采樣。默認(rèn)情況下,我們提供的驅(qū)動(dòng)器將以至少200Hz(5ms)的采樣速率配置各自處理器上的ADC時(shí)鐘。通過這種方式,驅(qū)動(dòng)器可以對輸入的原始數(shù)據(jù)進(jìn)行充分的去

26、抖動(dòng)和濾波,并且仍然可以向高級用戶界面軟件提供20Hz的實(shí)際位置,這使得這項(xiàng)工作變得簡單得多。本文提供的驅(qū)動(dòng)器完全符合本應(yīng)用指南關(guān)于如何配置Sharp ADC序列控制器的建議。LH79524 ADC本身就是一個(gè)驚人的電路系統(tǒng),可以實(shí)現(xiàn)完全可編程的狀態(tài)機(jī)和序列器。無需核心CPU的任何干預(yù)即可對ADC進(jìn)行編程:驅(qū)動(dòng)觸摸層;延遲;進(jìn)行測量;驅(qū)動(dòng)另一層;延遲;執(zhí)行測量和其他操作。了解如何對LH79524 ADC序列器的控制單元進(jìn)行編程可能是一個(gè)挑戰(zhàn),但使用Sharp (.sharpsma .)提供的應(yīng)用指南,一旦基本硬件設(shè)置完成,就需要一種可靠的方法來確定屏幕是否被觸摸。如果用戶不觸摸屏幕,運(yùn)行ADC

27、來獲得轉(zhuǎn)換后的讀數(shù)是沒有意義的。上述兩種控制器都提供了屏幕是否被觸摸的檢測機(jī)制,并且還可以選擇在發(fā)生觸摸事件時(shí)是否中斷主處理器。驅(qū)動(dòng)程序中決定屏幕是否被觸摸的函數(shù)稱為WaitForTouchState()。當(dāng)控制器處于觸摸檢測模式時(shí),Y軸觸摸層通過上拉電阻上拉至高電平,X軸觸摸層接地。當(dāng)用戶觸摸屏幕上的任何位置時(shí),這兩層就會(huì)短路,Y軸層被拉低。該事件可以連接到驅(qū)動(dòng)程序部分名為PEN_OWN IRQ的中斷生成機(jī)制。正常工作期間,當(dāng)發(fā)生觸摸事件時(shí),驅(qū)動(dòng)器通過PEN_DOWN IRQ喚醒觸摸驅(qū)動(dòng)任務(wù)。這允許驅(qū)動(dòng)程序在屏幕未被觸摸時(shí)中斷其執(zhí)行,而不消耗任何CPU資源。一旦用戶觸摸屏幕,驅(qū)動(dòng)程序?qū)⒈粏拘?/p>

28、并進(jìn)入轉(zhuǎn)換模式。當(dāng)轉(zhuǎn)換模式未激活時(shí),我們也可以禁用ADC時(shí)鐘,以節(jié)省功耗。2.4.1讀取觸摸數(shù)據(jù)在校準(zhǔn)和正常操作時(shí),我們需要讀取X軸和Y軸的原始數(shù)據(jù)并去抖動(dòng),然后確定觸摸屏幕時(shí)是否有穩(wěn)定的讀數(shù)。這一過程在兩種驅(qū)動(dòng)程序中都稱為TouchScan()。這一過程的要點(diǎn)是:1.檢查屏幕是否被觸摸;2.收集每個(gè)軸上的多個(gè)原始讀數(shù),以便稍后過濾;3.檢查屏幕是否仍被觸摸。執(zhí)行模數(shù)轉(zhuǎn)換時(shí),兩個(gè)控制器都提供了一種產(chǎn)生延遲的方法,即通過編程在觸摸層上電和開始實(shí)際模數(shù)轉(zhuǎn)換之間插入一個(gè)時(shí)間延遲。飛思卡爾把這個(gè)時(shí)間延遲稱為數(shù)據(jù)建立計(jì)數(shù)(DSCNT),兩層切換后會(huì)有很多ASP輸入時(shí)鐘長度的延遲。夏普稱這個(gè)時(shí)間延遲為預(yù)充

29、電時(shí)間延遲。兩個(gè)CPU都需要這個(gè)時(shí)間延遲,因?yàn)殡娮枋接|摸板是兩個(gè)大面積的導(dǎo)體,中間隔著一層薄薄的絕緣層,剛好形成一個(gè)電容。當(dāng)從將要執(zhí)行模數(shù)轉(zhuǎn)換的層切換到正在通電的層時(shí),需要一定的延遲來確保電容器達(dá)到穩(wěn)定狀態(tài)。我們可以對處理器進(jìn)行編程,使其在FIFO中有有效數(shù)據(jù)或輸入FIFO已滿時(shí)產(chǎn)生中斷。因?yàn)槲覀兺ǔ_M(jìn)行多次讀取,所以當(dāng)FIFO已滿時(shí),驅(qū)動(dòng)程序通常會(huì)產(chǎn)生一個(gè)中斷。當(dāng)該中斷發(fā)生時(shí),將有12個(gè)原始模數(shù)轉(zhuǎn)換數(shù)據(jù)等待處理,分別對應(yīng)于X軸上的6個(gè)讀數(shù)和Y軸上的6個(gè)讀數(shù)。一旦序列器控制字在LH79524上編程,驅(qū)動(dòng)器要獲得原始讀數(shù)只需命令序列器執(zhí)行。當(dāng)EOS(序列結(jié)束)中斷產(chǎn)生時(shí),我們獲得的結(jié)果可用于收集

30、和檢查。序列器可以配置為在觸摸屏幕時(shí)自動(dòng)觸發(fā)、根據(jù)軟件命令觸發(fā)或連續(xù)觸發(fā)三種模式。妥協(xié)考慮在這里是不可避免的。如果我們需要一個(gè)窄而穩(wěn)定的窗口,駕駛員將無法跟蹤快速的“拖動(dòng)”操作。快速拖移對于簽名輸入期間發(fā)生的滑動(dòng)或筆畫跟蹤事件非常重要。如果我們擴(kuò)大穩(wěn)定窗口,我們可能會(huì)面臨風(fēng)險(xiǎn),包括接收不準(zhǔn)確的觸摸數(shù)據(jù)和上述關(guān)鍵層連接結(jié)果。所以需要通過實(shí)驗(yàn)來確定適合自己系統(tǒng)的最佳值。智能觸摸控制器還允許您通過軟件命令調(diào)整這些參數(shù)。每個(gè)樣本所需的讀取時(shí)間、連續(xù)讀數(shù)之間的允許偏差和采樣速率都是每個(gè)驅(qū)動(dòng)器的可編程參數(shù)。您可以通過# definitions調(diào)整這些參數(shù),以在您的系統(tǒng)上產(chǎn)生最佳結(jié)果。智能外部觸摸控制器通常

31、以非常快的速度讀取幾十或幾百個(gè)數(shù)據(jù),以提高準(zhǔn)確性。由于我們使用核心CPU來完成這種過濾,所以我們需要確定多少時(shí)間可以合理地分配給觸摸采樣任務(wù)。嵌入式系統(tǒng)包含妥協(xié),你的任務(wù)就是拿出最好的妥協(xié),生產(chǎn)出一個(gè)能讓用戶滿意的系統(tǒng)。2.4.2觸摸屏的校準(zhǔn) HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏是的,我們需要一些參考值,以便將接收到的原始模數(shù)轉(zhuǎn)換值轉(zhuǎn)換成高級軟件要求的屏幕像素坐標(biāo)。理想情況下,校準(zhǔn)程序只需在產(chǎn)品初始通電測試

32、期間運(yùn)行一次,參考值存儲(chǔ)在非易失性存儲(chǔ)器中。我已安排觸摸驅(qū)動(dòng)程序在啟動(dòng)后立即運(yùn)行校準(zhǔn)程序,但請記住,您應(yīng)保存參考值,以免用戶在將來通電啟動(dòng)時(shí)再次進(jìn)行校準(zhǔn)。但是,您仍然需要為用戶提供一種進(jìn)入校準(zhǔn)例程的方法,以便在由于溫度漂移或其他因素導(dǎo)致校準(zhǔn)不準(zhǔn)確時(shí)進(jìn)行重新校準(zhǔn)。校準(zhǔn)程序的名稱是CalibrateTouchScreen(),這是一個(gè)簡單的分步操作過程。它將在屏幕上為用戶提供一個(gè)圖形目標(biāo),要求用戶觸摸該目標(biāo),然后記錄原始ADC讀數(shù),該讀數(shù)將用于以下將原始數(shù)據(jù)轉(zhuǎn)換為像素位置的調(diào)整例程。通過使用便攜式圖形用戶界面(PEG)的圖形軟件API在屏幕上顯示圖形和用戶提示,但是這也可以通過類似的圖形軟件來實(shí)現(xiàn)

33、。理想情況下,您只需要兩組(X和Y)原始數(shù)據(jù),即在屏幕上對角讀取的最小值和最大值。在實(shí)際應(yīng)用中,因?yàn)樵S多 HYPERLINK ./%20%20%20%20:/%20%20%20%20eet-china%20%20%20%20/SEARCH/ART/%B5%E7%D7敗%C3%FE%C6%C1.HTM t _blank 電阻式觸摸屏存在顯著的非線性,因此簡單地在最小值和最大值之間插入位置值將導(dǎo)致驅(qū)動(dòng)器非常不準(zhǔn)確。這意味著屏幕上的非線性等距物理移動(dòng)將導(dǎo)致原始數(shù)據(jù)的不相等增量。更糟糕的是,即使我們只改變X軸的觸摸位置,從Y軸讀取的數(shù)據(jù)也會(huì)有很大的變化。結(jié)論是使用的校準(zhǔn)點(diǎn)越多越好,并且通過最小化插入窗

34、口之間的間隔可以產(chǎn)生盡可能好的精度。如果能在工廠做一次校準(zhǔn),獲得大量采樣點(diǎn)并不難。如果校準(zhǔn)無法在工廠完成,您必須確定用戶需要輸入多少點(diǎn)才能產(chǎn)生準(zhǔn)確的校準(zhǔn)。本文提供的校準(zhǔn)程序使用四個(gè)數(shù)據(jù)點(diǎn),屏幕的每個(gè)角一個(gè)。對于參考板上的VGA分辨率(640 x480)顯示屏,精度可以達(dá)到一兩個(gè)像素。對于更高的屏幕分辨率或其他觸摸屏,這些點(diǎn)可能太多或不足以生成準(zhǔn)確的驅(qū)動(dòng)程序。做出準(zhǔn)確決定的唯一方法是反復(fù)測試特定的硬件。2.4.3正常操作一旦校準(zhǔn)過程完成,我們就可以開始正常操作,并開始向更高級別的軟件發(fā)送觸摸事件。我提供的每個(gè)觸摸驅(qū)動(dòng)程序在每個(gè)支持的RTOS環(huán)境中都作為低優(yōu)先級任務(wù)執(zhí)行。任務(wù)的入口被稱為PegTo

35、uchTask,因?yàn)轵?qū)動(dòng)程序需要與PEG圖形軟件交互。修改這些驅(qū)動(dòng)程序后,它們可以與其他圖形軟件甚至您自己的用戶界面環(huán)境一起工作。在任何時(shí)候,PegTouchTask總是先調(diào)用硬件配置例程,然后調(diào)用校準(zhǔn)例程,最后進(jìn)入等待觸摸輸入的無限循環(huán)。LH79524驅(qū)動(dòng)程序的工作方式類似。當(dāng)產(chǎn)生PEN_DOWN中斷時(shí),我們命令A(yù)DC序列器開始轉(zhuǎn)換。驅(qū)動(dòng)器以20Hz的速度工作,檢查位置的變化,直到屏幕不再被觸摸。在觸摸屏幕時(shí),我們需要連續(xù)讀取各個(gè)軸的多個(gè)轉(zhuǎn)換值,以確定觸摸位置是否穩(wěn)定。如果任何兩個(gè)連續(xù)讀數(shù)的增量或變化超過#defined定義的噪聲窗口,我們必須重新開始。我們一直這樣做,直到讀取的多個(gè)連續(xù)值處

36、于#defined定義的穩(wěn)定范圍內(nèi),此時(shí)我們可以調(diào)整結(jié)果并將更新報(bào)告給更高級別的軟件。當(dāng)屏幕不再被觸摸時(shí),我們可以中斷這個(gè)任務(wù),等待觸摸輸入事件。在每個(gè)轉(zhuǎn)換過程之前和之后,駕駛員必須檢查并確認(rèn)屏幕仍然被觸摸。我們不想向更高層的軟件報(bào)告一個(gè)實(shí)際上處于“開路狀態(tài)”的穩(wěn)定讀數(shù)。我也見過一些驅(qū)動(dòng)程序在最初觸摸屏幕后忽略N個(gè)讀數(shù)。然而,對于這兩個(gè)參考電路板,我不認(rèn)為忽略一定數(shù)量的初始讀數(shù)是必要或有益的。第三章是觸摸屏控制器的軟件設(shè)計(jì)。3.1嵌入式Linux系統(tǒng)下的驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序是Linux內(nèi)核的重要組成部分,它控制著操作系統(tǒng)和硬件設(shè)備之間的交互。Linux的設(shè)備管理與文件系統(tǒng)緊密結(jié)合,各種設(shè)備以文

37、件的形式存儲(chǔ)在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉、讀寫這些設(shè)備文件,對設(shè)備的操作就像對普通數(shù)據(jù)文件的操作一樣簡單。為了方便開發(fā)和提高效率,本設(shè)計(jì)采用安裝模塊的方式開發(fā)和調(diào)試觸摸屏驅(qū)動(dòng)程序。Linux操作系統(tǒng)通過系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制權(quán)轉(zhuǎn)移。設(shè)備驅(qū)動(dòng)模塊的作用是擴(kuò)展內(nèi)核的功能,它主要完成兩項(xiàng)任務(wù):一是系統(tǒng)調(diào)用,二是中斷處理。圖2展示了一個(gè)設(shè)備驅(qū)動(dòng)模塊動(dòng)態(tài)附著、卸載、系統(tǒng)調(diào)用的全過程。系統(tǒng)調(diào)用部分是設(shè)備的操作過程,比如open、read、write、ioctl等。設(shè)備驅(qū)動(dòng)程序提供的這組入口點(diǎn)通過幾種結(jié)構(gòu)向系統(tǒng)解釋,即file_operations數(shù)據(jù)結(jié)構(gòu)

38、、inode數(shù)據(jù)結(jié)構(gòu)和file數(shù)據(jù)結(jié)構(gòu)。核心通過文件結(jié)構(gòu)標(biāo)識(shí)設(shè)備,通過file_operations數(shù)據(jù)結(jié)構(gòu)提供文件系統(tǒng)的入口點(diǎn)功能,即訪問設(shè)備驅(qū)動(dòng)的功能。結(jié)構(gòu)的每個(gè)成員對應(yīng)一個(gè)系統(tǒng)調(diào)用。在嵌入式系統(tǒng)的開發(fā)中,我們通常只實(shí)現(xiàn)幾個(gè)接口函數(shù):read、write、open、ioctl和release來完成應(yīng)用系統(tǒng)所需的功能。驅(qū)動(dòng)的任務(wù)之一就是完成file_operations中的函數(shù)指針。Clinux繼承了linux的設(shè)備管理方式,將所有設(shè)備都視為具體的文件,通過文件系統(tǒng)層進(jìn)行訪問。所以在Clinux的框架下,與設(shè)備相關(guān)的處理可以分為兩個(gè)層次文件系統(tǒng)層和設(shè)備驅(qū)動(dòng)層。設(shè)備驅(qū)動(dòng)層屏蔽了具體設(shè)備的細(xì)節(jié),

39、而文件系統(tǒng)層為用戶提供了一套統(tǒng)一的用戶界面。這種設(shè)備管理方式可以很好地實(shí)現(xiàn)“設(shè)備獨(dú)立性”,使Clinux可以根據(jù)硬件外設(shè)的發(fā)展方便地進(jìn)行擴(kuò)展。比如實(shí)現(xiàn)一個(gè)設(shè)備驅(qū)動(dòng),只需要根據(jù)具體的硬件特性,提供一套對文件系統(tǒng)的訪問接口。3.1.1內(nèi)核中驅(qū)動(dòng)程序的加載方法在內(nèi)核中加載驅(qū)動(dòng)有兩種方式:一種是直接編譯到內(nèi)核中,在系統(tǒng)初始化時(shí)注冊設(shè)備;一種是模塊化加載方法,將驅(qū)動(dòng)程序編譯成目標(biāo)文件(*。o)。當(dāng)您需要添加設(shè)備時(shí),使用insmod命令向系統(tǒng)注冊它。當(dāng)你停止使用它,使用rmmod命令卸載它。對于觸摸屏這種基礎(chǔ)輸入工具,建議直接編譯進(jìn)內(nèi)核,這樣系統(tǒng)一啟動(dòng)就能用了。向內(nèi)核注冊一個(gè)字符設(shè)備的函數(shù)是:extern

40、 intregister _ chrdev(unsigned major,constchar * name,struct file _ operations * fops);設(shè)備由核主設(shè)備號和輔助設(shè)備號唯一標(biāo)識(shí)。參數(shù)major對應(yīng)請求的主設(shè)備號,name對應(yīng)設(shè)備名,fops是指向file_operations結(jié)構(gòu)的指針,file _ operations結(jié)構(gòu)是Clinux下用來寫驅(qū)動(dòng)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu),它提供了應(yīng)用空間和驅(qū)動(dòng)之間的接口。這個(gè)數(shù)據(jù)結(jié)構(gòu)的每一項(xiàng)都指向一個(gè)由驅(qū)動(dòng)程序完成的功能。在2.4版本的內(nèi)核中,該結(jié)構(gòu)采用標(biāo)記結(jié)構(gòu)初始化語法。與2.0版本的內(nèi)核相比,這種語法的可移植性更強(qiáng),程序的可讀性

41、和代碼的緊湊性更好。以觸摸屏為例:靜態(tài)結(jié)構(gòu)文件_操作ts_fops=車主:這個(gè)_模塊,Read:ts_read,/讀取數(shù)據(jù)操作Poll:ts_poll,/非阻塞操作Ioctl:ts_ioctl,/I/O控制操作Open:ts_open,/打開設(shè)備。Release:ts_release,/釋放設(shè)備Fasync:ts_fasync,/異步觸發(fā)完整的結(jié)構(gòu)還包括llseek、readdir等函數(shù)指針。,但是因?yàn)樵谶@個(gè)程序中沒有用到,所以省略不寫,內(nèi)核默認(rèn)為NULL。3.2.觸摸屏驅(qū)動(dòng)程序的流程和關(guān)鍵功能在本設(shè)計(jì)中,我們使用Clinux2.4內(nèi)核。驅(qū)動(dòng)程序的主要設(shè)計(jì)思想是:初始化后,驅(qū)動(dòng)程序?qū)⑦M(jìn)入空閑狀

42、態(tài),等待中斷。一旦pen中斷(pen_irq)發(fā)生,它就進(jìn)入中斷處理程序進(jìn)行數(shù)據(jù)采樣、轉(zhuǎn)換和傳輸。同時(shí),程序區(qū)分各種情況,處理異常。觸摸屏的軟件流程如圖3所示。在驅(qū)動(dòng)程序中,設(shè)置了觸摸屏的七種不同狀態(tài),分別用-1到5的數(shù)字表示。這七種狀態(tài)構(gòu)成觸摸屏狀態(tài)機(jī),系統(tǒng)根據(jù)當(dāng)前狀態(tài)進(jìn)行下一步處理,如表1所示。整個(gè)軟件設(shè)計(jì)按功能可分為五個(gè)部分,即初始化、設(shè)備打開、讀操作、中斷處理和I/O控制。下面詳細(xì)描述每個(gè)部分。3.2.1驅(qū)動(dòng)程序初始化在mc68328digi_init()中向內(nèi)核注冊設(shè)備驅(qū)動(dòng)函數(shù):err = misc _ register(& MC 68328 _ digi),在init_ts_set

43、tings()中設(shè)置觸摸屏的當(dāng)前參數(shù):內(nèi)核版本號、筆移動(dòng)判別閾值、采樣時(shí)間、抖動(dòng)消除開關(guān)、抖動(dòng)消除時(shí)間等。這些都是用戶根據(jù)自己的液晶屏和精度要求自定義的,也可以通過應(yīng)用程序中的I/O控制函數(shù)ioctl()來設(shè)置。本文將具體分析這些參數(shù)在參數(shù)分析中的意義。在ts_open()函數(shù)中,驅(qū)動(dòng)程序向內(nèi)核注冊中斷。中斷也可以在系統(tǒng)初始化時(shí)向內(nèi)核注冊,但一般不建議這樣做,因?yàn)楫?dāng)有許多加載的設(shè)備時(shí),這可能會(huì)導(dǎo)致中斷沖突。在設(shè)備接收中斷之前打開設(shè)備是一個(gè)更好的策略。向內(nèi)核注冊中斷處理程序主要實(shí)現(xiàn)兩個(gè)功能,一是注冊中斷號,二是注冊中斷處理程序函數(shù)。在該程序中,內(nèi)核注冊了兩個(gè)中斷處理程序,即:請求_irq(筆_I

44、RQ _數(shù)字,句柄_筆_ IRQ,IRQ _ FLG _標(biāo)準(zhǔn),Touch_screen”、NULL null)和request _ IRQ (SPI _ IRQ _ num,handle _ SPI _ IRQ,IRQ _ flg _ STD,SPI _ IRQ,NULL);前者中,PEN_IRQ_NUM是中斷號,可以指定或動(dòng)態(tài)分配。在這個(gè)驅(qū)動(dòng)程序中,指定的筆中斷分配中斷數(shù)是19;Handle_pen_irq是中斷處理函數(shù),IRQ_FLG_STD是application中的一個(gè)選項(xiàng),決定了中斷處理程序的一些特性,意味著被系統(tǒng)部門占用。Touch_ screen是設(shè)備名稱。在后者中,程序向內(nèi)核注

45、冊SPI中斷,以便在CPU和外設(shè)之間傳輸數(shù)據(jù)。分配的中斷號為0,handle_spi_irq是spi中斷處理函數(shù)。此外,在觸摸屏驅(qū)動(dòng)初始化子函數(shù)init_ts_drv()中,完成了以下工作:(1)觸摸屏狀態(tài)的初始化;(2)初始化筆信息(pen _ values);(3)初始化定時(shí)器,設(shè)置超時(shí)函數(shù)handle _ time out();(4)初始化寄存器。初始化等待隊(duì)列,該隊(duì)列由等待觸摸事件的進(jìn)程組成,包括頭尾指針和睡眠進(jìn)程鏈表;(5)將觸摸屏狀態(tài)設(shè)置為空閑。因?yàn)檫@里的初始化會(huì)占用一些系統(tǒng)資源,所以在設(shè)備開機(jī)時(shí)進(jìn)行處理,而不是初始設(shè)備初始化部分,這也是為了節(jié)省資源。讀取函數(shù)ts_Read()一旦

46、用戶程序調(diào)用read()讀取觸摸屏,驅(qū)動(dòng)程序調(diào)用入口點(diǎn)函數(shù)ts_read()進(jìn)行處理。如果此時(shí)沒有數(shù)據(jù)到達(dá),驅(qū)動(dòng)選擇阻塞操作,調(diào)用interrupt _ sleep _ on(& queue- proc _ list)阻塞進(jìn)程,進(jìn)入等待隊(duì)列,觸摸屏狀態(tài)設(shè)置為等待;如果選擇非阻塞操作,程序會(huì)在沒有數(shù)據(jù)到達(dá)時(shí)立即返回,然后使用異步觸發(fā)器fasync()通知數(shù)據(jù)到達(dá)。當(dāng)筆中斷發(fā)生時(shí),程序進(jìn)入中斷處理功能。在中斷處理功能中,將處理兩個(gè)中斷,即外部觸摸中斷(筆中斷)和SPI數(shù)據(jù)轉(zhuǎn)換中斷。這兩種中斷對應(yīng)的中斷處理功能是觸摸屏軟件設(shè)計(jì)的關(guān)鍵。驅(qū)動(dòng)程序使用定時(shí)器來處理中斷處理函數(shù)中與時(shí)間相關(guān)的操作。定義函數(shù)s

47、et_timer_irq()如下:staticvoidset _ timer _ IRQ(struct timer _ list * timer,intdelay)del_timer(定時(shí)器);timer- expires = jiffies+delay;add_timer(定時(shí)器);Jiffies是一個(gè)變量,表示系統(tǒng)啟動(dòng)后一直運(yùn)行的時(shí)鐘數(shù),delay是設(shè)置的延長時(shí)間(以時(shí)鐘數(shù)為計(jì)數(shù)單位)。一旦時(shí)鐘數(shù)超過設(shè)定值,則觸發(fā)超時(shí)功能,在本程序中為handle_timeout()。引入定時(shí)器的目的有兩個(gè):一是可以精確控制系統(tǒng)消除電平波動(dòng)引起的信號抖動(dòng)所需的時(shí)間;其次,它可以有效地控制采樣坐標(biāo)的數(shù)量,而

48、不會(huì)引入占用大量系統(tǒng)資源的簡單延遲函數(shù)。對于利用SPI中斷產(chǎn)生大量坐標(biāo)數(shù)據(jù)的問題,文獻(xiàn)中沒有很好的解決方法,只是簡單的降低SPI時(shí)鐘頻率來取較少的數(shù)據(jù)。本設(shè)計(jì)中引入了定時(shí)器,可以很好地解決上述問題。3.3結(jié)論在獲得觸摸點(diǎn)的原始坐標(biāo)后(數(shù)值范圍由所選A/D轉(zhuǎn)換器的位數(shù)決定),要根據(jù)具體液晶屏的實(shí)際像素進(jìn)行轉(zhuǎn)換,以便于圖形界面的后續(xù)開發(fā)??紤]到相鄰兩次移動(dòng)的閾值,觸摸屏坐標(biāo)根據(jù)以下公式計(jì)算:XV是觸摸點(diǎn)X坐標(biāo)的顯示值,XW是觸摸點(diǎn)X坐標(biāo)的測量值(原始坐標(biāo)值),公式(1)、(2)、(3)是觸摸屏初始化時(shí)得到的。方法是在X方向取觸摸屏左右兩側(cè)任意一點(diǎn),以XV=XW=1,Xoffrer=0為初始值進(jìn)行測

49、量,得到三個(gè)新的參數(shù):XV,XW,Xoffrer(這個(gè)工作在實(shí)際使用中屬于校準(zhǔn)零點(diǎn)偏移),然后這三個(gè)參數(shù)就不再變化了。對于每次測量的任一觸摸點(diǎn)的原始坐標(biāo)XW,直接代入公式(4)即可得到該觸摸點(diǎn)的像素顯示坐標(biāo)XV。XV1是觸摸屏左點(diǎn)的坐標(biāo)顯示值;Xv是觸摸屏右點(diǎn)的坐標(biāo)顯示值;XW1是觸摸屏左點(diǎn)的坐標(biāo)測量值;XW2是觸摸屏右點(diǎn)的坐標(biāo)測量值。本設(shè)計(jì)使用MicroWindows作為用戶界面,自定義每個(gè)桌面圖標(biāo)的坐標(biāo)區(qū)域,結(jié)合觸摸屏的采樣坐標(biāo),判斷坐標(biāo)是否在圖標(biāo)區(qū)域內(nèi),然后做出相應(yīng)的事件處理。本設(shè)計(jì)使用的開發(fā)平臺(tái),液晶屏為320240點(diǎn)陣,物理尺寸為80mm60mm。ADS7843選用12位轉(zhuǎn)換精度,觸

50、摸屏的理論分辨率為80/212=0.020mm,但由于電平干擾和觸摸動(dòng)作發(fā)生時(shí)的物理干擾,實(shí)際精度達(dá)不到這個(gè)數(shù)值。經(jīng)過測試,我們平臺(tái)上同一點(diǎn)的點(diǎn)擊精度可以達(dá)到1.0mm,這個(gè)驅(qū)動(dòng)可以有效區(qū)分點(diǎn)擊和移動(dòng)信號。如果配合手寫識(shí)別軟件,可以作為平板電腦的底層驅(qū)動(dòng),實(shí)現(xiàn)手寫輸入。第四章是嵌入式操作系統(tǒng)的移植。介紹4。1 C/OS-IIC /OS-II是一個(gè)完整的、可移植的、可固化的、可裁剪的搶占式實(shí)時(shí)多任務(wù)內(nèi)核。C/OS-II的大部分代碼是用ANSI的C語言編寫的,包括一小部分匯編代碼,可以被不同架構(gòu)的微處理器使用。到目前為止,從8位到6位4位,C/OS-II已經(jīng)在40多種不同架構(gòu)的微處理器上運(yùn)行。C/

51、OS-II已經(jīng)在全球范圍內(nèi)得到廣泛應(yīng)用,包括手機(jī)、路由器、集線器、不間斷電源、飛機(jī)、醫(yī)療設(shè)備、工業(yè)控制等多個(gè)領(lǐng)域。其實(shí)C/OS-II已經(jīng)通過了非常嚴(yán)格的測試,并且獲得了美國聯(lián)邦航空局的認(rèn)證,可以在飛機(jī)上使用。表明C/OS-II穩(wěn)定可靠,可用于對人們生活至關(guān)重要的安全關(guān)鍵系統(tǒng)。此外,C/OS-II的顯著特點(diǎn)是開源代碼,易于移植和維護(hù)。4.1.1C/OS-II核結(jié)構(gòu)在多任務(wù)系統(tǒng)中,核心負(fù)責(zé)管理每個(gè)任務(wù),或者為每個(gè)任務(wù)分配CPU時(shí)間,并負(fù)責(zé)任務(wù)之間的通信。nuclear提供的基本服務(wù)是任務(wù)轉(zhuǎn)換。C/OS-II可以管理多達(dá)64個(gè)任務(wù)。因?yàn)樗淖髡哒加貌㈩A(yù)留了8個(gè)任務(wù),留給用戶的應(yīng)用最多可以有56個(gè)任務(wù)

52、。分配給每項(xiàng)任務(wù)的優(yōu)先級必須不同。這意味著C/OS-II不支持循環(huán)調(diào)度。C/OS-II為每個(gè)任務(wù)設(shè)置了獨(dú)立的堆??臻g,可以快速實(shí)現(xiàn)任務(wù)轉(zhuǎn)換。C/OS-II總是將最高優(yōu)先級的就緒任務(wù)幾乎始終保持在運(yùn)行狀態(tài)。為了確保這一點(diǎn),他總是在調(diào)用系統(tǒng)API函數(shù)時(shí)執(zhí)行調(diào)度算法,結(jié)束中斷并對中斷進(jìn)行計(jì)時(shí)。C/OS-II通過預(yù)先計(jì)算數(shù)據(jù)來簡化計(jì)算,通過精心設(shè)計(jì)就緒表結(jié)構(gòu)使延遲可預(yù)測。P89V51RD2是飛利浦公司生產(chǎn)的80C51微控制器,包含64KB的Flash和1024字節(jié)的數(shù)據(jù)RAM。P89V51RD2的典型特征是其X2模式選項(xiàng)。利用這一特性,設(shè)計(jì)人員可以使應(yīng)用以80C51的傳統(tǒng)時(shí)鐘頻率(每個(gè)機(jī)器周期包含12

53、個(gè)時(shí)鐘)或X2模式的時(shí)鐘頻率(每個(gè)機(jī)器周期包含6個(gè)時(shí)鐘)運(yùn)行。選擇X2模式可以在相同的時(shí)鐘頻率下獲得兩倍的吞吐量。受益于該特性的另一種方法是將時(shí)鐘頻率減半以保持該特性不變,這可以大大降低EMI。Flash程序存儲(chǔ)器支持并行和串行在系統(tǒng)編程(ISP),ISP允許在軟件的控制下對成品中的器件進(jìn)行重復(fù)編程。應(yīng)用固件的生成/更新能力實(shí)現(xiàn)了ISP的廣泛應(yīng)用。5V工作電壓,工作頻率為0 40 MHz。P89V51RD2的資源和ISP的功能使其非常適合移植和調(diào)試C/OS-II。沒有必要購買額外的投資,如模擬器和程序員。4.1.2C/OS-II移植移植是為了讓C/OS-II能夠在P89V51RD2上運(yùn)行。為了

54、便于移植,C/OS-II代碼大部分用C語言編寫;但還是要用C語言和匯編語言寫一些與處理器硬件相關(guān)的代碼,因?yàn)镃/OS-II在讀寫處理器寄存器時(shí)只能用匯編語言實(shí)現(xiàn)。因?yàn)樵谠O(shè)計(jì)中已經(jīng)充分考慮了C/OS-II的可移植性,所以移植C/OS-II相對容易。由于P89V51RD2是80C51微控制器,該芯片包含64KB FLASH程序存儲(chǔ)器,并支持串行在線編程(ISP)。使他非常適合在ROM空間移植C/OS-II。而其他芯片的RAM空間非常有限,只有1KB,無法滿足C/OS-II對RAM的需求。不過因?yàn)镻89V51RD2可以擴(kuò)展RAM空間,所以這個(gè)問題可以解決。我們?yōu)樗麛U(kuò)展了一個(gè)32KB的RAM,形成了移

55、植C/OS-II的硬件平臺(tái)。這樣P89V51RD2就滿足了移植C/OS-II的所有要求。因?yàn)镃/OS-II的大部分代碼都是用標(biāo)準(zhǔn)C語言編寫的,所以C語言的研發(fā)工具對于C/OS-II來說是必不可少的。因?yàn)镃/OS-II是一個(gè)可以剝奪行的搶占式內(nèi)核,所以需要C編譯器生成可重入代碼。我選擇Keil C51集成R&D環(huán)境作為R&D工具。R&D工具由C編譯器、匯編器和定位器組成。編譯器用于將不同的模塊(編譯或匯編的文件)轉(zhuǎn)換成目標(biāo)文件,而定位器允許將代碼和數(shù)據(jù)放置在目標(biāo)處理器的指定內(nèi)存中。LC51還可以生成用于編程EPROM或FLASH的十六進(jìn)制格式編程文件,同時(shí)可以實(shí)現(xiàn)完整的軟件仿真支持。LC51支持

56、所有8051微控制器。通過設(shè)置編譯控制選項(xiàng),他完全可以滿足編譯C/OS-II源代碼的要求。4.2 C/OS-II源文件遷移在了解P89V51RD2微處理器和Keil C51編譯器技術(shù)細(xì)節(jié)的基礎(chǔ)上,就可以開始C/OS-II源文件的移植了。編寫移植代碼的實(shí)際工作相對簡單。圖1顯示了基于C/OS-II的應(yīng)用程序的系統(tǒng)架構(gòu)。從圖1可以看出,C/OS-II生成的代碼大部分是用ANSI C編寫的,代碼的層次結(jié)構(gòu)非常干凈。平臺(tái)相關(guān)的移植代碼只存在于OS_CPU_A.ASM、OS_CPU_C.C和OS_CPU中。h . p 89v 51 rd 2上每個(gè)文件的遷移說明如下。OS_CPU。h包括與#define語

57、句定義的處理器相關(guān)的常量、宏和類型。由于不同處理器的字長不同,C/OS-II的移植包含了一系列的數(shù)據(jù)類型定義,以保證其可移植性。C/OS-II代碼不使用語言中的short、int、long等數(shù)據(jù)類型,因?yàn)樗鼈兣c編譯器相關(guān),不可移植。定義的整形數(shù)據(jù)結(jié)構(gòu)既可移植又直觀。參考Cx51編譯手冊,OS_CPU中的所有數(shù)據(jù)類型。h可以被定義。和所有實(shí)時(shí)核一樣,C/OS-II需要先關(guān)閉中斷,然后處置臨界段代碼,處置完畢后重啟中斷。這可以保護(hù)臨界區(qū)代碼免受多任務(wù)或中斷服務(wù)子程序的影響。為了隱藏不同編譯器提供的關(guān)閉中斷和打開中斷的不同實(shí)現(xiàn)方法,增強(qiáng)可移植性,C/OS-II在OS_CPU中定義了兩個(gè)宏。h打開和關(guān)

58、閉中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。根據(jù)P89V51RD2的結(jié)構(gòu)和Keil C51提供的方法,我們設(shè)置或清除中斷使能位。代碼如下:OS_ENTER_CRITICAL() EA=0 OS_EXIT_CRITICAL() EA=1 MCS-51棧自下而上增長(1=下0=上),OS_STK_GROWTH定義為0。C/OS-II的移植需要用戶在OS _ CPU _ C.C中編寫10個(gè)簡單的C函數(shù).但是C/OS-II唯一必要的移植需要用戶在OS _ CPU _ C.C中編寫10個(gè)簡單的C函數(shù).但是唯一必要的是OSTaskStkInit(),其他9個(gè)必須聲

59、明,但不一定是所有的程序代碼。OSTaskStkInit()用于在系統(tǒng)創(chuàng)建任務(wù)時(shí)初始化任務(wù)堆棧,使堆??雌饋硐袷莿倓偘l(fā)生的中斷,所有寄存器都保存在堆棧中。由于P89V51RD2的硬件堆棧非常小,最多只能有256字節(jié)的RAM空間。所以用硬件棧來實(shí)現(xiàn)所有任務(wù)的棧是非常困難的。為了解決這個(gè)問題,我們在外部RAM空間中為每個(gè)任務(wù)分配一個(gè)連續(xù)的存儲(chǔ)區(qū)域來模擬每個(gè)任務(wù)的堆棧。C/OS-II在進(jìn)行任務(wù)轉(zhuǎn)換時(shí),首先將P89V51RD2硬件棧的內(nèi)容復(fù)制到將要失去CPU所有權(quán)的任務(wù)的外部模擬棧區(qū)域,然后將將要獲得CPU所有權(quán)的任務(wù)的外部模擬棧中的有效數(shù)據(jù)復(fù)制到P89V51RD2的硬件棧中。從而實(shí)現(xiàn)任務(wù)保護(hù)和轉(zhuǎn)換。任務(wù)模擬棧和硬件的棧結(jié)構(gòu)如圖2所示。TCB結(jié)構(gòu)中的OSTCBStkPtr始終指向用戶棧的最低地址,該地址存儲(chǔ)用戶棧的長度,其上部空間存儲(chǔ)系統(tǒng)棧映像,

溫馨提示

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

評論

0/150

提交評論