<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          概述

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

          本文引用地址:http://www.ex-cimer.com/article/201611/322169.htm

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

          寄存器的功能可以看一下數(shù)據(jù)手冊

          下面是結(jié)合FL2440開發(fā)板的觸摸屏操作實例:

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

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

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

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


          #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; //中斷服務(wù)函數(shù)地址賦給中斷指針


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


          上一頁 1 2 下一頁

          關(guān)鍵詞: ARM9S3C2440ADC觸摸屏控

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();