嵌入式課程設(shè)計基于ARM的嵌入式觸摸屏的設(shè)計_第1頁
嵌入式課程設(shè)計基于ARM的嵌入式觸摸屏的設(shè)計_第2頁
嵌入式課程設(shè)計基于ARM的嵌入式觸摸屏的設(shè)計_第3頁
嵌入式課程設(shè)計基于ARM的嵌入式觸摸屏的設(shè)計_第4頁
嵌入式課程設(shè)計基于ARM的嵌入式觸摸屏的設(shè)計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 基于arm的嵌入式觸摸屏的設(shè)計 第26頁 共26頁1 引言使用s3c2410芯片設(shè)計的四線電阻式觸摸屏在博創(chuàng)公司的up netarm2410s 嵌入式開發(fā)平臺上得到了很好的效果,屏幕顯示無閃爍,畫面切換速度快,觸摸屏響應(yīng)迅速。設(shè)備驅(qū)動程序是linux內(nèi)核的重要組成部分,控制了操作系統(tǒng)和硬件設(shè)備之間的交互。linux的設(shè)備管理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉、讀寫這些設(shè)備文件,對設(shè)備的操作就像操作普通的數(shù)據(jù)文件一樣簡便。為開發(fā)便利、提高效率,本設(shè)計采用可安裝模塊方式開發(fā)調(diào)試觸摸屏驅(qū)動程序【1】。本文介紹了基于三星s3c24

2、10x微處理器,采用spi接口與ads7843控制器芯片完成模塊的設(shè)計。具體包括在嵌入式linux操作系統(tǒng)中的軟件驅(qū)動開發(fā),采用內(nèi)核定時器的下半部機制進行了硬件中斷程序設(shè)計,采用16個時鐘周期的坐標轉(zhuǎn)換時序,實現(xiàn)觸摸點數(shù)據(jù)采集的方法,給出了坐標采集的流程。設(shè)計完成的驅(qū)動程序在博創(chuàng)公司教學(xué)實驗設(shè)備up-netarm2410-s平臺上運行效果良好【2】。1.1 課題背景隨著信息家電和通訊設(shè)備的普及,作為與用戶交互的終端媒介,觸摸屏在生活中得到廣泛的應(yīng)用。如何在系統(tǒng)中集成觸摸屏模塊以及在嵌入式操作系統(tǒng)中實現(xiàn)其驅(qū)動程序,都成為嵌入式系統(tǒng)設(shè)計者需要考慮的問題【3】。嵌入式系統(tǒng)觸摸屏的應(yīng)用越來廣泛, 諸如

3、以pda 為標志的數(shù)碼產(chǎn)品逐漸選用lcd 觸摸屏作為系統(tǒng)的輸入設(shè)備. 觸摸屏分為電阻、電容、表面聲波、紅外線掃描和矢量壓力傳感等, 其中用的最普遍的是四線或五線電阻觸摸屏【4】。然而在日常使用的觸摸產(chǎn)品中, 或多或少發(fā)現(xiàn)有些觸摸屏對觸摸動作響應(yīng)不夠靈敏, 甚者會引起死機, 是什么導(dǎo)致這些現(xiàn)象的產(chǎn)生? 換言之, 有沒有更好觸摸控制方式?圍繞這個疑問, 本設(shè)計在介紹四線電阻式觸摸屏工作原理的基礎(chǔ)上,詳細闡述了嵌入式微處理器( s3c2410) 與觸摸屏模塊之間的硬件接口與驅(qū)動實現(xiàn),并利用s3c2410 的等待中斷模式和自動 x/ y 坐標轉(zhuǎn)換模式, 實現(xiàn)了 x/ y 坐標的確定,完成對觸摸屏的控制

4、【5】。1.2 課程目的本課程設(shè)計基于linux操作系統(tǒng)以及emest iii實驗箱,利用觸摸屏能正確返回觸點坐標值及動作信息,坐標及動作的具體顯示包括:觸摸筆動作,觸點x坐標值,觸點y坐標值。1.3 課程設(shè)計的內(nèi)容本次課程設(shè)計成功地設(shè)計了基于arm的嵌入式觸摸屏。主要內(nèi)容有:(1)linux系統(tǒng)的正確移植和使用;(2)根文件系統(tǒng)的正確移植和使用;(3)驅(qū)動程序的編譯與裝載;(4)嵌入式系統(tǒng)下應(yīng)用程序的交叉編譯及下載與調(diào)試。2 觸摸屏的工作原理觸摸屏系統(tǒng)是一種人機交互設(shè)備, 其結(jié)構(gòu)如圖2.1,將觸摸屏安裝在lcd顯示屏上, 配以相應(yīng)的控制電路對觸摸屏和lcd進行控制,用戶通過觸摸操作就可以實現(xiàn)

5、同觸摸屏系統(tǒng)相連接的設(shè)備進行信息交互。設(shè)計采用四線電阻式觸摸屏, 包含兩層透平、均勻?qū)щ姷膇to層,分別作為x電極和y電極, 它們之間由細微絕緣點隔開。x電極和y電極的正負端由導(dǎo)電條分別從兩端引出,且x電極和y電極導(dǎo)電條的位置相互垂直, 引出端 x-、x+、y-、y+ 共4條線【6】。圖2.1 四線電阻式觸摸屏結(jié)構(gòu)圖當有物體接觸觸摸屏表面并施以一定的壓力時,上層的ito導(dǎo)電層發(fā)生形變與下層 ito發(fā)生接觸,形成可等效為圖2.2的分壓電路。圖2.2 電阻觸屏分壓電路圖控制器通過下述方法即可確定觸摸點位置:(1)在x+電極施加驅(qū)動電壓, x-電極接地, y+作為引出端測量得到接觸點的電壓, 觸點電

6、壓與驅(qū)動電壓之比等于觸點 x 坐標與屏寬度之比,得到x 坐標。(2) 在y+電極施加驅(qū)動電壓, y-電極接地, x+作為引出端測量得到接觸點的電壓, 觸點電壓與驅(qū)動電壓之比等于觸點 y 坐標與屏高度之比,得到y(tǒng) 坐標。因此, 計算觸摸點的坐標首先需要對觸摸屏的引腳電平進行切換控制, 使其處于合適的狀態(tài)。然后通過adc轉(zhuǎn)換采集到的接觸點電壓值, 進行相應(yīng)的計算。觸摸屏接口工作模式有以下幾種:(1)普通轉(zhuǎn)換模式 普通轉(zhuǎn)換模式(auto_pst = 0,xy_pst = 0)是用作一般目的下的adc轉(zhuǎn)換。這個模式可以通過設(shè)置adccon和adctsc來進行對ad轉(zhuǎn)換的初始化;而后讀取adcdat0(

7、adc數(shù)據(jù)寄存器0)的xpdata域(普通adc轉(zhuǎn)換)的值來完成轉(zhuǎn)換。 (2)分離的x/y軸坐標轉(zhuǎn)換模式:x軸坐標轉(zhuǎn)換和y軸坐標轉(zhuǎn)換。 x軸坐標轉(zhuǎn)換(auto_pst=0且xy_pst=1)將x軸坐標轉(zhuǎn)換數(shù)值寫入到adcdat0寄存器的xpdata域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(int_adc)到中斷控制器。 y軸坐標轉(zhuǎn)換(auto_pst=0且xy_pst=2)將x軸坐標轉(zhuǎn)換數(shù)值寫入到adcdat1寄存器的ypdata域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(int_adc)到中斷控制器。 (3)自動(連續(xù))x/y軸坐標轉(zhuǎn)換模式。 自動(連續(xù))x/y軸坐標轉(zhuǎn)換模式(auto_pst=1且xy_

8、pst= 0)以下面的步驟工作: 觸摸屏控制器將自動地切換x軸坐標和y軸坐標并讀取兩個坐標軸方向上的坐標。觸摸屏控制器自動將測量得到的x軸數(shù)據(jù)寫入到adcdat0寄存器的xpdata域,然后將測量到的y軸數(shù)據(jù)到adcdat1的ypdata域。自動(連續(xù))轉(zhuǎn)換之后,觸摸屏控制器產(chǎn)生中斷源(int_adc)到中斷控制器。 (4)等待中斷模式 當觸摸屏控制器處于等待中斷模式下時,它實際上是在等待觸摸筆的點擊。在觸摸筆點擊到觸摸屏上時,控制器產(chǎn)生中斷信號(inc_tc)。中斷產(chǎn)生后,就可以通過設(shè)置適當?shù)霓D(zhuǎn)換模式(分離的x/y軸坐標轉(zhuǎn)換模式或自動x/y軸坐標轉(zhuǎn)換模式)來讀取x和y的位置。 (5)靜態(tài)(s

9、tandby)模式 當adccon寄存器的stdbm位被設(shè)為1時,standby模式被激活。在該模式下,a/d轉(zhuǎn)換操作停止,adcdat0寄存器的xpdata域和adcdat1寄存器的ypdata(正常adc)域保持著先前轉(zhuǎn)換所得的值【7】。 3 總體設(shè)計3.1設(shè)計總體方案3.1.1 軟件(1)embest online flash programmer for arm: embest flash在線編程器,如圖3.1所示。(2)hyper terminal(超級終端):傳送vivi.nand如圖3.2所示。 圖3.1 embest flash在線編程器圖3.2 傳送vivi.nandvivi

10、 load flash kernel x 燒寫更新內(nèi)核,傳送zimage文件; 等待傳送內(nèi)核文件,如圖3.3所示。圖3.3 等待傳送內(nèi)核文件傳送內(nèi)核,如圖3.4所示。 圖3.4傳送內(nèi)核viviload flash root j 燒寫更新文件系統(tǒng);燒寫新的文件系統(tǒng) load flash root j ,如圖3.5所示。 圖3.5燒寫新的文件系統(tǒng) load flash root j(3)embestide pro for arm: 應(yīng)用于嵌入式軟件開發(fā)的新一代集成開發(fā)環(huán)境,是一個高度集成的圖形界面操作環(huán)境,包含編輯器、編譯匯編鏈接器、調(diào)試器、工程管理、flash 編程等工具;支持的開發(fā)語言包括標準

11、c和匯編語言。(4)cygwin:一個在windows平臺上運行的unix模擬環(huán)境,它對于學(xué)習(xí)unix/linux操作環(huán)境,或者從unix到windows的應(yīng)用程序移植,或者進行某些特殊的開發(fā)工作,尤其是使用gnu工具集在windows上進行嵌入式系統(tǒng)開發(fā),把gcc,gdb,gas等開發(fā)工具進行了改進,能夠生成并解釋win32的目標文件【8】。3.1.2 硬件s3c2410處理器是samsung公司基于arm公司的arm920t處理器核,32位微控制器。該處理器擁有:獨立的16kb指令cache和16kb數(shù)據(jù)cache,mmu,支持tft的lcd控制器,nand閃存控制器,3路uart,4路d

12、ma,4路帶pwm的timer ,i/o口,rtc,8路10位adc,touch screen接口,iic-bus 接口,iis-bus 接口,2個usb主機,1個usb設(shè)備,sd主機和mmc接口,2路spi。s3c2410處理器最高可運行在203mhz【9】。3.2 設(shè)計所需工具(1)軟件: embest online flash programmer for arm,hyper terminal(超級終端),embestide pro for arm,cygwin(2) 硬件:s3c2410開發(fā)板,embest實驗箱3.3 平臺構(gòu)建過程3.3.1硬件平臺搭建硬件流程圖如圖3.6所示。圖3.

13、6 硬件流程圖(1) vivi燒寫過程1)首先把sw104斷開,flash programmer的program,在file選擇open打開要燒寫的配置文件s3c2410&nandflash_vivi.cfg,在flash programmer的program頁中選擇要燒寫的文件vivi.bon&load.bin。點擊按鈕 progarm 開始燒寫,直到燒寫成功。2) 連接串口線到 pc 機 com1,運行光盤中提供的 windows 超級終端hyper terminal.ht 把開發(fā)板重新加電,程序運行后,在超級終端上可以看到串口輸出wating,表示正在等待用戶從超級終端下載文件。這時,請

14、點擊超級終端菜單傳送選擇 xmodem 方式下載 vivi.nand 文件,點擊 ok 后等待下載燒寫結(jié)束即可。(2) 內(nèi)核zimage燒寫1) 首先sw104設(shè)為短接(從nand flash啟動),并確定已經(jīng)燒寫vivi.nand,加電。2 ) 在vivi啟動等待中,敲入空格鍵進入vivi界面環(huán)境,并輸入以下命令:vivi load flash kernel x 燒寫更新內(nèi)核約1分鐘即可燒寫完畢。3 ) 點擊超級終端菜單中的“傳送”,選“發(fā)送文件”zimage” 并選擇xmodem方式傳送)燒寫結(jié)束,重起實驗板,觀測超級終端窗口提示信息就可以啟動linux內(nèi)核。(3)新文件系統(tǒng)的燒寫1)首先

15、sw104設(shè)為短接(從nand flash啟動),確定已經(jīng)成功燒寫vivi.nand,加電運行可以看到vivi啟動信息,輸入空格進入命令狀態(tài)。2)雙擊運行download.pjf(該文件在/tmp/edukit-2410/image/中)工程(將啟動embest ide環(huán)境),點擊連接remote connect,程序應(yīng)該正在運行(命令按鈕stop為紅色);在串口輸入help,看看有沒有反應(yīng),如果沒反應(yīng),點擊ide 按鈕:reset -start(f5);再輸入help測試,直到有反應(yīng)為止。3)如果可以輸出一些信息,再點擊ide中的stop,配置debug的download地址為0x30000

16、000,并點擊ide菜單project選擇settings項,在download頁下拉category到download項,在download file選擇root.cramfs文件,點擊確定后,點擊ide菜單debug選擇download下載文件系統(tǒng)映象(約1分鐘),下載完畢后,點擊start(f5)。然后在超級終端里輸入: load flash root j (燒寫更新文件系統(tǒng),約1分鐘即可燒寫完畢)。注意:只能在“vivi的燒寫”操作完成后,才可以按以上方法正確燒寫root映象到nand flash。重起實驗板,觀測超級終端窗口提示信息,引導(dǎo)整個系統(tǒng)啟動到linux行命令輸入狀態(tài)【10】

17、。3.3.2 根文件系統(tǒng)的制作(1)根文件系統(tǒng)根文件系統(tǒng)是linux系統(tǒng)的核心部分,包含系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件,并作為儲存數(shù)據(jù)讀寫結(jié)果的區(qū)域。在linux系統(tǒng)啟動時,首先完成內(nèi)核安裝及環(huán)境初始化,最后會尋找一個文件系統(tǒng)作為根文件系統(tǒng)被加載。linux系統(tǒng)中使用“/”來唯一表示根文件系統(tǒng)的安裝路徑。嵌入式系統(tǒng)中通??梢詰抑母募到y(tǒng)有:romfs、cramfs、ramfs、jffs2、ext2等,甚至還可以使用nfs作為根文件系統(tǒng)。(2)cramfs文件系統(tǒng)cramfs是linux創(chuàng)始人linux torvalds開發(fā)的一個適用于嵌入式系統(tǒng)的小文

18、件系統(tǒng)。cramfs是一個只讀文件系統(tǒng),采用zlib壓縮,壓縮比一般可以達到1:2,但仍可以做到高效的隨機讀取。linux系統(tǒng)中,通常把需要修改的目錄壓縮存放,并在系統(tǒng)引導(dǎo)的時候再將壓縮文件解開。因為cramfs不會影響系統(tǒng)讀取文件的速度,而且是一個高度壓縮的文件系統(tǒng),因此非常廣泛應(yīng)用于嵌入式系統(tǒng)中。(3)cygwin簡介cygwin是一個在windows平臺上運行的unix/linux模擬環(huán)境,是cygnus solutions公司開發(fā)的自由軟件。cygwin中,“/”表示根目錄,即cygwin的安裝目錄。我們常用的set_env_linux.sh中定義的目錄有:sourcedir:/tmp

19、/edukit-2410存儲了vivi、linux、fs等源代碼和例程workdir:/usr/local/src/edukit-2410工作區(qū)。一般情況下都要把已經(jīng)規(guī)劃好的目錄結(jié)構(gòu)轉(zhuǎn)換成一個映象文件,即使用命令工具 mkcramfs(cygwin下為 mkcramfs.exe),把相應(yīng)的 cramfs 目錄樹壓縮為單一的映象文件。其命令格式為:mkcramfs -h -e edition -i file -n name dirname outfile 可以使用我們提供的 mkcramfs.exe 在 cygwin 下編譯生成文件系統(tǒng)映象文件 root.cramfs,再固化到開發(fā)系統(tǒng)flash

20、 上運行。 (4)常用的linux行命令1) cd 改變當前目錄(文件夾)。例如下, cd/ 返回到根目錄 cd. 退回到上級目錄cd/tmp/edukit-2410/進入/tmp/edukit-2410/文件夾2) ls 列出當前目錄中的內(nèi)容。ls 簡單格式列表lsl 使用詳細格式列表。3) pwd 顯示當前所在的目錄。(5)tar工具命令tar 程序用于儲存或展開 tar 存檔文件。命令格式:tar -參數(shù) 文件名路徑-x :extract | -get 從存檔展開文件;-v :-verbose 詳細顯示處理的文件;-j :-有 bz2 屬性的必須包含;-f :-file hostname

21、:f 指定存檔或設(shè)備(缺省為 /dev/rmt0)。(6)解壓原文件系統(tǒng)(命令+解壓目錄的存放)。1)先將 root.cramfs.tar.bz2文件放在c:cygwin目錄中;2)解壓文件系統(tǒng)運行cygwin,執(zhí)行以下命令解壓安裝:$ source /tmp/edukit-2410/set_env_linux.sh linux編譯環(huán)境變量設(shè)置$ cd / $ tar -xvjf root.cramfs.tar.bz2$ ls root root文件夾中就是我們想要的cramfs文件系統(tǒng)3) 如果在根目錄中產(chǎn)生root文件夾,解壓成功;4)在root目錄中新建xx文件夾,用于存放應(yīng)用程序進入該

22、目錄后執(zhí)行以下命令編譯鏈接測試程序:$ cd root$mkdir xx(7)編譯應(yīng)用程序 ts.c (命令+生成文件格式+存放位置)將編寫好的ts.c程序放在c:cygwin目錄中。進入該目錄后執(zhí)行以下命令編譯鏈接測試程序:$ cd /$ arm-linux-gcc -o ts ts.c (也可以編寫makefile來編譯)生成文件: ts 如圖3.7所示。圖3.7 生成文件將ts文件放入root 下的xx文件夾中。(8)新文件系統(tǒng)的制作把剛才編譯輸出的ts文件拷貝到文件系統(tǒng)所在的工作目錄root目錄下,執(zhí)行以下命令生成新的文件系統(tǒng)映象:$ cd / $ mkcramfs root root

23、.new剛剛編譯生成的文件系統(tǒng)映象root.new中已經(jīng)包含測試程序即生成文件【11】。解壓文件系統(tǒng),如圖3.8所示。圖3.8 解壓文件系統(tǒng)解壓成功如下,如圖3.9所示。圖3.9 解壓成功在root目錄中新建xx文件夾,用于存放應(yīng)用程序,如圖3.10所示。圖3.10 在root目錄中新建xx文件夾將編寫好的ts.c程序放在c:cygwin目錄中,如圖3.11所示。圖3.11 將編寫好的ts.c程序放在c:cygwin目錄中生成文件: ts 如下圖所示3.12所示。圖3.12 生成文件新文件系統(tǒng)的制作,如圖3.13所示。圖3.13 新文件系統(tǒng)的制作生成文件,如圖3.14所示。圖3.14 生成文件

24、4 詳細設(shè)計4.1 接口電路設(shè)計微處理器采用基于arm920t內(nèi)核的risc處理器s3c2410,主頻203 mhz, 適用于低成本、低功耗和高性能手持設(shè)備和一般應(yīng)用的單片微處理器解決方案。其適合做觸摸屏系統(tǒng)mcu 的原因是該處理器內(nèi)置了lcd控制器,并且集成了一個帶有觸摸屏接口的8通道10位ad轉(zhuǎn)換器。該adc能以500kb/ s的采樣速率將外部的模擬信號轉(zhuǎn)換為10位分辨率的數(shù)字量。因此, adc能與觸摸屏控制器協(xié)同工作。選用通道7和通道5連接觸摸屏的模擬信號輸入,其中,通道7(圖4.1中a7 )作為觸摸屏接口的x坐標輸入,通道5(圖4.1中a5)作為觸摸屏接口的y 坐標輸入。圖4.1 觸摸

25、屏接口電路原理圖s3c2410提供了nypon、ymon、nxpon和xmon信號直接作為觸摸屏的控制信號,通過其控制外部晶體管的打開與關(guān)閉實現(xiàn)觸摸屏的引腳狀態(tài)的切換,根據(jù)觸摸屏工作原理,觸摸屏引腳的狀態(tài)應(yīng)滿足如下要求,見表4-1。表4-1 觸摸屏引腳控制狀態(tài)x+x-y+y-x坐標外部電壓接地ain5高阻y坐標ain7高阻外部電壓接地在電路的具體實現(xiàn)中, 4個mos管用2個fdc6321實現(xiàn)。并增加阻容式低通濾波電路濾除坐標信號噪聲(見圖4.2)。這里的濾波很重要,如果傳遞給s3c2410模擬輸入接口的信號中干擾過大,不利于后續(xù)的軟件處理。圖4.2 觸摸屏接口電路4.2 系統(tǒng)軟件設(shè)計4.2.1

26、程序流程圖程序流程圖如圖4.3所示。是打開觸摸屏設(shè)備創(chuàng)建等待隊列和緩沖區(qū)初始化隊列頭等待中斷調(diào)用中斷子程序更新x,y顯示一個觸摸點或坐標值否圖4.3 程序流程圖4.2.2分析驅(qū)動觸摸屏驅(qū)動在/kernel/drivers/char/s3c2410-ts.c 文件中。4.2.3 觸摸屏設(shè)備驅(qū)動中數(shù)據(jù)結(jié)構(gòu)(1)觸摸屏的file_operationsstatic struct file_operations s3c2410_fops= owner: this_module, open: s3c2410_ts_open, read: s3c2410_ts_read, release: s3c2410_

27、ts_release,#ifdef use_async fasync: s3c2410_ts_fasync,/異步通知#endif poll: s3c2410_ts_poll,/輪詢;(2)觸摸屏設(shè)備結(jié)構(gòu)體的成員與按鍵設(shè)備結(jié)構(gòu)體的成員類似,也包含一個緩沖區(qū),同時包括自旋鎖、等待隊列和fasync_struct指針。typedef struct unsigned int penstatus; /* pen_up, pen_down, pen_sample */ ts_ret bufmax_ts_buf; /* protect against overrun(環(huán)形緩沖區(qū)) */ unsigned

28、int head, tail;/* head and tail for queued events(環(huán)形緩沖區(qū)的頭尾)*/ wait_queue_head_t wq; /* 等待隊列數(shù)據(jù)結(jié)構(gòu) spinlock_t lock; /* 自旋鎖#ifdef use_async struct fasync_struct *aq;#endif#ifdef config_pm struct pm_dev *pm_dev; /友善之臂專有的,我后面的代碼刪除了這段#endif ts_dev;(3)觸摸屏結(jié)構(gòu)體中包含的ts_ret值的類型定義,包含x、y坐標和狀態(tài)(pen_down、pen_up)等信息,這個

29、信息會在用戶讀取觸摸信息時復(fù)制到用戶空間 。typedef struct unsigned short pressure; /* 壓力,這里可定義為筆按下,筆抬起,筆拖曳 unsigned short x; /* 橫坐標的采樣值 unsigned short y; /* 縱坐標的采樣值 unsigned short pad; /* 填充位 ts_ret;(4)在觸摸屏設(shè)備驅(qū)動中,將實現(xiàn)open()、release()、read()、fasync()和poll()函數(shù),因此,其文件操作結(jié)構(gòu)體定義。觸摸屏驅(qū)動文件操作結(jié)構(gòu)體:static struct file_operations s3c2410

30、_fops=4.2.4 觸摸屏驅(qū)動模塊加載和卸載函數(shù)(1)在觸摸屏設(shè)備驅(qū)動的模塊加載函數(shù)中,要完成申請設(shè)備號、添加cdev、申請中斷、設(shè)置觸摸屏控制引腳(ypon、ymon、xpon、xmon)等多項工作,觸摸屏設(shè)備驅(qū)動的模塊加載函數(shù): static int _init s3c2410_ts_init(void)觸摸屏設(shè)備驅(qū)動模塊卸載函數(shù): static void _exit s3c2410_ts_exit(void)(2)可知觸摸屏驅(qū)動中會產(chǎn)生兩類中斷,一類是觸點中斷(int-tc),一類是x/y位置轉(zhuǎn)換中斷(int-adc)。在前一類中斷發(fā)生后,若之前處于pen_up狀態(tài),則應(yīng)該啟動x/y

31、位置轉(zhuǎn)換。另外,將抬起中斷也放在int-tc處理程序中,它會調(diào)用tsevent()完成等待隊列和信號的釋放。觸摸屏設(shè)備驅(qū)動的觸點/抬起中斷處理程序:static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)當x/y位置轉(zhuǎn)換中斷發(fā)生后,應(yīng)讀取x、y的坐標值,填入緩沖區(qū),觸摸屏設(shè)備驅(qū)動x/y位置轉(zhuǎn)換中斷處理程序:static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)觸摸屏設(shè)備驅(qū)動中獲得x、y坐標:static inline voi

32、d s3c2410_get_xy(void)(3)tsevent最終為tsevent_raw(),這個函數(shù)很關(guān)鍵,當處于pen_down狀態(tài)時調(diào)用該函數(shù),它會完成緩沖區(qū)的填充、等待隊列的喚醒以及異步通知信號的釋放;否則(處于pen_up狀態(tài)),將緩沖區(qū)頭清0,也喚醒等待隊列并釋放信號,觸摸屏設(shè)備驅(qū)動的tsevent_raw()函數(shù):static void tsevent_raw(void)(4)在包含了對拖動軌跡支持的情況下,定時器會被啟用,周期為10ms,在每次定時器處理函數(shù)被引發(fā)時,調(diào)用start_ts_adc()開始x/y位置轉(zhuǎn)換過程,觸摸屏設(shè)備驅(qū)動的定時器處理函數(shù):static voi

33、d ts_timer_handler(unsigned long data)(5)在觸摸屏設(shè)備驅(qū)動的打開函數(shù)中,應(yīng)初始化緩沖區(qū)、penstatus和定期器、等待隊列及tsevent時間處理函數(shù)指針,觸摸屏設(shè)備驅(qū)動的打開函數(shù):static int s3c2410_ts_open(struct inode *inode, struct file *filp)(6)觸摸屏設(shè)備驅(qū)動的釋放函數(shù)非常簡單,刪除為用于拖動軌跡所使用的定時器即可,觸摸屏設(shè)備驅(qū)動的釋放函數(shù): static int s3c2410_ts_release(struct inode *inode, struct file *filp)

34、4.2.5 觸摸屏設(shè)備驅(qū)動的讀函數(shù)觸摸屏設(shè)備驅(qū)動的讀函數(shù)實現(xiàn)緩沖區(qū)中信息向用戶空間的復(fù)制,當緩沖區(qū)有內(nèi)容時,直接復(fù)制;否則,如果用戶阻塞訪問觸摸屏,則進程在等待隊列上睡眠,否則,立即返回-eagain,觸摸屏設(shè)備驅(qū)動的讀函數(shù):static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)4.2.6 觸摸屏設(shè)備驅(qū)動的輪詢與異步通知在觸摸屏設(shè)備驅(qū)動中,通過s3c2410_ts_poll()函數(shù)實現(xiàn)了輪詢接口,這個函數(shù)的實現(xiàn)非常簡單。它將等待隊列添加到poll_table,當緩沖區(qū)

35、有數(shù)據(jù)時,返回資源可讀取標志,否則返回0,觸摸屏設(shè)備驅(qū)動的poll()函數(shù):static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)而為了實現(xiàn)觸摸屏設(shè)備驅(qū)動對應(yīng)用程序的異步通知,設(shè)備驅(qū)動中要實現(xiàn)s3c2410_ts_fasync()函數(shù),觸摸屏設(shè)備驅(qū)動的fasync()函數(shù):static int s3c2410_ts_fasync(int fd, struct file *filp, int mode)5 調(diào)試使用s3c2410_ts.c觸摸屏驅(qū)動編寫應(yīng)用程序,讀取觸摸屏的觸點坐

36、標值及動作信息(觸點x坐標值,y坐標及是否有壓力值press),并在串口中斷打印出來。對觸摸屏設(shè)別的操作有打開設(shè)備,關(guān)閉設(shè)備,讀操作等。編寫應(yīng)用程序讀取觸摸屏的觸點坐標值及動作信息時,只需利用觸摸屏驅(qū)動程序便可實現(xiàn),先打開觸摸屏設(shè)備,然后調(diào)用讀函數(shù)即可。其中,觸摸筆動作取值如下:#define pen_up 0/* 觸摸筆抬筆,即觸摸屏不被壓下 */#define pen_down1/* 觸摸筆下筆,即觸摸屏被壓下 */#define pen_fleeting2/* 觸摸筆拖動 */結(jié)構(gòu)體定義如下:typedef struct unsigned short pressure;/* 觸摸筆動作

37、*/unsigned short x;/* 觸點x座標值 */unsigned short y;/* 觸點y座標值 */unsigned short pad;ts_ret打開應(yīng)用程序,如圖5.1所示。圖5.1 打開應(yīng)用程序?qū)嶒灲Y(jié)果顯示,如圖5.2所示。圖5.2 實驗結(jié)果顯示6 結(jié)束語為期幾天的課程設(shè)計結(jié)束了,再次期間我積極親自實驗,用的目標板是s3c2410核心子板,用jtag仿真器,用cygwin模擬軟件來學(xué)習(xí)觸摸板的設(shè)計。我學(xué)會了很多,學(xué)會了很多。首先我捫主要了解整個設(shè)計過程,以及實驗環(huán)境的建立,這次用的是交叉編譯環(huán)境,通過這次課設(shè)我更清楚搭建嵌入式系統(tǒng)的開發(fā)平臺,我們用的目標板是s3c2410核心子板,用jtag仿真器,用cygwin模擬軟件,課設(shè)的這幾天我學(xué)會了熟練的使用cygwin軟件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論