關(guān) 閉

        新聞中心

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

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

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

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

        read函數(shù)主要是向消息隊列提供坐標采集數(shù)據(jù),以供應用程序調(diào)用。s3c2410_ts_poll為查詢設(shè)備的可讀寫狀態(tài),s3c2410_ts_release則在釋放設(shè)備時調(diào)用。

        在觸摸屏程序中定義了一組宏,用于控制觸摸屏和ADC進入不同的工作模式,如等待中斷、X/Y位置轉(zhuǎn)換等。定義了觸摸屏結(jié)構(gòu)體TS_DEV包含一個緩沖區(qū)、自旋鎖、等待隊列和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; /*等待隊列*/
        spinlock_t lock;
        #ifdef USE_ASYNC
        struct fasync_struct *aq;
        #endif
        struct cdev cdev;
        }TS_DEV;

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

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

        2.4 實驗操作過程

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

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


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 稻城县| 呼和浩特市| 通海县| 武清区| 布尔津县| 元朗区| 涟水县| 社会| 建湖县| 宣恩县| 黄龙县| 阿鲁科尔沁旗| 什邡市| 兰州市| 三都| 吉林省| 洞口县| 德保县| 水富县| 盐源县| 漯河市| 鄢陵县| 巨野县| 山东| 金秀| 文山县| 夏津县| 满洲里市| 莎车县| 麻城市| 曲阳县| 惠来县| 全椒县| 洛川县| 磴口县| 徐闻县| 金昌市| 营口市| 阿城市| 建瓯市| 全州县|