新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 四 ARM9(S3C2440)的ADC和觸摸屏控制——理論知識

        四 ARM9(S3C2440)的ADC和觸摸屏控制——理論知識

        作者: 時間:2016-11-27 來源:網絡 收藏
        概述

        10 位CMOS ADC(模/數轉換器)是一個8 通道模擬輸入的再循環類型設備。其轉換模擬輸入信號為10 位二
        進制數字編碼,最大轉換率為2.5MHz A/D 轉換器時鐘下的500 KSPS。A/D 轉換器支持片上采樣-保持功能和掉電
        模式的操作。
        觸摸屏接口可以控制/選擇觸摸屏X、Y 方向的引腳(XP,XM,YP,YM)的變換。觸摸屏接口包括觸摸屏引
        腳控制邏輯和帶中斷發生邏輯的ADC 接口邏輯。

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

        觸摸屏接口模式
        1. 普通轉換模式
        單轉換模式是最合適的通用ADC 轉換。此模式可以通過設置ADCCON(ADC 控制寄存器)初始化并且通過讀寫
        ADCDAT0(ADC 數據寄存器0)就能夠完成。
        2. 分離的X/Y 方向轉換模式
        觸摸屏控制器可以工作在兩個轉換模式之一。方向轉換模式如下方法操作。X 方向模式寫X 方向轉換數據到
        ADCDAT0,故觸摸屏接口產生中斷源給中斷控制器。Y 方向模式寫Y 方向轉換數據到ADCDAT1,故觸摸屏接口產
        生中斷源給中斷控制器。
        3. 自動(順序)X/Y 方向轉換模式
        自動(順序)X/Y 方向轉換模式操作如下。觸摸屏控制器順序變換觸摸X 方向和Y 方向。在自動方向轉變模式中觸摸
        控制器在寫入X 測量數值到ADCDAT0 和寫入Y 測量數值到ADCDAT1 后,觸摸屏接口產生中斷源給中斷控制器。
        4. 等待中斷模式
        當筆尖落下時觸摸屏控制器產生中斷(INT_TC)信號。等待中斷模式設置值為rADCTSC=0xd3; // XP_PU,XP_Dis,
        XM_Dis,YP_Dis,YM_En
        觸摸屏控制器產生中斷信號(INT_TC)后,必須清除等待中斷模式。(XY_PST 設置到無操作模式)
        待機模式
        當ADCCON [2]被設置為1時激活待機模式。此模式中,停止A/D 轉換操作并且ADCDAT0、ADCDAT1 寄存
        器包含的是先前轉換的數據。

        寄存器的功能可以看一下數據手冊

        下面是結合FL2440開發板的觸摸屏操作實例:

        觸摸屏工作流程以及程序設計流程:
        一、觸摸屏初始化:
        1、設置觸摸屏接口為中斷等待模式(ADCTSC寄存器),等待觸摸筆按下
        2、清除源掛起寄存器(SRCPND)、中斷掛起寄存器(INTPND)、子源掛起寄存器

        (SUBSRCPND)
        3、程序入口函數,關中斷屏蔽寄存器和子中斷屏蔽寄存器(INTMSK,INTSUBMSK),中斷

        模式和中斷優先級默認即可
        二、觸摸屏中斷服務子程序:
        一)觸摸筆按下中斷
        4、如果中斷發生,設置x,y坐標為自動轉換模式
        5、啟動AD轉換,然后檢測AD轉換是否啟動
        6、檢測AD轉換是否結束,若結束,獲取x,y坐標的值
        7、對幾個寄存器寫1清零,防止反復發生中斷(這里的中斷是筆尖按下中斷)
        二)觸摸筆抬起中斷
        8、設置觸摸屏即可為等待中斷模式,等待觸摸筆抬起(ADCTSC,關鍵是要設置觸摸

        筆抬起中斷信號)
        9、如果發生中斷,不做任何操作,只打印出一句觸摸筆抬起中斷信息
        10、觸摸筆抬起之后,把得到的x,y坐標值發送給PC機,顯示出具體數值
        三)再次設置觸摸屏為等待中斷模式,等待下次觸摸屏被按下


        #include"2440addr.h"
        #include"def.h"
        //void Touch_Screen_Off(void);
        int key=0,xdata,ydata;
        void __irq ADC_ISR(void) ;
        void ledcontrol();
        void Touch_Screen_Init(void)
        {
        rADCDLY=50000;//Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
        // Enable Prescaler=39,Prescaler A/D converter freq. = 50 MHz/(39+1) = 1.25MHz
        //Conversion time = 1/(1.25MHz / 5cycles) = 1/250 kHz = 4 us
        //AIN0,Normal,Disable read start,No operation

        rADCCON = (1<<14)|(39<<6)|(0<<3)|(0<<2)|(0<<1)|(0);
        //YM=GND,YP=AIN5,XM=Hi-z,XP=AIN7,XP pullup En,Normal ADC,Waiting for interrupt mode

        rADCTSC = (0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);

        pISR_ADC= (unsigned)ADC_ISR; //中斷服務函數地址賦給中斷指針


        ClearSubPending(BIT_SUB_TC);//清子掛起寄存器
        ClearSubPending(BIT_SUB_ADC);
        ClearPending(BIT_ADC);//清掛起寄存器
        EnableSubIrq(BIT_SUB_TC); //使能子中斷
        EnableIrq(BIT_ADC);//使能中斷
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 凤庆县| 铜陵市| 阳谷县| 鄂托克前旗| 同德县| 利津县| 静乐县| 平塘县| 阿巴嘎旗| 运城市| 龙口市| 慈溪市| 栾川县| 绵阳市| 桂平市| 阿瓦提县| 沁源县| 河曲县| 玉门市| 从江县| 罗江县| 九江市| 交城县| 台东县| 哈巴河县| 田阳县| 普兰店市| 大方县| 射阳县| 英德市| 遂昌县| 尼木县| 海盐县| 黔江区| 樟树市| 凤庆县| 通渭县| 东乡| 都安| 吉木萨尔县| 海城市|