9 觸控螢幕驅動移植實戰

2021-08-29 12:25:16 字數 2528 閱讀 1451

1.1、常用的2種觸控螢幕

(1)電阻觸控螢幕。驅動一般分2種:一種是soc內建觸控螢幕控制器,一種是外接的專門觸控螢幕控制晶元,通過i2c介面和soc通訊。

(2)電容觸控螢幕。驅動只有一種,外接專用的電容式觸控螢幕控制晶元,i2c介面和soc通訊。

1.2、x210使用的觸控螢幕

(1)x210v3使用的觸控螢幕:ft5x06

(2)x210v3s使用的觸控螢幕:gslx680

1.3、學習觸控螢幕驅動的關鍵點

(1)input子系統相關知識

(2)中斷上下半部

(3)i2c子系統

(4)觸控螢幕晶元本身知識

1.4、競爭狀態和同步

2.1、一些概念

(1)競爭狀態(簡稱竟態)

(2)臨界段、互斥鎖、死鎖

(3)同步(多cpu、多工、中斷)

2.2、解決竟態的方法

(1)原子操作 automic_t

(2)訊號量、互斥鎖

(3)自旋鎖

2.3、自旋鎖和訊號量的使用要點

(1)自旋鎖不能遞迴

(2)自旋鎖可以用在中斷上下文(訊號量不可以,因為可能睡眠),但是在中斷上下文中獲取自旋鎖之前要先禁用本地中斷

(3)自旋鎖的核心要求是:擁有自旋鎖的**必須不能睡眠,要一直持有cpu直到釋放自旋鎖

(4)訊號量和讀寫訊號量適合於保持時間較長的情況,它們會導致呼叫者睡眠,因此只能在程序上下文使用,而自旋鎖適合於保持時間非常短的情況,它可以在任何上下文使用。如果被保護的共享資源只在程序上下文訪問,使用訊號量保護該共享資源非常合適,如果對共享資源的訪問時間非常短,自旋鎖也可以。但是如果被保護的共享資源需要在中斷上下文訪問(包括底半部即中斷處理控制代碼和頂半部即軟中斷),就必須使用自旋鎖。自旋鎖保持期間是搶占失效的,而訊號量和讀寫訊號量保持期間是可以被搶占的。自旋鎖只有在核心可搶占或smp(多處理器)的情況下才真正需要,在單cpu且不可搶占的核心下,自旋鎖的所有操作都是空操作。

3.1、中斷處理的注意點

(1)中斷上下文,不能和使用者空間資料互動

(2)不能交出cpu(不能休眠、不能schedule)

(3)isr執行時間盡可能短,越長則系統響應特性越差

3.2、中斷下半部2種解決方案

(1)為什麼要分上半部(top half,又叫頂半部)和下半部(bottom half,又叫底半部)

(2)下半部處理策略1:tasklet(小任務)

(3)下半部處理策略2:workqueue(工作佇列)

前面說過tasklet被放在乙個全域性的tasklet_vec的鍊錶中,鍊錶中的元素是tasklet_struct結構體。核心中有個ksoftirqd()的核心執行緒,它會週期的遍歷軟中斷的向量列表,如果發現哪個軟中斷向量被掛起了(pending),就執行相應的處理函式。

中斷上下半部使用原則

頂半部:任務量少,緊急,遮蔽中斷,時間少

tasklet:任務量中等,較緊急,遮蔽中斷,時間較多

wrokqueue:任務量多,不急迫,不會遮蔽中斷,時間多,會睡眠,

計算觸點的x,y座標分為如下兩步:

1. 計算y座標,在y+電極施加驅動電壓vdrive, y-電極接地,x+做為引出端測量得到接觸點的電壓,由於ito層均勻導電,觸點電壓與vdrive電壓之比等於觸點y座標與屏高度之比。

2. 計算x座標,在x+電極施加驅動電壓vdrive, x-電極接地,y+做為引出端測量得到接觸點的電壓,由於ito層均勻導電,觸點電壓與vdrive電壓之比等於觸點x座標與屏寬度之比。

gsl1680是電容觸控螢幕

參考:

struct gsl_ts ;

struct gsl_ts_data ;

觸控螢幕裝置驅動程式的初始化函式、退出函式和中斷處理函式的關係如圖所示。

當模組載入時,會呼叫初始化函式s3c2410ts init(),在該函式中會呼叫probe()函式,該函式中會進一步呼叫request irq()函式註冊兩個中斷。

這兩個中斷的處理函式分別是stylus-updown()和stylus action(), request-irq()函式會操作核心中的乙個中斷描述符陣列結構irq desc,該陣列結構比較複雜,主要的功能就是記錄中斷號對應的中斷處理函式。

當中斷到來時,會到中斷描述符陣列中詢問中斷號對應的中斷處理函式,然後執行該函式。在本例項中,這兩個中斷的處理函式分別是stylus updown()和stylus action()

解除安裝模組時,會呼叫退出函式s3c2410ts exit(),在該函式中,會呼叫free irq()來釋放裝置所使用的中斷號。free irg(函式也會操作中斷描述符陣列結構irq desc,,將該裝置所對應的中斷處理函式刪除。

中斷處理函式stylusupdown()中會呼叫touchtimer fire(),這個函式也被定時器觸發,觸發的條件是,緩衝區中的資料不為0,也就是有觸控事件產生。

觸控螢幕驅動

輸入子系統體系 核心層 linux dir drivers input input.c 提供最核心函式 裝置事件層 linux dir drivers input evdev.c 提供handler 提供輸入裝置產生的原始資料並上報給應用程式,這適用於 所有輸入裝置,該觸控螢幕也不例外 編寫基於輸入...

觸控螢幕移植Emwin

1.時間配置程式gui x.c中包含觸控螢幕程式touch.h標頭檔案 2.新增以下程式 準備 x 軸測量 裡面不需要加東西,只要存在就會自動進行測量 void gui touch x activatex void 準備 y 軸測量 void gui touch x activatey void 返...

QT 觸控螢幕 驅動

要 本文主要介紹了在嵌入式 linux 系統下基於 qt embeded 的觸控螢幕驅動的設計,通過對 linux 裝置 驅動和qt embedded裝置驅動介面的工作原理和機制介紹,並結合大量源 進行分析,提出了基於qt embeded 的觸控螢幕驅動的開發方案。linux 下的裝置驅動基礎 li...