嵌入式ARM下的觸摸屏驅動(dòng)系統設計研究
其中,driver中定義了驅動(dòng)名稱(chēng)、總線(xiàn)類(lèi)型和驅動(dòng)所有者。
probe函數為探測設備的函數。其主要進(jìn)行初始化設備數據結構、初始化中斷、向設備發(fā)送控制字等。
remove函數為設備移除函數。其主要進(jìn)行移除設備文件、釋放中斷、釋放設備。
suspend為設備暫停函數。
resume為設備恢復函數。
(2設備初始化函數staticint__initad7873_nit(void)即是注冊上述數據結構,也即是注冊一個(gè)驅動(dòng),其中主要的內容為:
returnspi_register_driver(ad7873_driver);(3)還要設計一個(gè)重要的函數,就是中斷函數,在觸摸屏被按下的時(shí)候產(chǎn)生中斷,在中斷函數中的重要工作就是啟動(dòng)定時(shí)器,以判斷觸摸后的動(dòng)作是觸摸筆被提起還是繼續按下。其函數原型設計為staticirqreturn_tads7873_irq(intirq,void*handle);(4)定時(shí)器函數設計的目的就是判斷觸摸屏是否被提起,被提起就立刻刷新設備的數據到應用層,仍然處于"按下"狀態(tài),則需要繼續測量。其函數原型設計為:
staticvoidads7873_timer(unsignedlonghandle);
3.3驅動(dòng)的編譯和加載
驅動(dòng)程序加入內核有兩種方式動(dòng)態(tài)和靜態(tài),動(dòng)態(tài)就是只是把驅動(dòng)編譯為模塊,系統啟動(dòng)后執行insmod后加載,靜態(tài)是指直接編譯進(jìn)內核,系統啟動(dòng)后自動(dòng)加載了。由于我們的驅動(dòng)需要經(jīng)過(guò)測試才能加入內核,因此采用動(dòng)態(tài)的方式加載驅動(dòng)。
在已經(jīng)安裝好開(kāi)發(fā)平臺的主機上執行make,就可以得到目標文件ad7873.ko,這就是我們需要的驅動(dòng)。在platform_data數據結構中設置好驅動(dòng)需要的數據,如中斷、觸摸屏大小、觸摸壓力上下限等數值,并編譯好內核下載到開(kāi)發(fā)板中運行。然后將ad7873.ko復制到開(kāi)發(fā)板,在終端下執行insmodad7873.ko,得到如下提示:
圖4驅動(dòng)加載信息
顯示驅動(dòng)已經(jīng)加載成功,中斷號為126.
(注:"thissectencehasbeen",為調試驅動(dòng)中斷的測試語(yǔ)句)然后用應用廣泛的tslib觸摸屏測試程序對驅動(dòng)進(jìn)行測試,測試結果顯示,觸摸屏工作正常。下圖觸摸屏上白色的字"桂林電子科技大學(xué)觸摸屏"為在tslib的測試程序下用觸摸筆寫(xiě)的字,證明了觸摸屏工作是正常的。
將此設計應用到家庭智能網(wǎng)關(guān)系統中,證明其工作穩定,響應很快。
圖5觸摸屏正常響應圖
評論