輸入子系統之觸控螢幕驅動1(4th)

2021-08-01 03:57:11 字數 2235 閱讀 4779

本節對程式進行優化

溫習一下觸控螢幕使用過程

1、按下,產生中斷

2、在中斷處理程式irq_tc中啟動adc,轉化座標(x,y)

3、adc結束之後,產生adc中斷。

4、在adc中斷處理函式裡面上報事件(input_event),啟動定時器

5、定時器時間到(處理長按,滑動)

6、鬆開

處理2個問題

1、x,y的值不大精確,列印出來的值變化大

2、按下過程中長按或滑動不能處理,需要增加某些優化好的措施來處理

用到的2個暫存器adcdly、adcdat[0]

/* 優化錯施1:

* 設定adcdly為最大值, 這使得電壓穩定後再發出irq_tc中斷

解決問題:x,y的值不大精確

思路:觸控螢幕的原理實際上就是乙個歐姆定律的靈活應用,就是分壓。

可以想象一下,按下之後如果立即產生中斷,這個時候電壓還沒有穩定,

測出來的電壓可能不準確。所以我們要在電壓穩定之後去測量。

電壓穩定之後才產生觸控螢幕按下、鬆開的中斷。設定adcdly為最大。

*//* 優化措施2: 如果adc完成時, 發現觸控筆已經鬆開, 則丟棄此次結果

解決問題:在使用觸控螢幕的過程中,按下,產生中斷,在中斷處理函式中,

啟動adc,adc需要一定的時間。啟動adc花時t1,如果我們在t2時就把他鬆開(t1>t2),

那麼,adc轉換成功之後,這個電壓就不可靠了。這個值要扔掉。

adcdat[0]用來判斷觸控筆是按下還是鬆開。

*/init函式

static

int s3c_ts_init(void)

adc函式

static irqreturn_t adc_irq(int irq, void *dev_id)

else

//如果還是保持按下就列印出來,讓他進入等待鬆開模式

return irq_handled;

}

完整**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

struct s3c_ts_regs ;

static

struct input_dev *s3c_ts_dev;

static

volatile

struct s3c_ts_regs *s3c_ts_regs; //定義乙個指標,第乙個指標指向**? ioremap就可以了

static

void enter_wait_pen_down_mode(void) //觸控筆按下模式

static

void enter_wait_pen_up_mode(void)

static

void enter_measure_xy_mode(void)

static

void start_adc(void)

static irqreturn_t pen_down_up_irq(int irq, void *dev_id)

else

return irq_handled;

}static irqreturn_t adc_irq(int irq, void *dev_id)

else

//如果還是保持按下就列印出來,讓他進入等待鬆開模式

return irq_handled;

}static

int s3c_ts_init(void)

static

void s3c_ts_exit(void)

module_init(s3c_ts_init);

module_exit(s3c_ts_exit);

module_license("gpl");

Linux驅動開發之基於輸入子系統觸控螢幕驅動程式

1 驅動源 include include include include include include include include include include include include include include for ts.dev.id.version define s3c...

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

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

linux驅動子系統之輸入子系統 5

5.總結 5.1 事件資訊的上報過程分析 l 上報的大致過程 裝置驅動層 核心層 事件處理層 應用層 l 具體呼叫的函式 以evdev為例 input event input handle event input pass event handle handler event handle,type...