版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 基于arm的嵌入式觸摸屏的設(shè)計(jì) 第26頁(yè) 共26頁(yè)1 引言使用s3c2410芯片設(shè)計(jì)的四線電阻式觸摸屏在博創(chuàng)公司的up netarm2410s 嵌入式開(kāi)發(fā)平臺(tái)上得到了很好的效果,屏幕顯示無(wú)閃爍,畫面切換速度快,觸摸屏響應(yīng)迅速。設(shè)備驅(qū)動(dòng)程序是linux內(nèi)核的重要組成部分,控制了操作系統(tǒng)和硬件設(shè)備之間的交互。linux的設(shè)備管理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開(kāi)、關(guān)閉、讀寫這些設(shè)備文件,對(duì)設(shè)備的操作就像操作普通的數(shù)據(jù)文件一樣簡(jiǎn)便。為開(kāi)發(fā)便利、提高效率,本設(shè)計(jì)采用可安裝模塊方式開(kāi)發(fā)調(diào)試觸摸屏驅(qū)動(dòng)程序【1】。本文介紹了基于三星s3c24
2、10x微處理器,采用spi接口與ads7843控制器芯片完成模塊的設(shè)計(jì)。具體包括在嵌入式linux操作系統(tǒng)中的軟件驅(qū)動(dòng)開(kāi)發(fā),采用內(nèi)核定時(shí)器的下半部機(jī)制進(jìn)行了硬件中斷程序設(shè)計(jì),采用16個(gè)時(shí)鐘周期的坐標(biāo)轉(zhuǎn)換時(shí)序,實(shí)現(xiàn)觸摸點(diǎn)數(shù)據(jù)采集的方法,給出了坐標(biāo)采集的流程。設(shè)計(jì)完成的驅(qū)動(dòng)程序在博創(chuàng)公司教學(xué)實(shí)驗(yàn)設(shè)備up-netarm2410-s平臺(tái)上運(yùn)行效果良好【2】。1.1 課題背景隨著信息家電和通訊設(shè)備的普及,作為與用戶交互的終端媒介,觸摸屏在生活中得到廣泛的應(yīng)用。如何在系統(tǒng)中集成觸摸屏模塊以及在嵌入式操作系統(tǒng)中實(shí)現(xiàn)其驅(qū)動(dòng)程序,都成為嵌入式系統(tǒng)設(shè)計(jì)者需要考慮的問(wèn)題【3】。嵌入式系統(tǒng)觸摸屏的應(yīng)用越來(lái)廣泛, 諸如
3、以pda 為標(biāo)志的數(shù)碼產(chǎn)品逐漸選用lcd 觸摸屏作為系統(tǒng)的輸入設(shè)備. 觸摸屏分為電阻、電容、表面聲波、紅外線掃描和矢量壓力傳感等, 其中用的最普遍的是四線或五線電阻觸摸屏【4】。然而在日常使用的觸摸產(chǎn)品中, 或多或少發(fā)現(xiàn)有些觸摸屏對(duì)觸摸動(dòng)作響應(yīng)不夠靈敏, 甚者會(huì)引起死機(jī), 是什么導(dǎo)致這些現(xiàn)象的產(chǎn)生? 換言之, 有沒(méi)有更好觸摸控制方式?圍繞這個(gè)疑問(wèn), 本設(shè)計(jì)在介紹四線電阻式觸摸屏工作原理的基礎(chǔ)上,詳細(xì)闡述了嵌入式微處理器( s3c2410) 與觸摸屏模塊之間的硬件接口與驅(qū)動(dòng)實(shí)現(xiàn),并利用s3c2410 的等待中斷模式和自動(dòng) x/ y 坐標(biāo)轉(zhuǎn)換模式, 實(shí)現(xiàn)了 x/ y 坐標(biāo)的確定,完成對(duì)觸摸屏的控制
4、【5】。1.2 課程目的本課程設(shè)計(jì)基于linux操作系統(tǒng)以及emest iii實(shí)驗(yàn)箱,利用觸摸屏能正確返回觸點(diǎn)坐標(biāo)值及動(dòng)作信息,坐標(biāo)及動(dòng)作的具體顯示包括:觸摸筆動(dòng)作,觸點(diǎn)x坐標(biāo)值,觸點(diǎn)y坐標(biāo)值。1.3 課程設(shè)計(jì)的內(nèi)容本次課程設(shè)計(jì)成功地設(shè)計(jì)了基于arm的嵌入式觸摸屏。主要內(nèi)容有:(1)linux系統(tǒng)的正確移植和使用;(2)根文件系統(tǒng)的正確移植和使用;(3)驅(qū)動(dòng)程序的編譯與裝載;(4)嵌入式系統(tǒng)下應(yīng)用程序的交叉編譯及下載與調(diào)試。2 觸摸屏的工作原理觸摸屏系統(tǒng)是一種人機(jī)交互設(shè)備, 其結(jié)構(gòu)如圖2.1,將觸摸屏安裝在lcd顯示屏上, 配以相應(yīng)的控制電路對(duì)觸摸屏和lcd進(jìn)行控制,用戶通過(guò)觸摸操作就可以實(shí)現(xiàn)
5、同觸摸屏系統(tǒng)相連接的設(shè)備進(jìn)行信息交互。設(shè)計(jì)采用四線電阻式觸摸屏, 包含兩層透平、均勻?qū)щ姷膇to層,分別作為x電極和y電極, 它們之間由細(xì)微絕緣點(diǎn)隔開(kāi)。x電極和y電極的正負(fù)端由導(dǎo)電條分別從兩端引出,且x電極和y電極導(dǎo)電條的位置相互垂直, 引出端 x-、x+、y-、y+ 共4條線【6】。圖2.1 四線電阻式觸摸屏結(jié)構(gòu)圖當(dāng)有物體接觸觸摸屏表面并施以一定的壓力時(shí),上層的ito導(dǎo)電層發(fā)生形變與下層 ito發(fā)生接觸,形成可等效為圖2.2的分壓電路。圖2.2 電阻觸屏分壓電路圖控制器通過(guò)下述方法即可確定觸摸點(diǎn)位置:(1)在x+電極施加驅(qū)動(dòng)電壓, x-電極接地, y+作為引出端測(cè)量得到接觸點(diǎn)的電壓, 觸點(diǎn)電
6、壓與驅(qū)動(dòng)電壓之比等于觸點(diǎn) x 坐標(biāo)與屏寬度之比,得到x 坐標(biāo)。(2) 在y+電極施加驅(qū)動(dòng)電壓, y-電極接地, x+作為引出端測(cè)量得到接觸點(diǎn)的電壓, 觸點(diǎn)電壓與驅(qū)動(dòng)電壓之比等于觸點(diǎn) y 坐標(biāo)與屏高度之比,得到y(tǒng) 坐標(biāo)。因此, 計(jì)算觸摸點(diǎn)的坐標(biāo)首先需要對(duì)觸摸屏的引腳電平進(jìn)行切換控制, 使其處于合適的狀態(tài)。然后通過(guò)adc轉(zhuǎn)換采集到的接觸點(diǎn)電壓值, 進(jìn)行相應(yīng)的計(jì)算。觸摸屏接口工作模式有以下幾種:(1)普通轉(zhuǎn)換模式 普通轉(zhuǎn)換模式(auto_pst = 0,xy_pst = 0)是用作一般目的下的adc轉(zhuǎn)換。這個(gè)模式可以通過(guò)設(shè)置adccon和adctsc來(lái)進(jìn)行對(duì)ad轉(zhuǎn)換的初始化;而后讀取adcdat0(
7、adc數(shù)據(jù)寄存器0)的xpdata域(普通adc轉(zhuǎn)換)的值來(lái)完成轉(zhuǎn)換。 (2)分離的x/y軸坐標(biāo)轉(zhuǎn)換模式:x軸坐標(biāo)轉(zhuǎn)換和y軸坐標(biāo)轉(zhuǎn)換。 x軸坐標(biāo)轉(zhuǎn)換(auto_pst=0且xy_pst=1)將x軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到adcdat0寄存器的xpdata域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(int_adc)到中斷控制器。 y軸坐標(biāo)轉(zhuǎn)換(auto_pst=0且xy_pst=2)將x軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到adcdat1寄存器的ypdata域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(int_adc)到中斷控制器。 (3)自動(dòng)(連續(xù))x/y軸坐標(biāo)轉(zhuǎn)換模式。 自動(dòng)(連續(xù))x/y軸坐標(biāo)轉(zhuǎn)換模式(auto_pst=1且xy_
8、pst= 0)以下面的步驟工作: 觸摸屏控制器將自動(dòng)地切換x軸坐標(biāo)和y軸坐標(biāo)并讀取兩個(gè)坐標(biāo)軸方向上的坐標(biāo)。觸摸屏控制器自動(dòng)將測(cè)量得到的x軸數(shù)據(jù)寫入到adcdat0寄存器的xpdata域,然后將測(cè)量到的y軸數(shù)據(jù)到adcdat1的ypdata域。自動(dòng)(連續(xù))轉(zhuǎn)換之后,觸摸屏控制器產(chǎn)生中斷源(int_adc)到中斷控制器。 (4)等待中斷模式 當(dāng)觸摸屏控制器處于等待中斷模式下時(shí),它實(shí)際上是在等待觸摸筆的點(diǎn)擊。在觸摸筆點(diǎn)擊到觸摸屏上時(shí),控制器產(chǎn)生中斷信號(hào)(inc_tc)。中斷產(chǎn)生后,就可以通過(guò)設(shè)置適當(dāng)?shù)霓D(zhuǎn)換模式(分離的x/y軸坐標(biāo)轉(zhuǎn)換模式或自動(dòng)x/y軸坐標(biāo)轉(zhuǎn)換模式)來(lái)讀取x和y的位置。 (5)靜態(tài)(s
9、tandby)模式 當(dāng)adccon寄存器的stdbm位被設(shè)為1時(shí),standby模式被激活。在該模式下,a/d轉(zhuǎn)換操作停止,adcdat0寄存器的xpdata域和adcdat1寄存器的ypdata(正常adc)域保持著先前轉(zhuǎn)換所得的值【7】。 3 總體設(shè)計(jì)3.1設(shè)計(jì)總體方案3.1.1 軟件(1)embest online flash programmer for arm: embest flash在線編程器,如圖3.1所示。(2)hyper terminal(超級(jí)終端):傳送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)用于嵌入式軟件開(kāi)發(fā)的新一代集成開(kāi)發(fā)環(huán)境,是一個(gè)高度集成的圖形界面操作環(huán)境,包含編輯器、編譯匯編鏈接器、調(diào)試器、工程管理、flash 編程等工具;支持的開(kāi)發(fā)語(yǔ)言包括標(biāo)準(zhǔn)
11、c和匯編語(yǔ)言。(4)cygwin:一個(gè)在windows平臺(tái)上運(yùn)行的unix模擬環(huán)境,它對(duì)于學(xué)習(xí)unix/linux操作環(huán)境,或者從unix到windows的應(yīng)用程序移植,或者進(jìn)行某些特殊的開(kāi)發(fā)工作,尤其是使用gnu工具集在windows上進(jìn)行嵌入式系統(tǒng)開(kāi)發(fā),把gcc,gdb,gas等開(kāi)發(fā)工具進(jìn)行了改進(jìn),能夠生成并解釋win32的目標(biāo)文件【8】。3.1.2 硬件s3c2410處理器是samsung公司基于arm公司的arm920t處理器核,32位微控制器。該處理器擁有:獨(dú)立的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個(gè)usb主機(jī),1個(gè)usb設(shè)備,sd主機(jī)和mmc接口,2路spi。s3c2410處理器最高可運(yùn)行在203mhz【9】。3.2 設(shè)計(jì)所需工具(1)軟件: embest online flash programmer for arm,hyper terminal(超級(jí)終端),embestide pro for arm,cygwin(2) 硬件:s3c2410開(kāi)發(fā)板,embest實(shí)驗(yàn)箱3.3 平臺(tái)構(gòu)建過(guò)程3.3.1硬件平臺(tái)搭建硬件流程圖如圖3.6所示。圖3.
13、6 硬件流程圖(1) vivi燒寫過(guò)程1)首先把sw104斷開(kāi),flash programmer的program,在file選擇open打開(kāi)要燒寫的配置文件s3c2410&nandflash_vivi.cfg,在flash programmer的program頁(yè)中選擇要燒寫的文件vivi.bon&load.bin。點(diǎn)擊按鈕 progarm 開(kāi)始燒寫,直到燒寫成功。2) 連接串口線到 pc 機(jī) com1,運(yùn)行光盤中提供的 windows 超級(jí)終端hyper terminal.ht 把開(kāi)發(fā)板重新加電,程序運(yùn)行后,在超級(jí)終端上可以看到串口輸出wating,表示正在等待用戶從超級(jí)終端下載文件。這時(shí),請(qǐng)
14、點(diǎn)擊超級(jí)終端菜單傳送選擇 xmodem 方式下載 vivi.nand 文件,點(diǎn)擊 ok 后等待下載燒寫結(jié)束即可。(2) 內(nèi)核zimage燒寫1) 首先sw104設(shè)為短接(從nand flash啟動(dòng)),并確定已經(jīng)燒寫vivi.nand,加電。2 ) 在vivi啟動(dòng)等待中,敲入空格鍵進(jìn)入vivi界面環(huán)境,并輸入以下命令:vivi load flash kernel x 燒寫更新內(nèi)核約1分鐘即可燒寫完畢。3 ) 點(diǎn)擊超級(jí)終端菜單中的“傳送”,選“發(fā)送文件”zimage” 并選擇xmodem方式傳送)燒寫結(jié)束,重起實(shí)驗(yàn)板,觀測(cè)超級(jí)終端窗口提示信息就可以啟動(dòng)linux內(nèi)核。(3)新文件系統(tǒng)的燒寫1)首先
15、sw104設(shè)為短接(從nand flash啟動(dòng)),確定已經(jīng)成功燒寫vivi.nand,加電運(yùn)行可以看到vivi啟動(dòng)信息,輸入空格進(jìn)入命令狀態(tài)。2)雙擊運(yùn)行download.pjf(該文件在/tmp/edukit-2410/image/中)工程(將啟動(dòng)embest ide環(huán)境),點(diǎn)擊連接remote connect,程序應(yīng)該正在運(yùn)行(命令按鈕stop為紅色);在串口輸入help,看看有沒(méi)有反應(yīng),如果沒(méi)反應(yīng),點(diǎn)擊ide 按鈕:reset -start(f5);再輸入help測(cè)試,直到有反應(yīng)為止。3)如果可以輸出一些信息,再點(diǎn)擊ide中的stop,配置debug的download地址為0x30000
16、000,并點(diǎn)擊ide菜單project選擇settings項(xiàng),在download頁(yè)下拉category到download項(xiàng),在download file選擇root.cramfs文件,點(diǎn)擊確定后,點(diǎn)擊ide菜單debug選擇download下載文件系統(tǒng)映象(約1分鐘),下載完畢后,點(diǎn)擊start(f5)。然后在超級(jí)終端里輸入: load flash root j (燒寫更新文件系統(tǒng),約1分鐘即可燒寫完畢)。注意:只能在“vivi的燒寫”操作完成后,才可以按以上方法正確燒寫root映象到nand flash。重起實(shí)驗(yàn)板,觀測(cè)超級(jí)終端窗口提示信息,引導(dǎo)整個(gè)系統(tǒng)啟動(dòng)到linux行命令輸入狀態(tài)【10】
17、。3.3.2 根文件系統(tǒng)的制作(1)根文件系統(tǒng)根文件系統(tǒng)是linux系統(tǒng)的核心部分,包含系統(tǒng)使用的軟件和庫(kù),以及所有用來(lái)為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件,并作為儲(chǔ)存數(shù)據(jù)讀寫結(jié)果的區(qū)域。在linux系統(tǒng)啟動(dòng)時(shí),首先完成內(nèi)核安裝及環(huán)境初始化,最后會(huì)尋找一個(gè)文件系統(tǒng)作為根文件系統(tǒng)被加載。linux系統(tǒng)中使用“/”來(lái)唯一表示根文件系統(tǒng)的安裝路徑。嵌入式系統(tǒng)中通常可以懸著的根文件系統(tǒng)有:romfs、cramfs、ramfs、jffs2、ext2等,甚至還可以使用nfs作為根文件系統(tǒng)。(2)cramfs文件系統(tǒng)cramfs是linux創(chuàng)始人linux torvalds開(kāi)發(fā)的一個(gè)適用于嵌入式系統(tǒng)的小文
18、件系統(tǒng)。cramfs是一個(gè)只讀文件系統(tǒng),采用zlib壓縮,壓縮比一般可以達(dá)到1:2,但仍可以做到高效的隨機(jī)讀取。linux系統(tǒng)中,通常把需要修改的目錄壓縮存放,并在系統(tǒng)引導(dǎo)的時(shí)候再將壓縮文件解開(kāi)。因?yàn)閏ramfs不會(huì)影響系統(tǒng)讀取文件的速度,而且是一個(gè)高度壓縮的文件系統(tǒng),因此非常廣泛應(yīng)用于嵌入式系統(tǒng)中。(3)cygwin簡(jiǎn)介cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的unix/linux模擬環(huán)境,是cygnus solutions公司開(kāi)發(fā)的自由軟件。cygwin中,“/”表示根目錄,即cygwin的安裝目錄。我們常用的set_env_linux.sh中定義的目錄有:sourcedir:/tmp
19、/edukit-2410存儲(chǔ)了vivi、linux、fs等源代碼和例程workdir:/usr/local/src/edukit-2410工作區(qū)。一般情況下都要把已經(jīng)規(guī)劃好的目錄結(jié)構(gòu)轉(zhuǎn)換成一個(gè)映象文件,即使用命令工具 mkcramfs(cygwin下為 mkcramfs.exe),把相應(yīng)的 cramfs 目錄樹(shù)壓縮為單一的映象文件。其命令格式為:mkcramfs -h -e edition -i file -n name dirname outfile 可以使用我們提供的 mkcramfs.exe 在 cygwin 下編譯生成文件系統(tǒng)映象文件 root.cramfs,再固化到開(kāi)發(fā)系統(tǒng)flash
20、 上運(yùn)行。 (4)常用的linux行命令1) cd 改變當(dāng)前目錄(文件夾)。例如下, cd/ 返回到根目錄 cd. 退回到上級(jí)目錄cd/tmp/edukit-2410/進(jìn)入/tmp/edukit-2410/文件夾2) ls 列出當(dāng)前目錄中的內(nèi)容。ls 簡(jiǎn)單格式列表lsl 使用詳細(xì)格式列表。3) pwd 顯示當(dāng)前所在的目錄。(5)tar工具命令tar 程序用于儲(chǔ)存或展開(kāi) tar 存檔文件。命令格式:tar -參數(shù) 文件名路徑-x :extract | -get 從存檔展開(kāi)文件;-v :-verbose 詳細(xì)顯示處理的文件;-j :-有 bz2 屬性的必須包含;-f :-file hostname
21、:f 指定存檔或設(shè)備(缺省為 /dev/rmt0)。(6)解壓原文件系統(tǒng)(命令+解壓目錄的存放)。1)先將 root.cramfs.tar.bz2文件放在c:cygwin目錄中;2)解壓文件系統(tǒng)運(yùn)行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)用程序進(jìn)入該
22、目錄后執(zhí)行以下命令編譯鏈接測(cè)試程序:$ cd root$mkdir xx(7)編譯應(yīng)用程序 ts.c (命令+生成文件格式+存放位置)將編寫好的ts.c程序放在c:cygwin目錄中。進(jìn)入該目錄后執(zhí)行以下命令編譯鏈接測(cè)試程序:$ cd /$ arm-linux-gcc -o ts ts.c (也可以編寫makefile來(lái)編譯)生成文件: 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)包含測(cè)試程序即生成文件【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 詳細(xì)設(shè)計(jì)4.1 接口電路設(shè)計(jì)微處理器采用基于arm920t內(nèi)核的risc處理器s3c2410,主頻203 mhz, 適用于低成本、低功耗和高性能手持設(shè)備和一般應(yīng)用的單片微處理器解決方案。其適合做觸摸屏系統(tǒng)mcu 的原因是該處理器內(nèi)置了lcd控制器,并且集成了一個(gè)帶有觸摸屏接口的8通道10位ad轉(zhuǎn)換器。該adc能以500kb/ s的采樣速率將外部的模擬信號(hào)轉(zhuǎn)換為10位分辨率的數(shù)字量。因此, adc能與觸摸屏控制器協(xié)同工作。選用通道7和通道5連接觸摸屏的模擬信號(hào)輸入,其中,通道7(圖4.1中a7 )作為觸摸屏接口的x坐標(biāo)輸入,通道5(圖4.1中a5)作為觸摸屏接口的y 坐標(biāo)輸入。圖4.1 觸摸
25、屏接口電路原理圖s3c2410提供了nypon、ymon、nxpon和xmon信號(hào)直接作為觸摸屏的控制信號(hào),通過(guò)其控制外部晶體管的打開(kāi)與關(guān)閉實(shí)現(xiàn)觸摸屏的引腳狀態(tài)的切換,根據(jù)觸摸屏工作原理,觸摸屏引腳的狀態(tài)應(yīng)滿足如下要求,見(jiàn)表4-1。表4-1 觸摸屏引腳控制狀態(tài)x+x-y+y-x坐標(biāo)外部電壓接地ain5高阻y坐標(biāo)ain7高阻外部電壓接地在電路的具體實(shí)現(xiàn)中, 4個(gè)mos管用2個(gè)fdc6321實(shí)現(xiàn)。并增加阻容式低通濾波電路濾除坐標(biāo)信號(hào)噪聲(見(jiàn)圖4.2)。這里的濾波很重要,如果傳遞給s3c2410模擬輸入接口的信號(hào)中干擾過(guò)大,不利于后續(xù)的軟件處理。圖4.2 觸摸屏接口電路4.2 系統(tǒng)軟件設(shè)計(jì)4.2.1
26、程序流程圖程序流程圖如圖4.3所示。是打開(kāi)觸摸屏設(shè)備創(chuàng)建等待隊(duì)列和緩沖區(qū)初始化隊(duì)列頭等待中斷調(diào)用中斷子程序更新x,y顯示一個(gè)觸摸點(diǎn)或坐標(biāo)值否圖4.3 程序流程圖4.2.2分析驅(qū)動(dòng)觸摸屏驅(qū)動(dòng)在/kernel/drivers/char/s3c2410-ts.c 文件中。4.2.3 觸摸屏設(shè)備驅(qū)動(dòng)中數(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)體的成員類似,也包含一個(gè)緩沖區(qū),同時(shí)包括自旋鎖、等待隊(duì)列和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; /* 等待隊(duì)列數(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坐標(biāo)和狀態(tài)(pen_down、pen_up)等信息,這個(gè)
29、信息會(huì)在用戶讀取觸摸信息時(shí)復(fù)制到用戶空間 。typedef struct unsigned short pressure; /* 壓力,這里可定義為筆按下,筆抬起,筆拖曳 unsigned short x; /* 橫坐標(biāo)的采樣值 unsigned short y; /* 縱坐標(biāo)的采樣值 unsigned short pad; /* 填充位 ts_ret;(4)在觸摸屏設(shè)備驅(qū)動(dòng)中,將實(shí)現(xiàn)open()、release()、read()、fasync()和poll()函數(shù),因此,其文件操作結(jié)構(gòu)體定義。觸摸屏驅(qū)動(dòng)文件操作結(jié)構(gòu)體:static struct file_operations s3c2410
30、_fops=4.2.4 觸摸屏驅(qū)動(dòng)模塊加載和卸載函數(shù)(1)在觸摸屏設(shè)備驅(qū)動(dòng)的模塊加載函數(shù)中,要完成申請(qǐng)?jiān)O(shè)備號(hào)、添加cdev、申請(qǐng)中斷、設(shè)置觸摸屏控制引腳(ypon、ymon、xpon、xmon)等多項(xiàng)工作,觸摸屏設(shè)備驅(qū)動(dòng)的模塊加載函數(shù): static int _init s3c2410_ts_init(void)觸摸屏設(shè)備驅(qū)動(dòng)模塊卸載函數(shù): static void _exit s3c2410_ts_exit(void)(2)可知觸摸屏驅(qū)動(dòng)中會(huì)產(chǎn)生兩類中斷,一類是觸點(diǎn)中斷(int-tc),一類是x/y位置轉(zhuǎn)換中斷(int-adc)。在前一類中斷發(fā)生后,若之前處于pen_up狀態(tài),則應(yīng)該啟動(dòng)x/y
31、位置轉(zhuǎn)換。另外,將抬起中斷也放在int-tc處理程序中,它會(huì)調(diào)用tsevent()完成等待隊(duì)列和信號(hào)的釋放。觸摸屏設(shè)備驅(qū)動(dòng)的觸點(diǎn)/抬起中斷處理程序:static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)當(dāng)x/y位置轉(zhuǎn)換中斷發(fā)生后,應(yīng)讀取x、y的坐標(biāo)值,填入緩沖區(qū),觸摸屏設(shè)備驅(qū)動(dòng)x/y位置轉(zhuǎn)換中斷處理程序:static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)觸摸屏設(shè)備驅(qū)動(dòng)中獲得x、y坐標(biāo):static inline voi
32、d s3c2410_get_xy(void)(3)tsevent最終為tsevent_raw(),這個(gè)函數(shù)很關(guān)鍵,當(dāng)處于pen_down狀態(tài)時(shí)調(diào)用該函數(shù),它會(huì)完成緩沖區(qū)的填充、等待隊(duì)列的喚醒以及異步通知信號(hào)的釋放;否則(處于pen_up狀態(tài)),將緩沖區(qū)頭清0,也喚醒等待隊(duì)列并釋放信號(hào),觸摸屏設(shè)備驅(qū)動(dòng)的tsevent_raw()函數(shù):static void tsevent_raw(void)(4)在包含了對(duì)拖動(dòng)軌跡支持的情況下,定時(shí)器會(huì)被啟用,周期為10ms,在每次定時(shí)器處理函數(shù)被引發(fā)時(shí),調(diào)用start_ts_adc()開(kāi)始x/y位置轉(zhuǎn)換過(guò)程,觸摸屏設(shè)備驅(qū)動(dòng)的定時(shí)器處理函數(shù):static voi
33、d ts_timer_handler(unsigned long data)(5)在觸摸屏設(shè)備驅(qū)動(dòng)的打開(kāi)函數(shù)中,應(yīng)初始化緩沖區(qū)、penstatus和定期器、等待隊(duì)列及tsevent時(shí)間處理函數(shù)指針,觸摸屏設(shè)備驅(qū)動(dòng)的打開(kāi)函數(shù):static int s3c2410_ts_open(struct inode *inode, struct file *filp)(6)觸摸屏設(shè)備驅(qū)動(dòng)的釋放函數(shù)非常簡(jiǎn)單,刪除為用于拖動(dòng)軌跡所使用的定時(shí)器即可,觸摸屏設(shè)備驅(qū)動(dòng)的釋放函數(shù): static int s3c2410_ts_release(struct inode *inode, struct file *filp)
34、4.2.5 觸摸屏設(shè)備驅(qū)動(dòng)的讀函數(shù)觸摸屏設(shè)備驅(qū)動(dòng)的讀函數(shù)實(shí)現(xiàn)緩沖區(qū)中信息向用戶空間的復(fù)制,當(dāng)緩沖區(qū)有內(nèi)容時(shí),直接復(fù)制;否則,如果用戶阻塞訪問(wèn)觸摸屏,則進(jìn)程在等待隊(duì)列上睡眠,否則,立即返回-eagain,觸摸屏設(shè)備驅(qū)動(dòng)的讀函數(shù):static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)4.2.6 觸摸屏設(shè)備驅(qū)動(dòng)的輪詢與異步通知在觸摸屏設(shè)備驅(qū)動(dòng)中,通過(guò)s3c2410_ts_poll()函數(shù)實(shí)現(xiàn)了輪詢接口,這個(gè)函數(shù)的實(shí)現(xiàn)非常簡(jiǎn)單。它將等待隊(duì)列添加到poll_table,當(dāng)緩沖區(qū)
35、有數(shù)據(jù)時(shí),返回資源可讀取標(biāo)志,否則返回0,觸摸屏設(shè)備驅(qū)動(dòng)的poll()函數(shù):static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)而為了實(shí)現(xiàn)觸摸屏設(shè)備驅(qū)動(dòng)對(duì)應(yīng)用程序的異步通知,設(shè)備驅(qū)動(dòng)中要實(shí)現(xiàn)s3c2410_ts_fasync()函數(shù),觸摸屏設(shè)備驅(qū)動(dòng)的fasync()函數(shù):static int s3c2410_ts_fasync(int fd, struct file *filp, int mode)5 調(diào)試使用s3c2410_ts.c觸摸屏驅(qū)動(dòng)編寫應(yīng)用程序,讀取觸摸屏的觸點(diǎn)坐
36、標(biāo)值及動(dòng)作信息(觸點(diǎn)x坐標(biāo)值,y坐標(biāo)及是否有壓力值press),并在串口中斷打印出來(lái)。對(duì)觸摸屏設(shè)別的操作有打開(kāi)設(shè)備,關(guān)閉設(shè)備,讀操作等。編寫應(yīng)用程序讀取觸摸屏的觸點(diǎn)坐標(biāo)值及動(dòng)作信息時(shí),只需利用觸摸屏驅(qū)動(dòng)程序便可實(shí)現(xiàn),先打開(kāi)觸摸屏設(shè)備,然后調(diào)用讀函數(shù)即可。其中,觸摸筆動(dòng)作取值如下:#define pen_up 0/* 觸摸筆抬筆,即觸摸屏不被壓下 */#define pen_down1/* 觸摸筆下筆,即觸摸屏被壓下 */#define pen_fleeting2/* 觸摸筆拖動(dòng) */結(jié)構(gòu)體定義如下:typedef struct unsigned short pressure;/* 觸摸筆動(dòng)作
37、*/unsigned short x;/* 觸點(diǎn)x座標(biāo)值 */unsigned short y;/* 觸點(diǎn)y座標(biāo)值 */unsigned short pad;ts_ret打開(kāi)應(yīng)用程序,如圖5.1所示。圖5.1 打開(kāi)應(yīng)用程序?qū)嶒?yàn)結(jié)果顯示,如圖5.2所示。圖5.2 實(shí)驗(yàn)結(jié)果顯示6 結(jié)束語(yǔ)為期幾天的課程設(shè)計(jì)結(jié)束了,再次期間我積極親自實(shí)驗(yàn),用的目標(biāo)板是s3c2410核心子板,用jtag仿真器,用cygwin模擬軟件來(lái)學(xué)習(xí)觸摸板的設(shè)計(jì)。我學(xué)會(huì)了很多,學(xué)會(huì)了很多。首先我捫主要了解整個(gè)設(shè)計(jì)過(guò)程,以及實(shí)驗(yàn)環(huán)境的建立,這次用的是交叉編譯環(huán)境,通過(guò)這次課設(shè)我更清楚搭建嵌入式系統(tǒng)的開(kāi)發(fā)平臺(tái),我們用的目標(biāo)板是s3c2410核心子板,用jtag仿真器,用cygwin模擬軟件,課設(shè)的這幾天我學(xué)會(huì)了熟練的使用cygwin軟件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南醫(yī)學(xué)院《安裝工程施工技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南師范大學(xué)科技學(xué)院《邏輯推理證明》2023-2024學(xué)年第一學(xué)期期末試卷
- 電氣培訓(xùn)課件題目
- 贛東學(xué)院《控制系統(tǒng)建模與仿真B》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘孜職業(yè)學(xué)院《公司戰(zhàn)略與風(fēng)險(xiǎn)管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅政法大學(xué)《水污染控制工程(一)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 鐵塔安全培訓(xùn)課件
- 七年級(jí)道德與法治上冊(cè)第三單元師長(zhǎng)情誼第六課師生之間第二框師生交往教案新人教版
- 三年級(jí)數(shù)學(xué)上冊(cè)教材梳理數(shù)與代數(shù)新人教版
- 三年級(jí)科學(xué)上冊(cè)第三單元人與動(dòng)物5動(dòng)物世界教案首師大版1
- 教材編寫工作總結(jié)
- 企業(yè)員工上下班交通安全培訓(xùn)(簡(jiǎn)詳共2份)
- 城市高密度建成區(qū)合流制溢流污染系統(tǒng)研究-黃孝河機(jī)場(chǎng)河水環(huán)境綜合治理項(xiàng)目實(shí)踐
- word 公章 模板
- T∕ZSQX 008-2020 建設(shè)工程全過(guò)程質(zhì)量行為導(dǎo)則
- ISO-IEC17025-2017實(shí)驗(yàn)室管理體系全套程序文件
- 深圳智能水表項(xiàng)目商業(yè)計(jì)劃書_參考模板
- 輥壓成型在汽車輕量化中應(yīng)用的關(guān)鍵技術(shù)及發(fā)展-北方工業(yè)大學(xué)
- 地理信息系統(tǒng)原理全冊(cè)配套完整課件
- 滿堂支架計(jì)算書(調(diào)整)
- 輸出軸的機(jī)械加工工藝規(guī)程及夾具設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論