歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

S3C2440裸奔觸摸屏

S3C2440對於觸摸屏的相關interface有以下幾個模式:

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

 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);            //打開中斷屏蔽

Copyright © Linux教程網 All Rights Reserved