摘要: 詳細分析在Nucleus下觸摸屏驅動程序的開發(fā),針對觸摸屏控制芯片ADS7846,分析其配置、工作原理,以及如何加載到操作系統(tǒng)中。這些方法為手機,PDA觸摸屏驅動的開發(fā)有一定的借鑒意義
關鍵詞:RTOS Nucleus 觸摸屏 ADS7846
Nucleus 是一款優(yōu)秀的嵌入式實時操作系統(tǒng)(RTOS),具有搶占式和時間片輪轉任務調度方式,主要用在時間苛刻的嵌入式應用當中。大約95%的Nucleus用ANSI C 寫成,作為一個庫加載到應用代碼當中。目前手機行業(yè)有很多使用Nucleus。
1. 觸摸屏控制電路的硬件結構
觸摸屏控制電路主要有一下四部分組成:進行數(shù)據(jù)處理、控制功能的MCU,一個四線電阻式觸摸屏和控制芯片ADS7846, 以及顯示觸摸點坐標的顯示部分。
在這里主要對觸摸屏的硬件電路和驅動設計做一個較詳細的介紹
ADS7846是美國TI公司推出的一款四線制電阻式觸摸屏控制器,通過機械式觸摸,可以迅速得到觸摸點位置信號。它是一種典型的帶有連續(xù)逼近型寄存器的A/D轉換器,內部自帶2.5V參考電壓,一個和微處理器相連的SPI接口,同時具有測量溫度、觸摸壓力和電池電壓的功能,有可編程的8位或12位的分辨率。在2.7V電壓和125kHz的轉換速率下, 功耗僅為750uW,在 power down 模式下僅為0.5uW。由于這些優(yōu)良的性能,在移動設備中有大量的應用。下表為控制器的主要引腳
引腳名
功能描述
+Vcc
邏輯正電源
X+,Y+
接觸摸屏正電極
X-,Y-
接觸摸屏負電極
GND
接地
Vbat
電源監(jiān)控輸入端
PENIRQ
中斷輸出端
Vref
參考電壓輸入輸出端
DOUT
串行數(shù)據(jù)輸出端
DCLK
外部時鐘輸入端
DIN
串行數(shù)據(jù)輸入端
BUSY
忙信號輸出端(低電平有效)
CS
片選
工作原理: 圖2是觸摸屏控制器和MCU的連接電路圖。當ADS7846檢測到觸摸屏被按下時,它就會產(chǎn)生一個中斷信號(PENIRQ為低電平)給MCU,MCU選中ADS7846控制器(CS為低),然后通過串行口DIN向ADS7846發(fā)送8位控制字,此后DOUT在DCLK的下降沿得到12位的輸出。圖3為ADS7846在每次轉換為24個時鐘周期下的時序圖。
2.Nucleus下ADS7846的驅動設計
驅動設計的目的是將觸摸坐標即時的轉換為顯示坐標,直接在LCD屏上顯示出來,然后經(jīng)過輸入識別軟件的處理(例如漢王的識別軟件),識別出輸入的字符,漢字等。
2.1 當觸摸屏按下時,會產(chǎn)生一個中斷,應當為ADS7846配置一個中斷。在Nucleus下,中斷分兩種,Low level 中斷(Lisr)和High level 中斷(Hisr),一般的中斷服務程序在Hisr當中處理。一個較為復雜的,多任務嵌入式系統(tǒng)當中,中斷服務程序(優(yōu)先級比普通任務的優(yōu)先級高)不能占用太多的時間,否則可能會導致其他任務不能及時得到響應。例如在觸摸屏中斷服務程序的處理,在較壞的情況下,觸摸屏可能一直被按下去,其Hisr就會占用很多的資源,導致別的任務(例如一個手機應用當中,可能導致接受電話的任務不能處理,而這是不能讓人接受的,不能想象當你寫短信時不能接受電話的情況,)所以當中斷服務程序需要占用CPU較多的處理時間時,一般要在另外激活一個任務,由任務調度機制來處理和系統(tǒng)中其他任務的關系,它的流程圖如圖四所示,實踐證明,這種處理方法是較好的處理方法。
2.2 這里不打算對怎么創(chuàng)建一個Lisr,Hisr和激活一個任務做太多的介紹,詳細可以看Nucleus的文檔。重點介紹ADS7846的驅動程序的處理和如何將所得數(shù)據(jù)在LCD上正確顯示出來。
2.2.1 ADS7846處理程序的流程圖如圖五所示
ADS7846在計算觸摸坐標時有兩種方式,single ended模式和difference 模式。Single ended模式利用ADS7846內部參考電壓或者外部參考電壓,得出的結果是一個電壓的AD結果。 Difference 不需要內部或者外部的參考電壓,這種模式得出的結果是觸摸點在觸摸屏位置上的百分比。這種模式可以消除參考電壓波動對換算結果的影響。 2.2.2 ADS7846換算結果在LCD屏幕上的映射
假設LCD是個160 x 128 像素大小的屏幕,如圖六所示,假設A點的坐標為(0,0),那么可知道B,C,D是(128,0),(0,160),(128,160)。通過ADS7846得出A,B,C,D的轉換結果分別是(Xa,Ya),(Xb,Yb),(Xc,Yc),(Xd,Yd),再得出屏幕中任意點X轉換結果(Xx,Yx),那么X的坐標(x,y)可以通過下式算出來:
X=Xb -Xa=Xd -Xc Y=Yc -Ya=Yd -Yb x = (Xx-Xa) * 128 /X y = (Yx -Ya) * 160/Y
得出觸摸屏的一系列坐標以后,作為手寫識別軟件的輸入,就可得出輸入的漢字,字符等。
3. 結論
本文簡單介紹了Nucleus下觸摸屏驅動的開發(fā),由于當前觸摸屏的應用越來越廣泛,嵌入式系統(tǒng)的應用范圍也越來越廣,將對其他嵌入式系統(tǒng)下驅動的開發(fā)有一定的借鑒意義。
4.本文提供了部分源代碼。