日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于Linux系統(tǒng)的觸摸屏驅(qū)動(dòng)方案

引言

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

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

1  硬件平臺

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

觸摸屏由觸摸檢測部件和觸摸屏控制器構(gòu)成,對應(yīng)S3C2440平臺的四線電阻觸摸屏的外接電路和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連接,對觸摸屏兩個(gè)導(dǎo)電層的通斷通過XP,XM,YP和YM4個(gè)引腳控制。通過讀寫指定的特殊寄存器,S3C2440的觸摸屏控制器將自動(dòng)控制觸摸屏接口打開或關(guān)閉,按指定操作模式完成觸點(diǎn)數(shù)據(jù)的采集。

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ù)的編寫。對字符設(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)核注冊。

Linux輸入子系統(tǒng)是對物理形態(tài)各異的功能相似的輸入設(shè)備的抽象,是內(nèi)核中字符設(shè)備驅(qū)動(dòng)接口的封裝。輸入子系統(tǒng)由設(shè)備驅(qū)動(dòng)層、核心層和事件處理層構(gòu)成。設(shè)備驅(qū)動(dòng)層提供對硬件各寄存器的讀寫訪問和將底層硬件對用戶輸入訪問的響應(yīng)轉(zhuǎn)換為標(biāo)準(zhǔn)的輸入事件,通過核心層提交給事件處理層;核心層對設(shè)備驅(qū)動(dòng)層提供編程接口,對事件處理層的也提供編程接口;事件處理層為用戶空間的應(yīng)用程序提供了統(tǒng)一訪問設(shè)備的接口和驅(qū)動(dòng)層提交來的事件處理?;谳斎胱酉到y(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),即硬件寄存器的操作和提交輸入事件信息?;谳斎胱酉到y(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è)備,對于觸摸屏通過對input_dev實(shí)例的evbit[0]的設(shè)置來支持同步(EN_SYN)、按鍵(EN_KEY)和絕對坐標(biāo)(EV_ABS)事件。

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

3)輸入設(shè)備發(fā)生輸入操作時(shí)提交所發(fā)生的事件及對應(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)對應(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)核注冊。在驅(qū)動(dòng)加載函數(shù)主要完成:啟用ADC所需要的時(shí)鐘、映射10地址、初始化ADC和觸摸屏控制器相關(guān)的寄存器、申請INT_TS和INT_ADC中斷、初始化輸入設(shè)備、將輸入設(shè)備注冊到輸入子系統(tǒng)。關(guān)鍵代碼如下:

[!--empirenews.page--]

3.3 中斷處理程序及事件報(bào)告

用戶對觸摸屏進(jìn)行按下、抬起和拖動(dòng)等操作時(shí),觸發(fā)中斷INT_TS,內(nèi)核進(jìn)入到中斷處理函數(shù)tc_irq0進(jìn)行中斷處理。tcirq0中,通過ADC—LOCK鎖機(jī)制保證只有一個(gè)驅(qū)動(dòng)程序使用ADC的中斷線,通過讀取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絕對坐標(biāo)事件,inputreport_key()觸摸屏對應(yīng)按鍵被按下事件,輸入子系統(tǒng)使用inputsync()將報(bào)告的事件組成一個(gè)evdev包,通過/dev/input/eventX發(fā)送出去,應(yīng)用程序通過讀取/dev/input/eventX即可獲得事件信息。關(guān)鍵代碼如下:

4  結(jié)論

隨著信息技術(shù)的快速發(fā)展,嵌入式技術(shù)與人們的生活越來越緊密,觸摸屏作為一種新型輸入設(shè)備因具有輕便、占用空間少、方便靈活等優(yōu)點(diǎn),應(yīng)用逐漸普及,甚至在工業(yè)領(lǐng)域也得到了大量的應(yīng)用,提高了我國工控自動(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)事件接口,簡化了驅(qū)動(dòng)設(shè)計(jì),驅(qū)動(dòng)設(shè)計(jì)的重點(diǎn)變成了觸摸屏控制器相關(guān)的硬件操作及功能實(shí)現(xiàn),充分體現(xiàn)Linux內(nèi)核代碼的高可重性,對其他類型輸入設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)有一定參考作用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

基于ABB機(jī)器人生產(chǎn)線 ,設(shè)計(jì)了一種西門子PLC自保護(hù)智能控制系統(tǒng) 。該系統(tǒng)采用HK-FKGD40無線手持報(bào)警器 , 受機(jī)器人擠壓時(shí)人員通過該報(bào)警器便可觸發(fā)機(jī)器人智能判斷 、自動(dòng)回退運(yùn)動(dòng)實(shí)現(xiàn)自我解救 , 同時(shí)系統(tǒng)發(fā)出聲光...

關(guān)鍵字: 無線手持報(bào)警器 自保護(hù);智能 PLC ABB機(jī)器人 觸摸屏

在科技飛速發(fā)展的當(dāng)下,智能設(shè)備已深度融入人們的生活與工作。其中,PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)作為一款集信息輸入、存儲(chǔ)、管理和傳遞于一體,且具備辦公、娛樂、移動(dòng)通信等多種功能...

關(guān)鍵字: 智能設(shè)備 觸摸屏 微控制器

上海 2025年6月18日 /美通社/ -- 2025年6月18日,第九屆國際氫能與燃料電池汽車大會(huì)暨展覽會(huì)(FCVC 2025)在上海汽車會(huì)展中心盛大開幕。威孚集團(tuán)全面展示了其在氫能產(chǎn)業(yè)鏈三大核心領(lǐng)域——燃料電池核心...

關(guān)鍵字: 高壓 零部件 BSP 子系統(tǒng)

蘇州 2025年5月27日 /美通社/ -- 5月24日-26日,第26屆全國醫(yī)院建設(shè)大會(huì)暨國際醫(yī)院建設(shè)、裝備及管理展覽會(huì)(CHCC 2025)在武漢舉行。藝卓(EIZO)攜手術(shù)室視覺顯示解決方案參展,以科技...

關(guān)鍵字: HC 醫(yī)學(xué)影像 IO 觸摸屏

隨著手工釀造的普及和復(fù)雜程度的不斷提高,許多釀酒師——尤其是小規(guī)?;颡?dú)立的釀酒師——仍然依靠手工方法來記錄和跟蹤關(guān)鍵數(shù)據(jù),如溫度、pH值、體積和比重。這些讀數(shù)通常使用手動(dòng)儀器,記錄在紙上或分散在電子表格和文檔中,沒有集中...

關(guān)鍵字: 觸摸屏 物聯(lián)網(wǎng) DS18B20 傳感器

隨著嵌入式系統(tǒng)的廣泛應(yīng)用,觸摸屏作為人機(jī)交互的重要接口,其驅(qū)動(dòng)開發(fā)變得愈發(fā)重要。本文將詳細(xì)介紹在嵌入式Linux環(huán)境下,觸摸屏驅(qū)動(dòng)的開發(fā)流程,從設(shè)備樹的配置到校準(zhǔn)算法的實(shí)現(xiàn),為讀者提供一個(gè)全面的開發(fā)指南。

關(guān)鍵字: 嵌入式Linux 觸摸屏 校準(zhǔn)算法 設(shè)備樹

將您的樹莓派Pico變成帶有觸摸屏界面的USB-HID設(shè)備!在這個(gè)項(xiàng)目中,我們將在Arduino IDE中設(shè)置編程環(huán)境,為3.5”Pico Touch LCD屏蔽配置庫,測試基本功能,創(chuàng)建簡單的按鈕(用于復(fù)制和粘貼),顯...

關(guān)鍵字: 樹莓派 觸摸屏 LCD Windows

ADS7846是美國Burr-Brown公司推出的新一代4線制觸摸屏控制器,當(dāng)與觸摸屏連用,只要筆或手指點(diǎn)觸摸在屏上時(shí),即可迅速得到該點(diǎn)的位置信號以達(dá)到在觸摸屏表面尋址的目的。

關(guān)鍵字: ADS7846 觸摸屏

?激光治療儀觸摸屏接口設(shè)計(jì)?主要包括觸摸屏的工作原理、控制器工作原理以及在激光治療儀中的應(yīng)用。

關(guān)鍵字: 觸摸屏 激光治療儀

中國深圳 – TITAN Haptics泰坦觸覺宣布推出DRAKE LFi觸覺馬達(dá),旨在滿足中國電子市場不斷增長的需求。DRAKE LFi專為需要觸覺反饋的設(shè)備設(shè)計(jì),例如觸摸屏和觸覺按鈕。這款新型觸覺馬達(dá)能夠提供精準(zhǔn)的局...

關(guān)鍵字: 消費(fèi)電子 觸摸屏 可穿戴設(shè)備
關(guān)閉