基于ARM嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)_第1頁(yè)
基于ARM嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)_第2頁(yè)
基于ARM嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)_第3頁(yè)
基于ARM嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)_第4頁(yè)
基于ARM嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、西安文理學(xué)院機(jī)械電子工程系本科畢業(yè)設(shè)計(jì)(論文)題 目 基于arm嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)專業(yè)班級(jí) 08級(jí)自動(dòng)化(2)班 學(xué) 號(hào) 08103080227 學(xué)生姓名 趙凱 指導(dǎo)教師 雷俊紅 設(shè)計(jì)所在單位 自動(dòng)化 2012年5月西安文理學(xué)院本科畢業(yè)設(shè)計(jì)(論文)評(píng)閱教師評(píng)分表學(xué)生姓名趙凱學(xué) 號(hào)08103080227專 業(yè)自動(dòng)化班 級(jí)08級(jí)(2)班畢業(yè)設(shè)計(jì)(論文)題目基于arm嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)設(shè)計(jì)(論文)起止時(shí)間 2012年 1月 10日至 2012年 5月 12日評(píng)閱教師評(píng)語(yǔ):(應(yīng)從選題、寫(xiě)作規(guī)范、問(wèn)題論證或說(shuō)明效果等方面對(duì)論文進(jìn)行評(píng)述)建議成績(jī):評(píng)閱教師簽名: 年 月 日西安文理

2、學(xué)院本科畢業(yè)設(shè)計(jì)(論文)答辯記錄學(xué)生姓名趙凱學(xué) 號(hào)08103080227專業(yè)名稱自動(dòng)化答辯時(shí)間2012年5月 12日答辯地點(diǎn)b0209指導(dǎo)教師雷俊紅題 目基于arm嵌入式系統(tǒng)的觸摸屏驅(qū)動(dòng)程序開(kāi)發(fā)答辯小組成 員姓 名職 稱姓 名職 稱提問(wèn)及回答情況記錄: 記錄人簽字: 年 月 日答辯成績(jī):答辯小組組長(zhǎng)簽名: 年 月 日畢業(yè)論文成績(jī)答辯委員會(huì)認(rèn)定成績(jī)畢業(yè)論文等級(jí)系(院)答辯委員會(huì)意見(jiàn):負(fù)責(zé)人簽名: 年 月 日注:1、畢業(yè)論文成績(jī)=指導(dǎo)教師成績(jī)40%評(píng)閱教師成績(jī)20%答辯成績(jī)40%;2、答辯委員會(huì)認(rèn)定成績(jī)是根據(jù)該生畢業(yè)設(shè)計(jì)期間的表現(xiàn)及該專業(yè)整體論文情況的綜合評(píng)定成績(jī)。3、論文等級(jí)分優(yōu)秀(90分)、良

3、好(8089分)、中等(7079分)、及格(6069分)、不及格(程序-附件-通訊”中,選擇運(yùn)行該程序,一般會(huì)彈出提示窗口,詢問(wèn)你是否將hyperterminal作為默認(rèn)的telnet程序,此時(shí)選擇“否”。 接下來(lái)彈出來(lái)的窗口,選擇“取消”。 此時(shí)系統(tǒng)提示“您確定要取消嗎?”,選擇“是”,接著點(diǎn)擊提示窗口的“確定”,進(jìn)入下一步。 超級(jí)終端會(huì)要求你為新的連接取個(gè)新的名字,我在配置的時(shí)候取的是“tty”。 當(dāng)你命名完以后,又會(huì)跳出一個(gè)對(duì)話框,選擇開(kāi)發(fā)板的串口,我選擇的是串口4. 最后一步,最重要的一步,數(shù)據(jù)流控制必須選擇“無(wú)”,另外板子的串口波特率設(shè)為115200。 當(dāng)所有的參數(shù)都設(shè)置好后,超級(jí)終

4、端就配置好了。3.3 配置網(wǎng)絡(luò)文件系統(tǒng)nfs服務(wù) 在配置nfs服務(wù)之前,先使用查看一下linux系統(tǒng)在安裝的時(shí)候是否已經(jīng)安裝了nfs服務(wù),方法如下:輸入命令setup,然后在出現(xiàn)的藍(lán)色窗口中選擇system services,進(jìn)入后,如果看到選項(xiàng)前的中括號(hào)有“*”,表示已經(jīng)被選中,如果沒(méi)有,就表示沒(méi)選中;現(xiàn)在選中nfs服務(wù),去掉iptables,然后保存退出。 接下來(lái)運(yùn)行命令 #gedit /etc/exports 在打開(kāi)的nfs服務(wù)的配置文件中添加以下內(nèi)容: /home/share 30(rw,sync,no_root_squash) 其中:/home/share表示n

5、fs共享目錄,它可以作為開(kāi)發(fā)板的根文件系統(tǒng)30是開(kāi)發(fā)板的ip地址,注意ip地址前有空格。(這里的ip地址可以用*代替,表示所有的客戶機(jī)都可以掛載次 目錄)rw表示掛載次目錄的客戶機(jī)多該目錄有讀寫(xiě)的權(quán)力sync:數(shù)據(jù)同步寫(xiě)入內(nèi)存和硬盤(pán),也可以使用async,此時(shí)數(shù)據(jù)會(huì)先暫存于內(nèi)存中,而不立即寫(xiě)入硬盤(pán)no_root_squash表示允許掛載次目錄的客戶機(jī)有該主機(jī)的root身份然后保存退出。最后使用/etc/init.d/nfs stop和 /etc/init.d/portmap stop命令停止nfs服務(wù)和端口監(jiān)聽(tīng)服務(wù),再用/etc/init.d/nfs start和 /et

6、c/init.d/portmap start命令重新啟動(dòng)nfs服務(wù)和端口監(jiān)聽(tīng)服務(wù)使之配置生效。第四章 嵌入式設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)4.1編寫(xiě)觸摸屏設(shè)備驅(qū)動(dòng)程序4.1.1 linux輸入子系統(tǒng)介紹在linux中,輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動(dòng)、輸入子系統(tǒng)核心層(input core)和事件輸入層(event handler)組成。其中設(shè)備驅(qū)動(dòng)層提供對(duì)硬件各寄存器的讀寫(xiě)訪問(wèn)和將底層硬件對(duì)用戶輸入訪問(wèn)的響應(yīng)轉(zhuǎn)換為標(biāo)準(zhǔn)的輸入事件,再通過(guò)核心層提交層給事件處理層;而核心層對(duì)下提供了設(shè)備驅(qū)動(dòng)層的編程接口,對(duì)上又提供了事件處理層的編程接口;而事件處理層就為我們用戶空間的應(yīng)用程序提供了統(tǒng)一訪問(wèn)設(shè)備的接口和驅(qū)動(dòng)層提

7、交來(lái)的事件處理。所以這使得我們輸入設(shè)備的驅(qū)動(dòng)部分不在用關(guān)心設(shè)備文件的操作,而是要關(guān)心對(duì)各硬件寄存器的操作和提交的輸入事件。下面用圖形來(lái)描述一下這三者的關(guān)系吧!圖4.1 輸入子系統(tǒng)結(jié)構(gòu)圖4.1.2驅(qū)動(dòng)程序的實(shí)現(xiàn)原理與步驟 (1).驅(qū)動(dòng)程序的實(shí)現(xiàn)原理在linux中,input設(shè)備用input_dev結(jié)構(gòu)體描述,定義在input.h中。設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)步驟:在驅(qū)動(dòng)模塊加載函數(shù)中設(shè)置input設(shè)備支持input子系統(tǒng)的哪些事件;將input設(shè)備注冊(cè)到input子系統(tǒng)中;在input設(shè)備發(fā)生輸入操作時(shí),提交所發(fā)生的事件及對(duì)應(yīng)的鍵值/坐標(biāo)等狀態(tài)。 (2).驅(qū)動(dòng)程序?qū)崿F(xiàn)過(guò)程建立觸摸屏程序ts_driver.c

8、,首先實(shí)現(xiàn)加載和卸載部分,在驅(qū)動(dòng)加載部分:?jiǎn)⒂胊dc所需要的時(shí)鐘、映射io口、申請(qǐng)中斷(觸摸屏中斷和adc中斷)、初始化輸入設(shè)備、將輸入設(shè)備注冊(cè)到輸入子系統(tǒng)中。圖4.2 程序框架圖源程序見(jiàn)附錄a4.2 運(yùn)行程序4.2.1 燒寫(xiě)程序?qū)⒕幾g好的可執(zhí)行文件下載到目標(biāo)板,我通過(guò)在網(wǎng)絡(luò)上收集了資料總結(jié)了以下四種方式:第一種:使用u盤(pán)或者其他可移動(dòng)設(shè)備第二種:通過(guò)nfs直接運(yùn)行第三種:通過(guò)串口下載文件到開(kāi)發(fā)板第四板:通過(guò)網(wǎng)絡(luò)下載文件到開(kāi)發(fā)板(1) 使用u盤(pán)方法:先把編譯好的可執(zhí)行程序復(fù)制到u盤(pán),在u盤(pán)插到目標(biāo)板上并掛載,然后把程序拷貝到目標(biāo)板的可執(zhí)行目錄/bin。(2) 通過(guò)網(wǎng)絡(luò)文件系統(tǒng)nfs執(zhí)行方法:前

9、提是先按照3.3節(jié)搭建好nfs服務(wù)器系統(tǒng),然后在超級(jí)終端中輸入命令#mount t nfs o nolock 2:/home/share /mnt/nfs2為宿主機(jī)的ip地址,/home/share是宿舍機(jī)上的共享目錄;/mnt/nfs是目標(biāo)機(jī)上的共享目錄。這樣就掛載成功了,只要把需要執(zhí)行文件復(fù)制到共享文件中,然后再目標(biāo)機(jī)的超級(jí)終端上執(zhí)行即可。第五章 結(jié)束語(yǔ)本次畢業(yè)設(shè)計(jì)順利完成了觸摸屏驅(qū)動(dòng)開(kāi)發(fā)的設(shè)計(jì),完成了畢業(yè)設(shè)計(jì)的基本要求。在本次畢業(yè)設(shè)計(jì)中,nfs服務(wù)系統(tǒng)的配置是最基本的東西,雖然從理論上來(lái)說(shuō)不是太難,但是實(shí)際操作時(shí)遇到了不少問(wèn)題,不過(guò)通過(guò)在網(wǎng)上找

10、尋的資料和同老師、同學(xué)的交流下,得到了解答;在設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)中,雖然也很難,但是這些東西都是框架式的,網(wǎng)上很多,只需修改一下,滿足自己的硬件平臺(tái)即可。應(yīng)用相當(dāng)來(lái)說(shuō)不是太難,只要注意到一些特有的函數(shù),庫(kù)文件,問(wèn)題不是太大。通過(guò)這次畢業(yè)設(shè)計(jì),對(duì)linux中的一些常用命令又回顧了一遍,并且也加深了印象,對(duì)linux下設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)也有了基本的認(rèn)識(shí),感覺(jué)學(xué)到了很多東西,對(duì)不會(huì)的知識(shí)有一定的了解;對(duì)熟悉、學(xué)過(guò)的知識(shí)又復(fù)習(xí)了一遍,理解更加深刻,也加深了印象。接下來(lái),我對(duì)在這次課程設(shè)計(jì)中遇到的問(wèn)題和解決方法進(jìn)行個(gè)總結(jié):1. 目標(biāo)板和宿主機(jī)不能ping通解決方法:(1) 看交叉網(wǎng)線是否接觸正常 (2) 檢

11、查開(kāi)發(fā)板上的網(wǎng)口驅(qū)動(dòng)是否掛載 (3) 開(kāi)發(fā)板的ip地址必須要和宿主機(jī)的ip地址在一個(gè)ip段內(nèi),例如192.168.1.*和192.168.1.*就在一個(gè)ip段內(nèi) (4) 關(guān)閉linux的防火墻2. 使用nfs共享目錄時(shí),掛載共享目錄不成功解決方法:(1) 檢查目標(biāo)板和宿主機(jī)是否能ping通(這是基礎(chǔ))(2)查看nfs服務(wù)和端口監(jiān)聽(tīng)服務(wù)的狀態(tài)(命令分別是/etc/init.d/nfs status /etc/init.d/portmap status),如果是關(guān)閉請(qǐng)打開(kāi)(命令分別是/etc/init.d/nfs start /etc/init.d/portmap start)3. 由于對(duì)linu

12、x內(nèi)核不熟悉,所以在分析觸摸屏的驅(qū)動(dòng)代碼時(shí),遇到了不少問(wèn)題解決方案:(1) 通過(guò)對(duì)網(wǎng)上的教學(xué)視頻和資料的學(xué)習(xí),初步了解了其構(gòu)架 (2) 分析代碼中所用到的函數(shù)和宏定義 4. makefile的編寫(xiě)問(wèn)題,經(jīng)常出錯(cuò) 這個(gè)問(wèn)題不好解決,因?yàn)閙akefile文件的編寫(xiě)比較難,不是短時(shí)間能解決的。在課程設(shè)計(jì)中,大的問(wèn)題基本上就遇到了這么多,還有很多小問(wèn)題,在谷歌上一搜就有,關(guān)于技術(shù)方面的問(wèn)題,最好是在谷歌上搜,感覺(jué)比百度全。總之,我相信有付出就有回報(bào)!致謝本課題的研究探討以及論文撰寫(xiě)一直都是在雷俊紅老師的細(xì)心指導(dǎo)下進(jìn)行的,可以說(shuō)其中的每個(gè)環(huán)節(jié)都傾注了雷俊紅老師的智慧和心血,在此表示感謝。參考文獻(xiàn)1杜春雷

13、 . arm體系結(jié)構(gòu)與編程 . 北京:清華大學(xué)出版社,2003.2張思民 . 嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 . 北京:清華大學(xué)出版社,2008.3馮國(guó)進(jìn) . 嵌入式linux驅(qū)動(dòng)程序設(shè)計(jì)從入門(mén)到精通 . 北京:清華大學(xué)出版社,2008.4馬忠梅等 . arm & linux嵌入式系統(tǒng)教程 . 北京:北京航空航天大學(xué)出版社,20045魏永明等譯 . linux設(shè)備驅(qū)動(dòng)程序 . 北京:中國(guó)電力出版社,20066張曉林等 . 嵌入式系統(tǒng)設(shè)計(jì)與實(shí)踐 . 北京:北京航空航天大學(xué)出版社,2006附錄a 驅(qū)動(dòng)源程序驅(qū)動(dòng)源程序 /* ts_driver.c*/#include #include #include #i

14、nclude #include #include #include #include #include #include #include #include #include #include #define s3c2410tsversion0x0101#define wait4int(x) (x)= 2; yp = 2; input_report_abs(dev, abs_x, xp); input_report_abs(dev, abs_y, yp); input_report_key(dev, btn_touch, 1); input_report_abs(dev, abs_pressu

15、re, 1); input_sync(dev); xp = 0; yp = 0; count = 0; iowrite32(s3c2410_adctsc_pull_up_disable | autopst, base_addr+s3c2410_adctsc); iowrite32(ioread32(base_addr+s3c2410_adccon) | s3c2410_adccon_enable_start, base_addr+s3c2410_adccon); else count = 0; input_report_key(dev, btn_touch, 0); input_report_

16、abs(dev, abs_pressure, 0); input_sync(dev); iowrite32(wait4int(0), base_addr+s3c2410_adctsc);if (ownadc)ownadc = 0;up(&adc_lock); static struct timer_list touch_timer =timer_initializer(touch_timer_fire, 0, 0);static irqreturn_t stylus_updown(int irq, void *dev_id)unsigned long data0;unsigned long d

17、ata1;int updown;if (down_trylock(&adc_lock) = 0)ownadc = 1;data0 = ioread32(base_addr+s3c2410_adcdat0);data1 = ioread32(base_addr+s3c2410_adcdat1);updown = (!(data0 & s3c2410_adcdat0_updown) & (!(data1 & s3c2410_adcdat0_updown);if (updown)touch_timer_fire(0);elseownadc = 0;up(&adc_lock);return irq_h

18、andled;static irqreturn_t stylus_action(int irq, void *dev_id)unsigned long data0;unsigned long data1;if (ownadc)data0 = ioread32(base_addr+s3c2410_adcdat0);data1 = ioread32(base_addr+s3c2410_adcdat1);xp += data0 & s3c2410_adcdat0_xpdata_mask;yp += data1 & s3c2410_adcdat1_ypdata_mask;count+;if (coun

19、t (1evbit0 = bit(ev_syn) | bit(ev_key) | bit(ev_abs);dev-keybitbits_to_longs(btn_touch) = bit(btn_touch);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_pressure, 0, 1, 0, 0);dev-name = gt2440ts_name;dev-id.bustype = bus

20、_rs232;dev-id.vendor = 0xdead;duct = 0xbeefdev-id.version = s3c2410tsversion;if (request_irq(irq_adc, stylus_action, irqf_shared|irqf_sample_random, gt2440ts_name, dev)printk(kern_err gt2440_ts.c: could not allocate ts irq_adc !n);iounmap(base_addr);return -eio;if (request_irq(irq_tc, styl

21、us_updown, irqf_sample_random, gt2440ts_name, dev)printk(kern_err gt2440_ts.c: could not allocate ts irq_adc !n);iounmap(base_addr);return -eio;printk(kern_info %s successfully loadedn, gt2440ts_name);input_register_device(dev);return 0;static void _exit gt2440ts_exit(void)disable_irq(irq_adc);disab

22、le_irq(irq_tc);free_irq(irq_tc,dev);free_irq(irq_adc,dev);if (adc_clock)clk_disable(adc_clock);clk_put(adc_clock);adc_clock = null;input_unregister_device(dev);iounmap(base_addr);module_init(gt2440ts_init);module_exit(gt2440ts_exit);附錄b 英文資料how to design touch screens driveralthough touch screens ar

23、e rapidly becoming more popular most developers have never created one before. here is a step by step design guide that leads you through the hardware and software required to make touch screens work the first time. touch screens are everywhere. industrial control systems, consumer electronics, and even medical devices are commonly equipped with touch-screen input. we use touch screens every day without even thin

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論