基于Linux系統(tǒng)的觸摸屏驅(qū)動方案
3.3 中斷處理程序及事件報告
用戶對觸摸屏進行按下、抬起和拖動等操作時,觸發(fā)中斷INT_TS,內(nèi)核進入到中斷處理函數(shù)tc_irq0進行中斷處理。tcirq0中,通過ADC—LOCK鎖機制保證只有一個驅(qū)動程序使用ADC的中斷線,通過讀取ADCDAT0和ADCDAT1寄存器,判斷觸摸操作的狀態(tài),觸摸筆按下時調(diào)用ts_timer_fireO進行數(shù)據(jù)轉(zhuǎn)換。當數(shù)據(jù)轉(zhuǎn)換完成時產(chǎn)進INT_ADC中斷,內(nèi)核進入中斷處理函數(shù)adc—irqO,adc_irq()完成觸點信息采集并調(diào)用ts_timer_fire()進行事件報告。事件報告流程如圖2所示。
ts_timer_fire0是主要完成觸點坐標信息向應(yīng)用層報告。updown、count為靜態(tài)全局變量,updown觸點狀態(tài),count代表1個jiffies時間內(nèi)ADC轉(zhuǎn)換的次數(shù),count為0,設(shè)置自動X/Y軸坐標轉(zhuǎn)換模式,轉(zhuǎn)換完成后產(chǎn)生相應(yīng)的INT_ADC中斷通知轉(zhuǎn)換完畢。count不為0,input_report_abs()函數(shù)向輸入子系統(tǒng)報告X,Y絕對坐標事件,inputreport_key()觸摸屏對應(yīng)按鍵被按下事件,輸入子系統(tǒng)使用inputsync()將報告的事件組成一個evdev包,通過/dev/input/eventX發(fā)送出去,應(yīng)用程序通過讀取/dev/input/eventX即可獲得事件信息。關(guān)鍵代碼如下:
4 結(jié)論
隨著信息技術(shù)的快速發(fā)展,嵌入式技術(shù)與人們的生活越來越緊密,觸摸屏作為一種新型輸入設(shè)備因具有輕便、占用空間少、方便靈活等優(yōu)點,應(yīng)用逐漸普及,甚至在工業(yè)領(lǐng)域也得到了大量的應(yīng)用,提高了我國工控自動化的水平。要充分發(fā)揮觸摸屏的優(yōu)點,嵌入式中驅(qū)動設(shè)計至關(guān)重要。嵌入式Linux中基于輸入子系統(tǒng)實現(xiàn)觸摸屏驅(qū)動時,利用了Linux輸入子系統(tǒng)提供標準事件接口,簡化了驅(qū)動設(shè)計,驅(qū)動設(shè)計的重點變成了觸摸屏控制器相關(guān)的硬件操作及功能實現(xiàn),充分體現(xiàn)Linux內(nèi)核代碼的高可重性,對其他類型輸入設(shè)備驅(qū)動程序的設(shè)計有一定參考作用。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論