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