S3C2440A的ADC和觸控螢幕介面

2021-05-24 14:35:25 字數 2452 閱讀 1666

s3c2440a內建乙個帶8個模擬輸入通道的10位逐次逼近型(recycling type)cmos模數轉換器。在2.5mhz的模數轉換時鐘頻率下,轉換速率可達到500ksps(kilo samples per second),並且支援片內取樣保持功能和省電模式。s3c2440a還帶有觸控螢幕介面,可以控制/選擇觸控螢幕的xp,xm,yp,ym輸入以進行x,y位置轉換。

ad轉換頻率 = gclk / (p + 1)

ad轉換時間 = 1 / (ad轉換頻率 / 5) = 5 * (p + 1) / gclk

其中,gclk是系統主時鐘頻率,一般等於50mhz;p是預分頻值,在0到255之間;除以5表示每次轉換需要5個時鐘週期。ad轉換器的設計最大時鐘頻率為2.5mhz,所以p最大為19;最大轉換頻率為0.5mhz,所以最大轉換速率為0.5m個取樣每秒,即500ksps。

簡單地使用ad轉換器是很容易實現的,參考《基於arm的嵌入式系統開發與例項》第12章的程式,稍作修改就可以了。主要的修改是選擇模擬輸入通道為ain1,因為開發板上的可調電阻是通過這個通道連線到處理器的。程式執行後,用螺絲刀調節可調電阻,可以看到取樣值的變化。

困難的是如何實現觸控螢幕介面。開發板配套的示例程式只是在觸控筆離開螢幕的時候輸出觸控筆的位置,這顯然是不滿足通常的應用的。一般要求在觸控筆按下時可以判斷按下位置,隨後筆在螢幕上滑動時可以不斷判斷筆的位置,最後還要判斷筆離開螢幕。

1 觸控螢幕介面模式

觸控螢幕有四種介面模式:

(1)普通轉換模式

與通用ad轉換的使用方式很相似。通過設定adccon來初始化,並以乙個讀和寫adcdat0的操作完成。

(2)x/y位置分別轉換模式

又可以分成兩種模式:x位置轉換模式和y位置轉換模式。這兩種模式下,觸控螢幕分別把x、y位置轉換資料寫入到adcdat0和adcdat1中之後,向中斷控制器發起中斷請求。

(3)自動(順序)x/y位置轉換模式

觸控螢幕控制器依次轉換x和y位置,把轉換結果分別寫入到adcdat0和adcdat1中,然後向中斷控制器發起中斷請求。

(4)等待中斷模式

設定adctsc為0xd3,當觸控筆按下時,控制器發起中斷請求。

注意這裡的中斷型別:最終向處理器發起的中斷請求型別是int_adc,但它分為兩種子中斷型別,即int_sub_adc表示ad取樣完成;int_sub_tc表示觸控螢幕中斷,即筆在螢幕上按下或者離開螢幕。觸控螢幕x、y位置取樣完成時發起的中斷是int_sub_adc,而不是int_sub_tc,因為x、y位置取樣也是一種ad取樣動作,取樣完成也就是ad轉換完成。

2 定時取樣

若採用普通轉換模式,則需要選擇某個觸控螢幕輸入(xp/xm/yp/ym),然後在中斷發生時從adcdat0中讀取取樣值,x和y位置需要分別取樣。此外,也不懂xp/xm/yp/ym是什麼意思,要看觸控螢幕介面晶元文件才知道。

x/y位置分別取樣模式:取樣自動發生,取樣完成後從adcdat0和adcdat1中分別讀取x或者y位置。與普通取樣模式的不同只是在於不需要選擇觸控螢幕輸入,還有就是y位置是從adcdat1讀取的(而不是從adcdat0)。

x/y位置自動取樣:取樣自動發生,只是在x和y都完成取樣後才發起中斷請求。

等待中斷模式:當觸控筆在螢幕上按下或者離開螢幕時發起中斷請求。注意這個與x、y位置取樣無關。

要實現x、y位置判斷,當然是用自動取樣模式最好;而要判斷觸控筆的按下與離開,則應使用等待中斷模式。問題是怎麼把二者結合起來。最終採用的方法是,採用等待中斷模式來判斷筆的按下與離開;另外設定乙個取樣定時器,每隔一定時間(10ms)對x、y位置進行取樣。有幾點要注意:

(1)只有在筆按下狀態時才進行位置取樣,筆不在螢幕上時,取樣是沒有意義的。

(2)位置取樣採用輪詢模式實現,即等待取樣完成;取樣完成後要恢復adctsc,重置為等待中斷模式。

(3)在普通轉換模式,分別取樣模式和自動取樣模式下,adcdat0的最高位無效,不能用它來判斷筆的狀態。只有在觸控螢幕中斷(int_sub_tc)中才可以用adcdat0來判斷觸控筆狀態。

(4)位置取樣完成後要遮蔽bit_sub_adc。否則,adc持續進行取樣,會以很高的頻率(因為取樣頻率很高)發起int_sub_adc中斷請求,最終向處理器發起int_adc請求,這會嚴重影響處理器的工作。這也是不採用自動取樣,而要用定時器定時取樣的原因。 

最終程式如下,其中getcursorpos()被取樣定時器(10ms)中斷服務程式呼叫,進行一次位置取樣。這裡獲取的x、y位置值只是ad轉換器的輸出結果,一般與圖形系統中的座標值是不同的,需要通過一定的計算才能把取樣值轉換為座標值,這就是觸控螢幕校準了。

typedef struct

mouse_state;

static mouse_state g_mouse_state;

void getcursorpos(void)

else}}

static void __irq touchpanelisr(void)

else

}void touchpaneltest(void)

S3C2440A和Win CE的嵌入式導航設計

如今,隨著人們現代化生活節奏的加快和當今城市化速度的不斷膨脹,迫使越來越多的人必須在緊湊的時間及地點進行工作,不僅導致交通網路日益複雜,也使人們必要的移動性越來越呈頻繁趨勢,這使得每個人對空間資訊有了更多的依賴,迫切要求導航系統走人每個人的生活.基於s3c2440a微處理器和win ce 5.0嵌入...

定時器用方法總結s3c2440a

今天一直在除錯老師昨天留下來的幾個 任務,是關於定時器及中斷的幾個 開始的時候很生疏,對幾個暫存器 的名稱,功能,以及應該賦的值全是一頭霧水,就按照老師留下來的例子修改,逐個暫存器的對照著手冊進行進行查詢,並熟悉每一位的功能,賦值以及對應中斷的開關,標誌位的清除,對定時器的使用慢慢熟絡起來,下面是我...

s3c2440裸機 ADC程式設計

模數轉換器即a d轉換器,或簡稱adc,通常是指乙個將模擬訊號轉變為數碼訊號的電子元件。如圖,是把可變電阻上的電壓值變換的模擬訊號通過adc轉換,輸出數碼訊號。對於數碼訊號我們需要得到它的2個屬性 1.轉換精度 用多少位來儲存這個資料 假如是10 bit 那麼最大值0b111111111對應3.3v...