嵌入式linux之觸控螢幕驅動框架

2021-07-04 05:34:33 字數 3048 閱讀 3958

1、工作原理

首先我們要區分lcd和觸控螢幕,lcd是乙個螢幕,觸控螢幕是貼在lcd上的兩層膜。

接下來我們說一下四線電阻觸控螢幕的原理:觸控螢幕就是上下兩層膜,比如上層代表x軸(xm:負端,xp:正端),下層代表y軸(ym:負端,yp:正端)。當讀取x軸座標時,xp接3.3v,xm接地,從ym讀取按下點的電壓值作為模擬輸入訊號,再經過ad轉換後就得到了x軸座標。同理,當讀取y軸座標時,yp接3.3v,ym接地,從xm讀取按下點的電壓值作為模擬輸入,再經過ad轉換後就得到了y軸座標。為了把原理說清楚我們省去了不少細節的東西,詳情可參考韋東山老師的書:嵌入式linux應用開發

2、工作流程

(1)當沒有按下時,觸控螢幕控制器處於等待中斷模式(這裡等待的是int_tc中斷)。

(2)一旦被按下就會產生int_tc中斷

(3)在中斷處理函式裡,使其啟用下面兩種轉換模式中的一種:一種是分離的x/y軸座標轉化模式,另一種是連續的x/y軸轉換模式。

(4)一旦轉換完,就會產生int_adc中斷

(5)在中斷處理函式中上報adc轉換值

但是這樣是有乙個問題的,因為我們按下一次,只會產生乙個中斷,如果我們滑動的話,就不會產生任何效果。為了處理滑動,我們可以在(5)中新增如下功能:啟用定時器,每隔一段時間就啟用一次ad轉化,這樣就可以得到按下點的實時資訊了。

(6)鬆開

測試2th~7th:

1. make menuconfig 去掉原來的觸控螢幕驅動程式

-> device drivers

-> input device support

-> generic input layer

-> touchscreens

<> s3c2410/s3c2440 touchscreens

make uimage

使用新核心啟動

insmod s3c_ts.ko

按下/鬆開觸控筆

測試2th~7th:

1. ls /dev/event*

2. insmod s3c_ts.ko

3. ls /dev/event*

4. hexdump /dev/event0

秒 微秒 type code value

0000000 29a4 0000 8625 0008 0003 0000 0172 0000

0000010 29a4 0000 8631 0008 0003 0001 027c 0000

0000020 29a4 0000 8634 0008 0003 0018 0001 0000

0000030 29a4 0000 8638 0008 0001 014a 0001 0000

0000040 29a4 0000 863c 0008 0000 0000 0000 0000

0000050 29a4 0000 c85e 0008 0003 0000 0171 0000

0000060 29a4 0000 c874 0008 0003 0001 027d 0000

0000070 29a4 0000 c87b 0008 0000 0000 0000 0000

0000080 29a4 0000 ed37 0008 0003 0018 0000 0000

0000090 29a4 0000 ed48 0008 0001 014a 0000 0000

00000a0 29a4 0000 ed4a 0008 0000 0000 0000 0000

使用:當我們在除錯輸入裝置時,如:鍵盤,觸控螢幕

會使用到hexdump工具。其內容如下:

鍵盤:

0000000 f6a6 4e15 154b 0006 0001 0004 0001 0000

0000010 f6a6 4e15 1557 0006 0000 0000 0000 0000

0000020 f6a6 4e15 8510 0008 0001 0004 0000 0000

0000030 f6a6 4e15 8517 0008 0000 0000 0000 0000

共九列:

第六列表示上報事件: 0001 –> ev_key; 0000 —> ev_syn

第七列表示鍵值: 0004 –> key_3

第八列表示按鍵事件: 0001 –> press, 0000 –> release

觸控螢幕(電容屏)

0000250 f832 4e15 c502 0006 0003 0039 0020 0000

0000260 f832 4e15 c50f 0006 0003 0030 0004 0000

0000270 f832 4e15 c514 0006 0003 0035 0263 0000

0000280 f832 4e15 c519 0006 0003 0036 01fd 0000

0000290 f832 4e15 c520 0006 0001 014a 0001 0000

00002a0 f832 4e15 c525 0006 0003 0000 0263 0000

00002b0 f832 4e15 c52b 0006 0003 0001 01fd 0000

00002c0 f832 4e15 c530 0006 0000 0000 0000 0000

00002d0 f832 4e15 be99 0007 0003 0039 ffff ffff

00002e0 f832 4e15 bea5 0007 0001 014a 0000 0000

00002f0 f832 4e15 bea8 0007 0000 0000 0000 0000

第七列表示上報事件和: 0039 –> abs_mt_tracking_id; 0030 –> abs_mt_touch_major; 0035 –> abs_mt_position_x; 0036 –> abs_mt_position_y

014a –> btn_touch

第八列表示上報值

linux驅動入門之觸控螢幕驅動

廢話不多說,直接上檔案 1.tq2440 ts sk.c include include include include include include include include include include include include include include include i...

Linux 觸控螢幕驅動程式設計

一 輸入子系統模型解析 1.為什麼需要輸入子系統 完成乙個裝置驅動基本上需要三步 1.註冊乙個字元裝置模型 2.open 或者read對使用者程式的操作 3.對不同的硬體裝置進行操作 但這時候為求方便發現了乙個不同硬體的共性 所以引進了輸入子系統的概念 2.輸入子系統模型的概述 3.輸入子系統模型的...

嵌入式系統中的觸控螢幕及控制

一.系統組成原理 觸控螢幕輸入系統由觸控螢幕 觸控螢幕控制器和微控制器三部分組成。圖 1示出了乙個實際的觸控螢幕輸入系統,在該系統中觸控螢幕採用信利公司的四線電阻式觸控螢幕,觸控螢幕控制器採用 bb公司的 ads7846 微控制器為 motorola m core 系列的mmc2107。圖1 觸控螢...