基于Linux系統(tǒng)的觸摸屏驅動方案
出處:yuhh 發(fā)布于:2011-09-16 09:28:17
引言
觸摸屏作為一種輸入設備,具有堅固耐用、反應速度快、節(jié)省空間、易于交流等優(yōu)點,提供簡單、方便、自然的人機交互方式,目前被廣泛應用于工業(yè)控制、電子查詢、消費性電產(chǎn)品領域。
Linux作為是目前的操作系統(tǒng)之一,在桌面系統(tǒng)、服務器領域有大量用戶,具有源代碼開放,支持的硬件豐富、高可移植等優(yōu)點,在嵌入式領域也備受青睞。Linux根據(jù)不同設備,將驅動程序分為字符設備驅動、塊設備驅動、網(wǎng)絡設備驅動三種,Linux輸入子系統(tǒng)u是對字符類型輸入設備驅動實現(xiàn)方式的抽象,是對分散的、多種不同類別的輸入設備進行統(tǒng)一處理的內核驅動模型。輸入子系統(tǒng)具高效、無Bug和可重用等優(yōu)點。本文對基于Linux輸入子系統(tǒng)的觸摸屏驅動進行深入的討論。
1 硬件平臺
S3C2440是三星公司推出的采用ARM920t內核的MCU,集成了豐富的外圍設備,其中包括4線電阻式觸摸屏控制器和8通道多路復用ADC。
觸摸屏由觸摸檢測部件和觸摸屏控制器構成,對應S3C2440平臺的四線電阻觸摸屏的外接電路和S3C2440芯片自帶的A/D轉換控制部分。四線電阻觸摸屏的外接電路控制上下兩層導電層的通斷情況以及如何取電壓,取電壓之后由S3C2440芯片中的A/D將模擬量轉換成數(shù)字量。S3C2440芯片的A/D轉換器有8個輸入通道,轉換結果為10bit數(shù)字,轉換過程在芯片內部自動實現(xiàn),轉換的結果從寄存器中取值,再進行一定的轉后可直接得到觸摸點的坐標。S3C2440提供的ADC和觸摸屏接口如圖1所示,觸摸屏直接與引腳XP,XM,YP和YM連接,對觸摸屏兩個導電層的通斷通過XP,XM,YP和YM4個引腳控制。通過讀寫指定的特殊寄存器,S3C2440的觸摸屏控制器將自動控制觸摸屏接口打開或關閉,按指定操作模式完成觸點數(shù)據(jù)的采集。

圖1 S3C2440ADC和觸摸屏接口結構
2 輸入子系統(tǒng)體系結構簡介
設備驅動程序在Linux內核中占很重要地位,設備驅動以內核模塊方式實現(xiàn),可動態(tài)加載和卸載。Linux設備驅動的實現(xiàn)只需根據(jù)內核提供的一組相關數(shù)據(jù)結構和驅動接口標準,完成關鍵數(shù)據(jù)結構初始化和回調函數(shù)的編寫。對字符設備驅動內核提供cdev數(shù)據(jù)結構和file_operations結構體及操作方法,實現(xiàn)字符設備驅動只需完成cdev的初始化、file_operations中操作函數(shù)的實現(xiàn)并向內核注冊。
Linux輸入子系統(tǒng)是對物理形態(tài)各異的功能相似的輸入設備的抽象,是內核中字符設備驅動接口的封裝。輸入子系統(tǒng)由設備驅動層、層和事件處理層構成。設備驅動層提供對硬件各寄存器的讀寫訪問和將底層硬件對用戶輸入訪問的響應轉換為標準的輸入事件,通過層提交給事件處理層;層對設備驅動層提供編程接口,對事件處理層的也提供編程接口;事件處理層為用戶空間的應用程序提供了統(tǒng)一訪問設備的接口和驅動層提交來的事件處理?;谳斎胱酉到y(tǒng)設計驅動時要實現(xiàn)設備驅動層的驅動和事件處理層的驅動,而輸入子系統(tǒng)在事件處理層為觸摸屏提供標準的事件接口,所以只要須完成設備驅動層的驅動,即硬件寄存器的操作和提交輸入事件信息?;谳斎胱酉到y(tǒng)的設備驅動層驅動的實現(xiàn)過程如下:
1)驅動模塊加載函數(shù)中設置輸入設備支持輸入子系統(tǒng)的事件;Linux內核用input_dev代表一個輸入設備,對于觸摸屏通過對input_dev實例的evbit[0]的設置來支持同步(EN_SYN)、按鍵(EN_KEY)和坐標(EV_ABS)事件。
2)通過內核提供的input_register_device0函數(shù)向輸入子系統(tǒng)注冊輸入設備。
3)輸入設備發(fā)生輸入操作時提交所發(fā)生的事件及對應鍵值或坐標等狀態(tài)信息。觸摸屏使用輸入子系統(tǒng)提供的通用輸入事件驅動程序Evdev,將事件信息打包成Input_event類型進行。
3 Linux觸摸屏驅動的實現(xiàn)
3.1 觸摸屏觸點數(shù)據(jù)采集
S3C2440觸摸屏控制器有四種工作模式,通過讀寫ADCTSC、ADCDA、ADCDATl和ADCDLY寄存器完成觸摸屏控制器工作模式的選擇和觸摸屏觸點數(shù)據(jù)采集。由于觸摸動作時間的隨機性,驅動設計時選擇中斷工作方式。設置ADCTSC寄存器為0xD3使觸摸屏控制器進入等待中斷模式,設置ADCDLY采樣延遲時間。當觸摸屏被按下,觸摸屏控制器將產(chǎn)生INT_TC中斷:在ⅡTC中斷處理程序中,設置ADCTSC寄存器為0x0C,觸摸屏控制器切換為自動X/Y坐標轉換模式,將自動轉換觸點對應的x,y坐標值,并分別寫入ADCDAT0寄存器和ADCDTA1寄存器,發(fā)出INTADC中斷表示ADC轉換完成;進入INT_ADC中斷處理程序讀取ADCDAT0寄存器和ADCDTA1寄存器中坐標數(shù)據(jù)并進行相應轉換,數(shù)據(jù)采集后重新設置ADCTSC寄存器為0xD3使觸摸屏控制器進入等待中斷模式,等待觸摸屏被按下。
3.2 驅動初始化模塊
Linux驅動程序以內核模塊方式加載運行。實現(xiàn)驅動加載函數(shù)s3c2440ts_init()并通過module_init(s3c2440ts_init)向內核注冊。在驅動加載函數(shù)主要完成:啟用ADC所需要的時鐘、映射10地址、初始化ADC和觸摸屏控制器相關的寄存器、申請INT_TS和INT_ADC中斷、初始化輸入設備、將輸入設備注冊到輸入子系統(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所示。

圖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內核代碼的高可重性,對其他類型輸入設備驅動程序的設計有一定參考作用。
參考文獻:
[1]. S3C2440 datasheet http://www.hbjingang.com/datasheet/S3C2440_589562.html.
[2]. ARM920t datasheet http://www.hbjingang.com/datasheet/ARM920t_139814.html.
版權與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。
如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網(wǎng)聯(lián)系,否則視為放棄相關權利。
- LED照明技術特性與選型運維指南2026/1/5 10:26:27
- 工業(yè)觸摸屏選型與現(xiàn)場應用技術指南2025/12/22 11:44:57
- 顯示器色深 6Bit、8Bit、10Bit 與 6 抖 8、8 抖 10、FRC2025/8/28 15:29:32
- Micro-LED技術解析2025/8/26 17:21:56
- LED顯示屏標清、高清、超清、1080P與4K的解析2025/8/8 17:05:00









