• <del id="qqie6"><sup id="qqie6"></sup></del>
  • <tfoot id="qqie6"></tfoot>
  • <ul id="qqie6"></ul>
  • 產(chǎn)品推薦:水表|流量計|壓力變送器|熱電偶|液位計|冷熱沖擊試驗箱|水質(zhì)分析|光譜儀|試驗機|試驗箱


    儀表網(wǎng)>技術(shù)中心>使用指南>正文

    歡迎聯(lián)系我

    有什么可以幫您? 在線咨詢

    嵌入式Linux系統(tǒng)中觸摸屏驅(qū)動的研究

       2012年05月22日 16:48  
      引言
      
      隨著計算機相關(guān)技術(shù)的發(fā)展,嵌入式系統(tǒng)的應(yīng)用越來越廣泛,與人們生活緊密結(jié)合。觸摸屏設(shè)備因其友善的人機交互性,操作方便靈活,輸入速度快,被廣泛的應(yīng)用于嵌入式領(lǐng)域中。嵌入式Linux系統(tǒng)具有開發(fā)源代碼、內(nèi)核穩(wěn)定、可裁減性等特點,吸引著眾多商業(yè)公司和自由軟件的目光,成為嵌入式系統(tǒng)領(lǐng)域*的操作系統(tǒng)之一。觸摸屏是一種輸入設(shè)備,操作簡單易學(xué),不占額外的空間,可靠性高,是zui常用的便攜式系統(tǒng)的輸入設(shè)備。特別是電阻式觸摸屏結(jié)構(gòu)簡單,成本低,透光效果好,工作環(huán)境和外界*隔離,不怕灰塵和水氣,同時具有高解析度,高速傳輸反應(yīng),一次校正,穩(wěn)定性高,不漂移等特點,因而廣泛用于工業(yè)控制領(lǐng)域及在室內(nèi)使用。
      
      1、硬件平臺
      
      S3C2410是Samsung公司基于ARM920T核心的一款MCU,集成了眾多的外圍設(shè)備,其中包括4線電阻式觸摸屏控制器、8路模擬輸入通道。在8路A/D轉(zhuǎn)換通道中,A[5]和A[7]作為觸摸屏的X、Y坐標(biāo)的采集通道。S3C2410與4線電阻式觸摸屏連接的電路原理圖見圖1。
      
      在采樣過程中,只需要通過讀寫一系列的特殊寄存器,S3C2410的觸摸屏控制器就會自動控制觸摸屏接口打開或關(guān)閉各MOS管,按順序完成觸摸屏X、Y坐標(biāo)數(shù)據(jù)的采集。
      
      圖1S3C2410連接4線電阻式觸摸屏電路原理圖
      
      2、Linux設(shè)備驅(qū)動程序簡介
      
      設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機器硬件之間的接口,由一組函數(shù)和一些私有數(shù)據(jù)組成,是應(yīng)用程序和硬件設(shè)備之間的橋梁。在應(yīng)用程序看來,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進行操作。設(shè)備驅(qū)動程序是內(nèi)核的一部分,主要完成以下功能:對設(shè)備的初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件設(shè)備和從硬件設(shè)備讀取數(shù)據(jù);讀取應(yīng)用程序數(shù)據(jù)傳送給設(shè)備文件和回送應(yīng)用程序請求的數(shù)據(jù);檢測和處理硬件設(shè)備出現(xiàn)的錯誤。
      
      Linux操作系統(tǒng)的設(shè)備有字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備等。字符設(shè)備是以單個字節(jié)為單位進行順序讀寫操作,通常不使用緩存技術(shù),例如鼠標(biāo)、鍵盤等。塊設(shè)備的讀寫都使用緩存技術(shù)來支持,并且必須能夠進行隨機存取,主要是針對磁盤等慢速設(shè)備設(shè)計的。網(wǎng)絡(luò)設(shè)備主要基于BSD的Socket機制,為發(fā)送數(shù)據(jù)和接收數(shù)據(jù)提供緩存技術(shù),提供對多協(xié)議的支持,例如以太網(wǎng)卡等。
      
      3、Linux觸摸屏驅(qū)動程序?qū)崿F(xiàn)
      
      在Linux系統(tǒng)中,設(shè)備驅(qū)動程序是一組相關(guān)函數(shù)的集合。它包括設(shè)備服務(wù)子程序和中斷處理程序。設(shè)備服務(wù)子程序包含了所有與設(shè)備相關(guān)的代碼,每個設(shè)備服務(wù)子程序只處理一種設(shè)備或者緊密相關(guān)的設(shè)備,從設(shè)備無關(guān)的軟件中接受抽象的命令并執(zhí)行。當(dāng)執(zhí)行一條請求時,具體操作是根據(jù)控制器對驅(qū)動程序提供的接口,并利用中斷機制去調(diào)用中斷服務(wù)子程序配合設(shè)備完成這個請求。設(shè)備驅(qū)動程序利用結(jié)構(gòu)file_operations與文件系統(tǒng)起來,設(shè)備的各種操作的入口函數(shù)放在結(jié)構(gòu)file_operations中,其中包括open()、release()、read()和write()等接口,簡化了驅(qū)動程序的編寫工作。這樣,應(yīng)用程序根本不必考慮操作的是設(shè)備還是普通文件,可一律看作文件處理,具有非常清晰統(tǒng)一的I/O接口。觸摸屏的file_operations結(jié)構(gòu)定義如下:
      
      staticstructfile_operationss3c2410_ts_fops={
      
      owner:THIS_MODULE,
      
      read:s3c2410_ts_read,
      
      poll:s3c2410_ts_poll,
      
      ioctl:s3c2410_ts_ioctl,
      
      open:s3c2410_ts_open,
      
      release:s3c2410_ts_release,
      
      fasync:s3c2410_ts_fasync,};
      
      在觸摸屏設(shè)備驅(qū)動程序的開發(fā)中,全局變量structs3c2410_ts_deviceglobal_ts是很重要的,用來保存觸摸屏的相關(guān)參數(shù)、等待處理的消息隊列、當(dāng)前采樣數(shù)據(jù)、上一次采樣數(shù)據(jù)等信息,數(shù)據(jù)結(jié)構(gòu)structs3c2410_ts_device的定義如下:
      
      structs3c2410_ts_device{//管理觸摸屏類
      
      structs3c2410_ts_generald;//觸摸屏設(shè)置參數(shù)
      
      structs3c2410_ts_calibrationcal;//校正觸摸屏參數(shù)
      
      structs3c2410_ts_eventbuf[MOUSEBUF_SIZE];//等待處理緩沖隊列
      
      structs3c2410_ts_eventcur_data,samples[3],last_data;};
      
      //當(dāng)前采樣數(shù)據(jù),采樣原始數(shù)據(jù),上次采樣數(shù)據(jù)
      
      在了解上面概念之后,編寫觸摸屏驅(qū)動的實際工作并不復(fù)雜,需要做如下工作:
      
      3.1模塊初始化函數(shù)
      
      是調(diào)用s3c2410_touchscreen_moudle_init()來實現(xiàn)的,主要完成觸摸屏設(shè)備的內(nèi)核模塊加載、初始化、中斷注冊、設(shè)備注冊等工作,主要涉及到的過程如下:
      
      ADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
      
      //觸摸屏ADCTSC的設(shè)置
      
      ADCDLY=ADC_DELAY_TIME;//觸摸屏開始和間隔延時
      
      ADCCON=(1<<14)|(PreScale_n<<6)|(7<<3)|(0<<2)|(0<<1)|(0);
      
      //觸摸屏控制器設(shè)置
      
      request_irq(IRQ_ADC_DONE,ts_down_interrupt,SA_INTERRUPT,g_ts_id,ts_down_interrupt);//申請IRQ_ADC_DONE中斷
      
      request_irq(IRQ_TC,ts_up_interrupt,SA_INTERRUPT,g_ts_id,ts_up_interrupt);
      
      //申請IRQ_TC中斷
      
      devfs_register_chrdev(0,S3C2410_TS_MODULE_NAME,&s3c2410_ts_fops);
      
      //注冊file_operations結(jié)構(gòu)
      
      request_irq(IRQ_TIMER1,touch_timer_irq,SA_INTERRUPT,g_ts_timer_id,NULL);//申請IRQ_TIMER1中斷
      
      touch_timer_irq(intirq,void*dev_id,structpt_regs*regs)
      
      //根據(jù)狀態(tài)調(diào)用觸摸中斷,控制數(shù)據(jù)采樣
      
      初始化模塊利用內(nèi)核提供的request_irq函數(shù),將觸摸筆的按下與彈起的中斷號進行登記,從而將中斷號與中斷服務(wù)函數(shù)起來;利用devfs_register_chrdev函數(shù),向系統(tǒng)注冊一個字符型設(shè)備;zui后注冊定時器中斷,用來控制觸摸屏的數(shù)據(jù)采樣。
      
      3.2設(shè)置觸摸筆的狀態(tài)及對應(yīng)的處理
      
      觸摸屏的中斷服務(wù)函數(shù)ts_down_interrupt和ts_up_interrupt是根據(jù)ADCDAT1和ADCDAT0的設(shè)置來選擇觸摸筆的狀態(tài),之后調(diào)用觸摸屏坐標(biāo)的數(shù)據(jù)采樣處理函數(shù)s3c2410_ts_handler()進行處理。部分代碼如下:
      
      staticvoidts_down_interrupt(intirq,void*dev_id,structpt_regs*regs)
      
      {
      
      if((ADCDAT1&0x8000)||(ADCDAT0&0x8000)){
      
      pen_data.state=PEN_UP;
      
      }
      
      else{
      
      pen_data.state=PEN_DOWN;
      
      }
      
      s3c2410_ts_handler();}
      
      3.3獲得采樣值
      
      觸摸筆具有三種工作狀態(tài):PEN_UP,PEN_DOWN,PEN_SAMPLE。在采樣處理函數(shù)中,依據(jù)觸摸筆的狀態(tài),調(diào)用ts_timer_operation()來啟動或停止采樣定時器,然后調(diào)用s3c2410_ts_handler()根據(jù)不同的狀態(tài)進行不同的設(shè)置和處理,之后得到不同的采樣值。
      
      3.4對得到的觸摸屏的數(shù)據(jù)進行處理
      
      是調(diào)用data_processing()函數(shù)來實現(xiàn)的。根據(jù)采用下面介紹的中值濾波法來對采樣數(shù)據(jù)進行處理。針對坐標(biāo)點采樣過程中產(chǎn)生的噪聲,一般是采用平均法來去除噪聲,但是這種方法對于采樣數(shù)較少,并且個別噪聲采樣點比較大的時候,取平均值會使zui后的結(jié)果誤差較大,達不到數(shù)據(jù)處理的要求。故本文采用中值濾波法濾除干擾噪聲,進一步地提高采樣精度。
      
      中值濾波法的原理如下:首先取奇數(shù)個觸摸采樣數(shù)據(jù);之后根據(jù)采樣數(shù)據(jù)的大小按照從小到大的順序進行排列;zui后取中間位置的值。此種方法一般在采樣點不多,個別采樣數(shù)據(jù)誤差又較大的情況下,可以有效地減少誤差。具體的過程見圖2。

      
      3.5觸摸屏的校準(zhǔn)
      
      在實際的應(yīng)用中,通常觸摸屏是作為與顯示屏配合使用的輸入設(shè)備,需要從觸摸屏采樣得到的坐標(biāo)與屏幕的顯示坐標(biāo)做一個映射。觸摸屏和顯示屏都是標(biāo)準(zhǔn)的矩形,見3所示。觸摸屏的X方向坐標(biāo)只與顯示屏的X方向有關(guān),Y方向只與顯示屏的Y方向相關(guān)。
      
      假設(shè)顯示屏的分辨率是W×H,顯示區(qū)域的左上角對應(yīng)的觸摸屏采樣坐標(biāo)是(x1,y1),右下角對應(yīng)的坐標(biāo)是(x2,y2),那么觸摸屏上的任意一點采用坐標(biāo)(x,y)與顯示屏坐標(biāo)(xd,yd)的對應(yīng)關(guān)系可按照如下公式計算:
      
      根據(jù)上述的公式計算出實際觸摸屏對應(yīng)的顯示坐標(biāo),之后就是一個觸摸屏的校準(zhǔn)過程,本文采用三點校準(zhǔn)的方法,與兩點校準(zhǔn)相比,三點校準(zhǔn)的模型考慮到變相和旋轉(zhuǎn),更接近實際情況。首先選取3個相距較遠(yuǎn)的3個作為校準(zhǔn)輸入的采樣點,它們相應(yīng)的觸摸屏采樣坐標(biāo)是P0(x0,y0)、P1(x1,y1)、P2(x2,y2),顯示坐標(biāo)是PD0(xD0,yD0)、PD1(xD1,yD1)、PD2(xD2,yD2)。直角坐標(biāo)平面的兩個點P和PD,定義P為觸摸屏空間的坐標(biāo)點,PD為顯示屏空間的坐標(biāo)點,P可以經(jīng)過旋轉(zhuǎn)、比例和平移得到PD坐標(biāo)。化簡得:
      
      通過上式可以說明PD和P點之間存在一次線性關(guān)系滿足:xD=Ax+By+CyD=Dx+Ey+F
      
      對于同一個設(shè)備,其中的A、B、C、D、E、F為常數(shù),稱為校準(zhǔn)常數(shù),故只需在觸摸屏校準(zhǔn)時,解出這6個常數(shù),就可以實現(xiàn)觸摸屏空間到顯示空間的轉(zhuǎn)換。
      
      3.6中斷的釋放和注冊模塊的卸載
      
      是調(diào)用s3c2410_ts_cleanup_module()來實現(xiàn)的,分別釋放在初始化過程中,申請的IRQ_TIMER1、IRQ_ADC_DONE、IRQ_TC的中斷和字符設(shè)備的接口函數(shù)devfs_register_chrdev(),具體如下:
      
      free_irq(IRQ_TIMER1,g_ts_id);
      
      free_irq(IRQ_ADC_DONE,g_ts_id);
      
      free_irq(IRQ_TC,g_ts_timer_id);
      
      devfs_unregister_chrdev(gMajor,H3600_TS_MODULE_NAME);//卸載字符設(shè)備
      
      4、結(jié)束語
      
      本文作者創(chuàng)新點:結(jié)合實際的硬件平臺,詳細(xì)地介紹基于嵌入式Linux操作系統(tǒng)下觸摸屏驅(qū)動程序的開發(fā)過程,改進了處理采樣數(shù)據(jù)的方法,zui后改進了常用的校準(zhǔn)方法。使該觸摸屏驅(qū)動更能滿足實際的要求,該觸摸屏驅(qū)動程序已用于實際的嵌入式產(chǎn)品中,運行穩(wěn)定可靠,具有很好的發(fā)展前景和社會經(jīng)濟效益。

    免責(zé)聲明

    • 凡本網(wǎng)注明“來源:儀表網(wǎng)”的所有作品,均為浙江興旺寶明通網(wǎng)絡(luò)有限公司-儀表網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來源:儀表網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
    • 本網(wǎng)轉(zhuǎn)載并注明自其它來源(非儀表網(wǎng))的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或和對其真實性負(fù)責(zé),不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品第一來源,并自負(fù)版權(quán)等法律責(zé)任。
    • 如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
    聯(lián)系我們

    客服熱線: 15267989561

    加盟熱線: 15267989561

    媒體合作: 0571-87759945

    投訴熱線: 0571-87759942

    關(guān)注我們
    • 下載儀表站APP

    • Ybzhan手機版

    • Ybzhan公眾號

    • Ybzhan小程序

    企業(yè)未開通此功能
    詳詢客服 : 0571-87759942
    主站蜘蛛池模板: 久久久久亚洲精品成人网小说| 亚洲精品成人a在线观看| 成人综合婷婷国产精品久久蜜臀| 精品成人一区二区三区四区| 欧美激情一区二区三区成人| 成人黄色电影在线观看| 国产成人av一区二区三区在线| 四虎成人影院网址| 精品久久久久成人码免费动漫 | 在线免费成人网| 亚洲精品无码乱码成人| 狠狠色伊人亚洲综合成人| 在线成人播放毛片| 欧美成人精品a∨在线观看 | 成人免费在线视频网站| 亚洲国产精品成人午夜在线观看 | 亚洲欧美成人一区二区在线电影 | 国产成人精品实拍在线| 6080yy成人午夜电影| 在线观看免费成人| 欧美成人在线网站| 国产成人av大片大片在线播放| 成人狠狠色综合| 欧美videosex性欧美成人| 久久成人午夜电影mp4| 亚洲国产精品成人综合久久久| 国产成人精品一区二三区| 成人免费一区二区三区视频| 成人私人影院在线版| 成人毛片全部免费观看| 成人精品视频99在线观看免费| 69国产成人精品午夜福中文| 中国国产成人精品久久| 一级成人毛片免费观看| 四虎亚洲国产成人久久精品| 四虎国产成人永久精品免费| 免费国产成人手机在线观看| 四虎成人免费大片在线| 依依成人精品视频在线观看| 久久天堂成人影院| (无码视频)在线观看 |