<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 基于Linux系統(tǒng)的觸摸屏驅(qū)動(dòng)方案

          基于Linux系統(tǒng)的觸摸屏驅(qū)動(dòng)方案

          作者: 時(shí)間:2012-03-09 來源:網(wǎng)絡(luò) 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/168330.htm

          作為一種輸入設(shè)備,具有堅(jiān)固耐用、反應(yīng)速度快、節(jié)省空間、易于交流等優(yōu)點(diǎn),提供簡單、方便、自然的人機(jī)交互方式,目前被廣泛應(yīng)用于工業(yè)控制、電子查詢、消費(fèi)性電產(chǎn)品領(lǐng)域。

          作為是目前最流行的操作之一,在桌面、服務(wù)器領(lǐng)域有大量用戶,具有源代碼開放,支持的硬件豐富、高可移植等優(yōu)點(diǎn),在嵌入式領(lǐng)域也備受青睞。根據(jù)不同設(shè)備,將程序分為字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)三種,輸入子u是對(duì)字符類型輸入設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)方式的抽象,是對(duì)分散的、多種不同類別的輸入設(shè)備進(jìn)行統(tǒng)一處理的內(nèi)核驅(qū)動(dòng)模型。輸入子系統(tǒng)具高效、無Bug和可重用等優(yōu)點(diǎn)。本文對(duì)Linux輸入子系統(tǒng)的驅(qū)動(dòng)進(jìn)行深入的討論。

          1 硬件平臺(tái)

          S3C2440是三星公司推出的采用ARM920t內(nèi)核的MCU,集成了豐富的外圍設(shè)備,其中包括4線電阻式控制器和8通道多路復(fù)用ADC。

          觸摸屏由觸摸檢測部件和觸摸屏控制器構(gòu)成,對(duì)應(yīng)S3C2440平臺(tái)的四線電阻觸摸屏的外接電路和S3C2440芯片自帶的A/D轉(zhuǎn)換控制部分。四線電阻觸摸屏的外接電路控制上下兩層導(dǎo)電層的通斷情況以及如何取電壓,取電壓之后由S3C2440芯片中的A/D將模擬量轉(zhuǎn)換成數(shù)字量。S3C2440芯片的A/D轉(zhuǎn)換器有8個(gè)輸入通道,轉(zhuǎn)換結(jié)果為10bit數(shù)字,轉(zhuǎn)換過程在芯片內(nèi)部自動(dòng)實(shí)現(xiàn),轉(zhuǎn)換的結(jié)果從寄存器中取值,再進(jìn)行一定的轉(zhuǎn)后可直接得到觸摸點(diǎn)的坐標(biāo)。S3C2440提供的ADC和觸摸屏接口如圖1所示,觸摸屏直接與引腳XP,XM,YP和YM連接,對(duì)觸摸屏兩個(gè)導(dǎo)電層的通斷通過XP,XM,YP和YM4個(gè)引腳控制。通過讀寫指定的特殊寄存器,S3C2440的觸摸屏控制器將自動(dòng)控制觸摸屏接口打開或關(guān)閉,按指定操作模式完成觸點(diǎn)數(shù)據(jù)的采集。

          26.jpg

          2 輸入子系統(tǒng)體系結(jié)構(gòu)簡介

          設(shè)備驅(qū)動(dòng)程序在Linux內(nèi)核中占很重要地位,設(shè)備驅(qū)動(dòng)以內(nèi)核模塊方式實(shí)現(xiàn),可動(dòng)態(tài)加載和卸載。Linux設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)只需根據(jù)內(nèi)核提供的一組相關(guān)數(shù)據(jù)結(jié)構(gòu)和驅(qū)動(dòng)接口標(biāo)準(zhǔn),完成關(guān)鍵數(shù)據(jù)結(jié)構(gòu)初始化和回調(diào)函數(shù)的編寫。對(duì)字符設(shè)備驅(qū)動(dòng)內(nèi)核提供cdev數(shù)據(jù)結(jié)構(gòu)和file_operatiONs結(jié)構(gòu)體及操作方法,實(shí)現(xiàn)字符設(shè)備驅(qū)動(dòng)只需完成cdev的初始化、file_operations中操作函數(shù)的實(shí)現(xiàn)并向內(nèi)核注冊(cè)。

          Linux輸入子系統(tǒng)是對(duì)物理形態(tài)各異的功能相似的輸入設(shè)備的抽象,是內(nèi)核中字符設(shè)備驅(qū)動(dòng)接口的封裝。輸入子系統(tǒng)由設(shè)備驅(qū)動(dòng)層、核心層和事件處理層構(gòu)成。設(shè)備驅(qū)動(dòng)層提供對(duì)硬件各寄存器的讀寫訪問和將底層硬件對(duì)用戶輸入訪問的響應(yīng)轉(zhuǎn)換為標(biāo)準(zhǔn)的輸入事件,通過核心層提交給事件處理層;核心層對(duì)設(shè)備驅(qū)動(dòng)層提供編程接口,對(duì)事件處理層的也提供編程接口;事件處理層為用戶空間的應(yīng)用程序提供了統(tǒng)一訪問設(shè)備的接口和驅(qū)動(dòng)層提交來的事件處理。輸入子系統(tǒng)設(shè)計(jì)驅(qū)動(dòng)時(shí)要實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)層的驅(qū)動(dòng)和事件處理層的驅(qū)動(dòng),而輸入子系統(tǒng)在事件處理層為觸摸屏提供標(biāo)準(zhǔn)的事件接口,所以只要須完成設(shè)備驅(qū)動(dòng)層的驅(qū)動(dòng),即硬件寄存器的操作和提交輸入事件信息。輸入子系統(tǒng)的設(shè)備驅(qū)動(dòng)層驅(qū)動(dòng)的實(shí)現(xiàn)過程如下:

          1)驅(qū)動(dòng)模塊加載函數(shù)中設(shè)置輸入設(shè)備支持輸入子系統(tǒng)的事件;Linux內(nèi)核用input_dev代表一個(gè)輸入設(shè)備,對(duì)于觸摸屏通過對(duì)input_dev實(shí)例的evbit[0]的設(shè)置來支持同步(EN_SYN)、按鍵(EN_KEY)和絕對(duì)坐標(biāo)(EV_ABS)事件。

          2)通過內(nèi)核提供的input_regiSTer_device0函數(shù)向輸入子系統(tǒng)注冊(cè)輸入設(shè)備。

          3)輸入設(shè)備發(fā)生輸入操作時(shí)提交所發(fā)生的事件及對(duì)應(yīng)鍵值或坐標(biāo)等狀態(tài)信息。觸摸屏使用輸入子系統(tǒng)提供的通用輸入事件驅(qū)動(dòng)程序Evdev,將事件信息打包成Input_event類型進(jìn)行報(bào)告。

          3 Linux觸摸屏驅(qū)動(dòng)的實(shí)現(xiàn)

          3.1 觸摸屏觸點(diǎn)數(shù)據(jù)采集

          S3C2440觸摸屏控制器有四種工作模式,通過讀寫ADCTSC、ADCDA、ADCDATl和ADCDLY寄存器完成觸摸屏控制器工作模式的選擇和觸摸屏觸點(diǎn)數(shù)據(jù)采集。由于觸摸動(dòng)作時(shí)間的隨機(jī)性,驅(qū)動(dòng)設(shè)計(jì)時(shí)選擇中斷工作方式。設(shè)置ADCTSC寄存器為0xD3使觸摸屏控制器進(jìn)入等待中斷模式,設(shè)置ADCDLY采樣延遲時(shí)間。當(dāng)觸摸屏被按下,觸摸屏控制器將產(chǎn)生INT_TC中斷:在ⅡTC中斷處理程序中,設(shè)置ADCTSC寄存器為0x0C,觸摸屏控制器切換為自動(dòng)X/Y坐標(biāo)轉(zhuǎn)換模式,將自動(dòng)轉(zhuǎn)換觸點(diǎn)對(duì)應(yīng)的x,y坐標(biāo)值,并分別寫入ADCDAT0寄存器和ADCDTA1寄存器,發(fā)出INTADC中斷表示ADC轉(zhuǎn)換完成;進(jìn)入INT_ADC中斷處理程序讀取ADCDAT0寄存器和ADCDTA1寄存器中坐標(biāo)數(shù)據(jù)并進(jìn)行相應(yīng)轉(zhuǎn)換,數(shù)據(jù)采集后重新設(shè)置ADCTSC寄存器為0xD3使觸摸屏控制器進(jìn)入等待中斷模式,等待觸摸屏被按下。

          3.2 驅(qū)動(dòng)初始化模塊

          Linux驅(qū)動(dòng)程序以內(nèi)核模塊方式加載運(yùn)行。實(shí)現(xiàn)驅(qū)動(dòng)加載函數(shù)s3c2440ts_init()并通過module_init(s3c2440ts_init)向內(nèi)核注冊(cè)。在驅(qū)動(dòng)加載函數(shù)主要完成:啟用ADC所需要的時(shí)鐘、映射10地址、初始化ADC和觸摸屏控制器相關(guān)的寄存器、申請(qǐng)INT_TS和INT_ADC中斷、初始化輸入設(shè)備、將輸入設(shè)備注冊(cè)到輸入子系統(tǒng)。關(guān)鍵代碼如下:

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程



          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();