新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于S3C2410微處理器的觸摸屏設計

        基于S3C2410微處理器的觸摸屏設計

        作者: 時間:2013-02-19 來源:網絡 收藏

        引言

        隨著信息家電和通訊設備的普及,作為與用戶交互的終端媒介,在生活中得到廣泛的應用。如何在系統中集成模塊以及在嵌入式操作系統中實現其驅動程序,都成為嵌入式系統設計者需要考慮的問題。本文主要介紹在三星X的硬件平臺上進行基于嵌入式Linux的驅動程序設計。

        硬件實現方案

        SPI接口是Motorola推出的一種同步串行接口,采用全雙工、四線通信系統,X是三星推出的自帶觸摸屏接口的ARM920T內核芯片,ADS7843為Burr-Brown生產的一款性能優異的觸摸屏控制器。本文采用SPI接口的觸摸屏控制器ADS7843外接四線電阻式觸摸屏,這種方式最顯著的特點是響應速度更快、靈敏度更高,與觸摸屏控制器間的通訊時間大大減少,提高了的效率。ADS7843與的硬件連接如圖1所示,鑒于ADS7843差分工作模式的優點,在硬件電路中將其配置為差分模式。

        基于S3C2410微處理器的觸摸屏設計
        圖1 觸摸屏輸入系統示意圖

        嵌入式Linux系統下的驅動程序

        設備驅動程序是Linux內核的重要組成部分,控制了操作系統和硬件設備之間的交互。Linux的設備管理是和文件系統緊密結合的,各種設備都以文件的形式存放在/dev目錄下,成為設備文件。應用程序可以打開、關閉、讀寫這些設備文件,對設備的操作就像操作普通的數據文件一樣簡便。為開發便利、提高效率,本設計采用可安裝模塊方式開發調試觸摸屏驅動程序。

        設備驅動在加載時首先需要調用入口函數init_module(),該函數完成設備驅動的初始化工作。其中最重要的工作就是向內核注冊該設備,對于字符設備調用register_chrdev()完成注冊,對于塊設備需要調用register_blkdev()完成注冊。注冊成功后,該設備獲得了系統分配的主設備號、自定義的次設備號,并建立起與文件系統的關聯。字符設備驅動程序向Linux內核注冊登記時,在字符設備向量表chrdevs中增加一個device_struct數據結構條目,這個設備的主設備標識符用作這個向量表的索引。向量表中的每一個條目,即一個device_struct數據結構包括兩個元素:一個登記的設備驅動程序的名稱的指針和一個指向一組文件操作的指針。這塊文件操作本身位于這個設備的字符設備驅動程序中,每一個都處理特定的文件操作,比如打開、讀寫和關閉。所謂登記,就是將由模塊提供的file_operations結構指針填入device_struct數據結構數組的某個表項。登記以后,位于上層的模塊(內核)可以“看見”這個模塊了。但是,應用程序卻還不能“看見”它,因而還不能通過系統調用它。要使應用程序能“看見”這個模塊或者它所驅動的設備,就要在文件系統中為其創建一個代表它的節點。通過系統調用mknod()創建代表此項設備的文件節點——設備入口點,就可使一項設備在系統中可見,成為應用程序可以訪問的設備。另外,設備驅動在卸載時需要回收相應的資源,令設備的相應寄存器值復位并從系統中注銷該設備。

        Linux操作系統通過系統調用和硬件中斷完成從用戶空間到內核空間的控制轉移。設備驅動模塊的功能就是擴展內核的功能,主要完成兩部分任務:一個是系統調用,另一個是處理中斷。圖2是一個設備驅動模塊動態掛接、卸載和系統調用的全過程。系統調用部分則是對設備的操作過程,比如open,read,write,ioctl等操作,設備驅動程序所提供的這組入口點由幾個結構向系統進行說明,分別是file_operations數據結構、inode數據結構和file 數據結構。內核內部通過file結構識別設備,通過file_operations數據結構提供文件系統的入口點函數,也就是訪問設備驅動的函數,結構中的每一個成員都對應著一個系統調用。在嵌入式系統的開發中,我們一般僅僅實現其中幾個接口函數:read、write、open、ioctl及release就可以完成應用系統需要的功能。寫驅動程序的任務之一就是完成file_operations中的函數指針

        觸摸屏驅動程序設計

        觸摸屏驅動程序中重要數據結構

        typedef struct {

        unsigned short pressure;

        unsigned short x;

        unsigned short y;

        unsigned short pad;

        } TS_RET;

        typedef struct {

        unsigned int PenStatus;

        TS_RET buf[MAX_TS_BUF];

        unsigned int head, tail;

        wait_queue_head_t wq;

        spinlock_t lock;

        } TS_DEV;

        static struct file_operations s3c2410_fops = {

        owner: THIS_MODULE,

        open: s3c2410_ts_open,

        read: s3c2410_ts_read, release: s3c2410_ts_release,

        poll: s3c2410_ts_poll, };

        在程序中有三個重要的數據結構:用于表示筆觸點數據信息的結構TS_RET,表示ADS7843中有關觸摸屏控制器信息的結構TS_DEV,以及驅動程序與應用程序的接口file_operations結構的s3c2410_fops。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 闵行区| 洛隆县| 宜章县| 叙永县| 辽中县| 澄迈县| 永新县| 衡南县| 三江| 长汀县| 来宾市| 同心县| 方正县| 团风县| 洛扎县| 六枝特区| 五家渠市| 青阳县| 明水县| 甘南县| 伊金霍洛旗| 大关县| 东明县| 宣城市| 尚义县| 谢通门县| 揭西县| 浦江县| 无锡市| 纳雍县| 南安市| 迭部县| 定远县| 五指山市| 阳原县| 海安县| 古丈县| 宜君县| 大名县| 榆树市| 讷河市|