在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            關(guān) 閉

            新聞中心

            EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于TQ2440和Linux的觸摸屏的驅(qū)動(dòng)研究

            基于TQ2440和Linux的觸摸屏的驅(qū)動(dòng)研究

            作者: 時(shí)間:2012-03-16 來(lái)源:網(wǎng)絡(luò) 收藏

            結(jié)構(gòu)中s3c2410_ts_open函數(shù)為file_operations中函數(shù)指針open所指向的函數(shù),即打開(kāi)設(shè)備時(shí) open操作即為調(diào)用s3c2410_ts_open函數(shù),完成初始狀態(tài)參數(shù)的設(shè)置、消息隊(duì)列初始化等。read所指向s3c2410_ts_

            read函數(shù)主要是向消息隊(duì)列提供坐標(biāo)采集數(shù)據(jù),以供應(yīng)用程序調(diào)用。s3c2410_ts_poll為查詢(xún)?cè)O(shè)備的可讀寫(xiě)狀態(tài),s3c2410_ts_release則在釋放設(shè)備時(shí)調(diào)用。

            在觸摸屏程序中定義了一組宏,用于控制觸摸屏和ADC進(jìn)入不同的工作模式,如等待中斷、X/Y位置轉(zhuǎn)換等。定義了觸摸屏結(jié)構(gòu)體TS_DEV包含一個(gè)緩沖區(qū)、自旋鎖、等待隊(duì)列和fasync_struct指針,結(jié)構(gòu)為:
            typedef struct
            {
            unsigned int penStatus;
            TS_RET buf[MAX_TS_BUF]; /*緩沖區(qū)*/
            unsigned int head,tail; /*緩沖區(qū)頭和尾*/
            wait_queue_head_t wq; /*等待隊(duì)列*/
            spinlock_t lock;
            #ifdef USE_ASYNC
            struct fasync_struct *aq;
            #endif
            struct cdev cdev;
            }TS_DEV;

            觸摸屏結(jié)構(gòu)體中的TS_RET包含屏幕的X、Y坐標(biāo)和觸摸狀態(tài)信息(PEN_DOWN、PEN_UP),這個(gè)信息會(huì)在用戶(hù)讀取觸摸屏信息時(shí)復(fù)制到用戶(hù)空間,結(jié)構(gòu)為:
            typedef struct
            {
            unsigned short pressure;
            unsigned short x;//X坐標(biāo)
            unsigned shorty;//Y坐標(biāo)
            unsigned short pad;
            }TS_RET;

            觸摸屏工作時(shí)會(huì)產(chǎn)生兩類(lèi)中斷:一類(lèi)是觸點(diǎn)中斷(INT_TC),一類(lèi)是X/Y位置轉(zhuǎn)換中斷(INT_ADC)。使用函數(shù)s3c2410_isr_tc用來(lái)處理觸摸屏的觸點(diǎn)/抬起中斷,在觸點(diǎn)中斷發(fā)生后,若之前處于PEN_UP狀態(tài),則應(yīng)該啟動(dòng)X/Y位置轉(zhuǎn)換;當(dāng)處于PEN_DOWN狀態(tài)時(shí),則調(diào)用函數(shù)tsEvent完成緩沖區(qū)的填充、等待隊(duì)列的喚醒和異步通知信號(hào)的釋放。使用函數(shù)s3c2410_isr_adc來(lái)處理X/Y位置轉(zhuǎn)換中斷,當(dāng)X/Y位置轉(zhuǎn)換中斷發(fā)生后,讀取X、Y的坐標(biāo)值,填入緩沖區(qū)。在函數(shù)s3c2410_isr_adc中通過(guò)調(diào)用函數(shù)s3c2410_get_XY來(lái)獲取X、Y坐標(biāo)的。最后由函數(shù)s3c2410_ts_poll實(shí)現(xiàn)輪詢(xún)接口,將等待隊(duì)列添加到結(jié)構(gòu)體poll_table中,當(dāng)緩沖區(qū)有數(shù)據(jù)時(shí),返回資源可讀取標(biāo)志,否則返回0。函數(shù)s3c2410_ts_fasync完成觸摸屏對(duì)應(yīng)用程序的異步通知。在程序的最后,由函數(shù)__init s3c2410_ts_init和__exit s3c2410_ts_exit完成從內(nèi)核中加載和卸載觸摸屏程序,加載函數(shù)__init s3c2410_ts_init還需要完成申請(qǐng)?jiān)O(shè)備號(hào)、添加cdev、申請(qǐng)中斷、設(shè)置觸摸屏控制引腳等多項(xiàng)工作,卸載函數(shù)_exit s3c2410_ts_exit完成釋放設(shè)備號(hào)、刪除cdev、釋放中斷等工作[3]。

            2.4 實(shí)驗(yàn)操作過(guò)程

            將編寫(xiě)好的觸摸屏ts.c文件拷貝到內(nèi)核源碼目錄“drivers/input/touchsreen/”下,并修改同目錄下的“Kconfig”和“Makefile”文件。在內(nèi)核配置單中添加觸摸屏編譯配置選項(xiàng),修改Kconfig文件的第468行,添加如下內(nèi)容:

            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉