觸摸屏控制實驗設(shè)計報告_第1頁
觸摸屏控制實驗設(shè)計報告_第2頁
觸摸屏控制實驗設(shè)計報告_第3頁
觸摸屏控制實驗設(shè)計報告_第4頁
觸摸屏控制實驗設(shè)計報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15、層之間切換電壓以進行A/D轉(zhuǎn)換,需要通過串行外設(shè)接口(SPI)向ADS7843發(fā)送一個控制字,然后在轉(zhuǎn)換完成后通過SPI讀出電壓轉(zhuǎn)換值。2.2觸摸屏硬件原理介紹在開始寫觸摸屏驅(qū)動之前,我們必須對硬件的工作原理有一個基本的了解。許多不同的觸摸技術(shù)會將屏幕上某個位置的壓力或接觸轉(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。這里是重點。 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 電阻式觸摸屏。電阻式觸摸屏非常受歡迎,您會發(fā)現(xiàn)許多評估板和開發(fā)套件都集成了電阻式觸摸屏。電阻式觸摸屏受歡迎的主要原因是它們價格便宜,可以直接與用戶的系統(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 電阻式觸摸屏,因為它們本質(zhì)上是電阻分壓器。它們由兩層薄電阻層組成,中間隔著一層非常薄的絕緣層,絕緣層通常以塑料顆粒的形式存在。當(dāng)你觸摸屏幕時,它會使兩個薄電阻層變形,足以在它們之間建立電連接。然后軟件通過檢測分壓器上產(chǎ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 電阻式觸摸屏有“四線”、“五行”、“八

18、線”等幾種類型。線越多,精度越高,溫漂越小,但基本操作是一樣的。在最簡單的四線設(shè)計中,有一個稱為“X軸”的電阻層,其上施加一定的電壓,另一個稱為“Y軸”的電阻層作為接收層,測量X軸位置對應(yīng)的電壓值。這個過程再反過來執(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 電阻式觸摸屏的簡單等效電路。注意兩個完全獨立的讀數(shù),即X軸位置數(shù)據(jù)和Y軸位置數(shù)據(jù)。在四線或五線電阻式觸摸屏中,無法同時讀取這

19、些數(shù)據(jù)。軟件必須先讀取一個軸,然后再讀取另一個軸。閱讀的順序無關(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 電阻式觸摸屏需要一個模數(shù)轉(zhuǎn)換器(ADC)將產(chǎn)生的電壓轉(zhuǎn)換成數(shù)字信號。直到最近,這個ADC幾乎一直是主CPU的外圍設(shè)備。Burr Brown NS7843或NS7846是ADC控制器。圖2:觸摸屏電路的簡單等效電路。制造者。該設(shè)備是一個12位模數(shù)轉(zhuǎ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像素不等。本文不提供每個驅(qū)動程序的詳細代碼,而是介紹驅(qū)動

21、程序的設(shè)計和流程,并重點介紹引言的重要部分。讀者可以從FTP:/FTP . embedded ./pub/2005/07 Maxwell下載每個驅(qū)動的全部源代碼。一般來說,軟件提供的功能完成以下步驟:1.配置控制器硬件。2.確定屏幕是否被觸摸。3.獲得穩(wěn)定和去抖動的位置測量數(shù)據(jù)。4.校準觸摸屏5.將觸摸狀態(tài)和位置變化信息發(fā)送到更高級別的圖形軟件。2.4硬件配置觸控驅(qū)動要做的第一件事就是配置硬件。對于這些集成控制器,這意味著通過將數(shù)據(jù)寫入映射到存儲器的寄存器中,控制器被配置為某個狀態(tài)。這個過程由每個驅(qū)動程序中的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ū)動是否應(yīng)該使用中斷驅(qū)動,其實例子中的驅(qū)動使用的是中斷驅(qū)動模式。坦率地說,我這樣做是因為使用中斷很有趣。不要從這個例子推斷出使用中斷永遠是最好的或者最正確的設(shè)計方法,也不要聽別人說不使用中斷驅(qū)動方法的觸控驅(qū)動是“錯誤的”。這只是因為“輪詢”對于嵌入式系統(tǒng)程序員來說似乎是一個貶義詞。我曾經(jīng)問過一位客戶,他的輸入設(shè)備是在輪詢還是在中斷服務(wù)。答案是“這是嵌入式系統(tǒng),我們不做任何

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

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

25、前,我們準備取多少讀數(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 電阻式觸摸屏,尤其是便宜的,通常會有很多噪音和抖動。圖3:X軸移動時Y軸上的偏移。在向更高級別的軟件發(fā)送位置更新數(shù)據(jù)之前,駕駛員需要對每個軸上的輸入進行多次采樣。默認情況下,我們提供的驅(qū)動器將以至少200Hz(5ms)的采樣速率配置各自處理器上的ADC時鐘。通過這種方式,驅(qū)動器可以對輸入的原始數(shù)據(jù)進行充分的去

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

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

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

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

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

31、以非??斓乃俣茸x取幾十或幾百個數(shù)據(jù),以提高準確性。由于我們使用核心CPU來完成這種過濾,所以我們需要確定多少時間可以合理地分配給觸摸采樣任務(wù)。嵌入式系統(tǒng)包含妥協(xié),你的任務(wù)就是拿出最好的妥協(xié),生產(chǎn)出一個能讓用戶滿意的系統(tǒng)。2.4.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 電阻式觸摸屏是的,我們需要一些參考值,以便將接收到的原始模數(shù)轉(zhuǎn)換值轉(zhuǎn)換成高級軟件要求的屏幕像素坐標(biāo)。理想情況下,校準程序只需在產(chǎn)品初始通電測試

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

33、。理想情況下,您只需要兩組(X和Y)原始數(shù)據(jù),即在屏幕上對角讀取的最小值和最大值。在實際應(yī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 電阻式觸摸屏存在顯著的非線性,因此簡單地在最小值和最大值之間插入位置值將導(dǎo)致驅(qū)動器非常不準確。這意味著屏幕上的非線性等距物理移動將導(dǎo)致原始數(shù)據(jù)的不相等增量。更糟糕的是,即使我們只改變X軸的觸摸位置,從Y軸讀取的數(shù)據(jù)也會有很大的變化。結(jié)論是使用的校準點越多越好,并且通過最小化插入窗

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

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

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

37、件的形式存儲在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉、讀寫這些設(shè)備文件,對設(shè)備的操作就像對普通數(shù)據(jù)文件的操作一樣簡單。為了方便開發(fā)和提高效率,本設(shè)計采用安裝模塊的方式開發(fā)和調(diào)試觸摸屏驅(qū)動程序。Linux操作系統(tǒng)通過系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制權(quán)轉(zhuǎn)移。設(shè)備驅(qū)動模塊的作用是擴展內(nèi)核的功能,它主要完成兩項任務(wù):一是系統(tǒng)調(diào)用,二是中斷處理。圖2展示了一個設(shè)備驅(qū)動模塊動態(tài)附著、卸載、系統(tǒng)調(diào)用的全過程。系統(tǒng)調(diào)用部分是設(shè)備的操作過程,比如open、read、write、ioctl等。設(shè)備驅(qū)動程序提供的這組入口點通過幾種結(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è)備,通過file_operations數(shù)據(jù)結(jié)構(gòu)提供文件系統(tǒng)的入口點功能,即訪問設(shè)備驅(qū)動的功能。結(jié)構(gòu)的每個成員對應(yīng)一個系統(tǒng)調(diào)用。在嵌入式系統(tǒng)的開發(fā)中,我們通常只實現(xiàn)幾個接口函數(shù):read、write、open、ioctl和release來完成應(yīng)用系統(tǒng)所需的功能。驅(qū)動的任務(wù)之一就是完成file_operations中的函數(shù)指針。Clinux繼承了linux的設(shè)備管理方式,將所有設(shè)備都視為具體的文件,通過文件系統(tǒng)層進行訪問。所以在Clinux的框架下,與設(shè)備相關(guān)的處理可以分為兩個層次文件系統(tǒng)層和設(shè)備驅(qū)動層。設(shè)備驅(qū)動層屏蔽了具體設(shè)備的細節(jié),

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

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

41、和代碼的緊湊性更好。以觸摸屏為例:靜態(tài)結(jié)構(gòu)文件_操作ts_fops=車主:這個_模塊,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ù)指針。,但是因為在這個程序中沒有用到,所以省略不寫,內(nèi)核默認為NULL。3.2.觸摸屏驅(qū)動程序的流程和關(guān)鍵功能在本設(shè)計中,我們使用Clinux2.4內(nèi)核。驅(qū)動程序的主要設(shè)計思想是:初始化后,驅(qū)動程序?qū)⑦M入空閑狀

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

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

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

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

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

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

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

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

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

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

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

53、個時鐘)或X2模式的時鐘頻率(每個機器周期包含6個時鐘)運行。選擇X2模式可以在相同的時鐘頻率下獲得兩倍的吞吐量。受益于該特性的另一種方法是將時鐘頻率減半以保持該特性不變,這可以大大降低EMI。Flash程序存儲器支持并行和串行在系統(tǒng)編程(ISP),ISP允許在軟件的控制下對成品中的器件進行重復(fù)編程。應(yīng)用固件的生成/更新能力實現(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上運行。為了

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

55、植C/OS-II的硬件平臺。這樣P89V51RD2就滿足了移植C/OS-II的所有要求。因為C/OS-II的大部分代碼都是用標(biāo)準C語言編寫的,所以C語言的研發(fā)工具對于C/OS-II來說是必不可少的。因為C/OS-II是一個可以剝奪行的搶占式內(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的十六進制格式編程文件,同時可以實現(xiàn)完整的軟件仿真支持。LC51支持

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

57、句定義的處理器相關(guān)的常量、宏和類型。由于不同處理器的字長不同,C/OS-II的移植包含了一系列的數(shù)據(jù)類型定義,以保證其可移植性。C/OS-II代碼不使用語言中的short、int、long等數(shù)據(jù)類型,因為它們與編譯器相關(guān),不可移植。定義的整形數(shù)據(jù)結(jié)構(gòu)既可移植又直觀。參考Cx51編譯手冊,OS_CPU中的所有數(shù)據(jù)類型。h可以被定義。和所有實時核一樣,C/OS-II需要先關(guān)閉中斷,然后處置臨界段代碼,處置完畢后重啟中斷。這可以保護臨界區(qū)代碼免受多任務(wù)或中斷服務(wù)子程序的影響。為了隱藏不同編譯器提供的關(guān)閉中斷和打開中斷的不同實現(xiàn)方法,增強可移植性,C/OS-II在OS_CPU中定義了兩個宏。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個簡單的C函數(shù).但是C/OS-II唯一必要的移植需要用戶在OS _ CPU _ C.C中編寫10個簡單的C函數(shù).但是唯一必要的是OSTaskStkInit(),其他9個必須聲

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

溫馨提示

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

評論

0/150

提交評論