筆記 mini2440觸控螢幕驅動移植(二)

2021-05-24 02:14:53 字數 1633 閱讀 9056

試了下面的方法:

一、在網上搜尋關於觸控螢幕教程的資料,找到網友寫的觸控螢幕校正程式,但用arm-eabi-gcc編譯不通過,提示缺少stdio.h等標頭檔案,可能是arm-eabi-gcc存在問題;

二、按照網友tstest.c程式中的校正演算法進行校正:第二種辦法也失敗。

雖然失敗,但還是有可取的地方,以後有時間可以據需研究:

sample_array[0]-[3]依次為topleft,topright,bottomleft和bottomright,按下面的公式計算x1、x2、y1和y2

x1=(sample_array[0].x+ sample_array[2].x )/2; x2=(sample_array[1].x+ sample_array[3].x )/2; y1=(sample_array[0].y+ sample_array[1].y )/2; y2=(sample_array[2].y+ sample_array[3].y )/2;

通過:disx=240-(240*(value-x2)/(x1-x2));和disy=320-(320*(value-y2)/(y1-y2));進行座標轉換

參考http://www.100ask.net/showtopic-1946.aspx

三、按friendlyarm論壇上網友提供的方法:

第三種方法應該算成功吧

具體如下:

1、首先在touch_timer_fire中增加printk(kern_info "x: %d, y: %d/n", xp, yp);用於列印4個頂點的座標;

2、列印的4個頂點座標依次為:(xp,yp)

top left  (156, 886)

top right (824, 871)

bottom left (149, 141)

bottom right (856, 146)

3、將s3c2410ts_init中的

input_set_abs_params(dev, abs_x, 0, 0x3ff, 0, 0);

input_set_abs_params(dev, abs_y, 0, 0x3ff, 0, 0);

改為input_set_abs_params(dev, abs_x, 156, 856, 0, 0);

input_set_abs_params(dev, abs_y, 146, 886, 0, 0);

(注:採用的是topleft和bottomright兩個點)

4、按步驟123進行改寫後,燒入核心,發現y軸方向反了,因此在touch_timer_fire中增加:yp = yp - 2*(yp-(886+146)/2)

就是將y座標相對y軸中線做對稱。

5、重新編譯核心,燒入2440,觸控螢幕校正成功。

但也存在一些問題:

1、校準的精度還是很差,尤其是x軸靠近原點的部分,錯開乙個格;

2、mini2440的cpu和ram不夠給力(64m ram),sd卡啟動,速度很慢;

3、好像沒有物理按鍵,進入乙個應用程式後,假死,按觸控螢幕無反應,只能關機重啟。

觸控螢幕驅動

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

UCOS II MINI2440 觸控螢幕

前面已經完成了ucos ii到mini2440的移植 現在來進行基本的應用程式設計 已經完成4個led程式,用來測試移植是否成功 下面把裸奔的觸控螢幕程式移植上來。1.建立touch任務 1 設定好任務堆疊長度 define taskstklengh 1024 2 設定好任務優先順序 define ...

UCOS II TQ2440 觸控螢幕

前面已經完成了ucos ii到mini2440的移植 現在來進行基本的應用程式設計 已經完成4個led程式,用來測試移植是否成功 下面把裸奔的觸控螢幕程式移植上來。1.建立touch任務 1 設定好任務堆疊長度 view plain copy to clipboard print?define ta...