新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440裸奔觸摸屏

        S3C2440裸奔觸摸屏

        作者: 時間:2016-11-27 來源:網絡 收藏
        S3C2440對于觸摸屏的相關interface有以下幾個模式:

        1.普通轉換模式,手冊是這么說的:most likely used for General Purpose ADC Conversion.(不了解這個,所以用原文)

        本文引用地址:http://www.104case.com/article/201611/322379.htm

        2.分開X/Y轉換模式,就是分開來轉換X位置和Y位置。X位置的信息會保存在ADCDAT0的低10位,而Y位置信息則保存在ADCDAT1的低10位。

        3.自動X/Y轉換模式,就是會把和X和Y一起轉換,然后X,Y位置信息保存跟上面一樣,也是在ADCDAT0,ADCDAT1的低10位。(我想一般會用這個模式)

        4.等待中斷模式,也就是等待觸摸屏的中斷,ADCTSC=0xd3就是等待筆尖放下時產生中斷,而ADC=0xd3|(1<<8)就是筆尖抬起時產生中斷。

        參考手冊弄出來也不難,只是提醒一下ADCUPDN這個寄存器是會標記當前的中斷是筆尖放下還是抬起的。只是讀完之后就要記得把它清0,在這個地方卡了很久,后來想到手冊既然沒說這個寄存器會自動清0,那就自己手動幫他清0吧。果然是這樣。

        下面列出關鍵代碼,使用自動X/Y轉換模式:

        void __irq lhg_tsINT(void) //中斷函數
        {
        rINTSUBMSK |= ((U32)0x1<<9); //關閉中斷服務

        if ( rADCUPDN&(U32)0x01 )//現在是down
        {
        ts=0; //這是一個全局變量,調試時會來登記一下觸摸屏是否轉換了新的XY坐標
        rADCUPDN=0;
        uart_print_str("/r/ndown");//自己做的串口打印函數

        //產生X、Y坐標
        rADCTSC = (1<<3)|(1<<2); //上拉電阻無效,自動XY坐標轉換模式開啟
        rADCCON|=0x1;//開始A/D轉換
        while( rADCCON & 0x1 ); //等待AD轉換開始
        //rADCDLY = 40000; //這里比較郁悶,網上有人用這個值,據手冊里說低15位有效,www.linuxidc.com默認值是0xff,屏蔽掉,不刪免得以后忘記有這個寄存器。
        while( !(rADCCON & ((U32)0x1<<15)) ); //等待AD轉換結束
        x=(rADCDAT0&0x3ff); //保存x位置
        y=(rADCDAT1&0x3ff);//保存y位置

        //等待筆觸抬起
        //rADCCON=(1<<14)+(9<<6);//設置A/D預分頻
        rADCTSC =0xd3|(1<<8);//再次設置等待中斷模式,這一次是判斷觸筆的抬起
        }

        if ( (rADCUPDN>>1)&(U32)0x01 )//現在是up
        {
        rADCUPDN=0;
        uart_print_str("/r/nup");
        ts=1;//標志有xy轉換

        rADCCON=(1<<14)+(9<<6);//設置A/D預分頻
        rADCTSC=0xd3;//設置觸摸屏為等待中斷模式。

        }

        rSRCPND |= (U32)0x1<<31; //清中斷標志
        rSUBSRCPND |=(U32)0x01<<9;
        rINTPND |= (U32)0x1<<31;
        rINTSUBMSK &= ~((U32)0x1<<9); //打開中斷服務

        }

        void init_lhg_ts(void) //初始化觸摸屏
        {
        uart_print_str("/r/nTouchScreen init");

        //確定中斷入口地址
        pISR_ADC = (U32)lhg_tsINT;
        rADCCON=(1<<14)+(9<<6);//設置A/D預分頻
        rADCTSC=0xd3;//設置觸摸屏為等待中斷模式。

        //清中斷標志
        rSRCPND |= (U32)0x1<<31;
        rSUBSRCPND |= (U32)0x01<<9;
        rINTPND |= (U32)0x1<<31;
        rINTSUBMSK &= ~((U32)0x1<<9);//打開中斷服務
        rINTMSK &= ~((U32)0x1<<31);//打開中斷屏蔽

        }



        關鍵詞: S3C2440裸奔觸摸

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泸西县| 开远市| 高州市| 米易县| 高青县| 中宁县| 江津市| 绥化市| 梁平县| 香河县| 永济市| 杭州市| 韶关市| 清远市| 栾川县| 五华县| 桂林市| 义马市| 嘉兴市| 邢台县| 延安市| 名山县| 商城县| 鸡泽县| 云南省| 商水县| 焉耆| 颍上县| 广宗县| 昂仁县| 云梦县| 南和县| 珠海市| 华宁县| 普兰店市| 永新县| 县级市| 百色市| 星座| 甘孜| 通化县|