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