Touchpanel.c
上传用户:jankzhpno
上传日期:2022-08-03
资源大小:4763k
文件大小:3k
源码类别:

Windows CE

开发平台:

Visual C++

  1. /*****************************************
  2.   NAME: Touchpanel.c
  3.   DESC: ADC & Touch screen test
  4.   HISTORY:
  5.   2003.09.23:Leon YH KIM: draft ver 1.0
  6.  *****************************************/
  7. #include "def.h"
  8. #include "2440addr.h"
  9. #include "2440lib.h"
  10. #define REQCNT 30
  11. #define ADCPRS 9 //YH 0627
  12. #define LOOP 1
  13. void __irq AdcTsAuto(void);
  14. int count=0;
  15. volatile int xdata, ydata;
  16.     
  17. void Test_Touchpanel(void)
  18. {
  19.    
  20.     rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
  21.     rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value
  22.     Uart_Printf("ADC touch screen testn");
  23.     rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
  24.     pISR_ADC = (int)AdcTsAuto;
  25. rINTMSK=~BIT_ADC;       //ADC Touch Screen Mask bit clear
  26. rINTSUBMSK=~(BIT_SUB_TC);
  27. Uart_Printf("nType any key to exit!!!n");
  28. Uart_Printf("nStylus Down, please...... n");
  29. Uart_Getch();
  30. rINTSUBMSK|=BIT_SUB_TC;
  31. rINTMSK|=BIT_ADC;
  32. Uart_Printf("Touch Screen Test is Finished!!!n");
  33. }
  34. void __irq AdcTsAuto(void)
  35. {
  36. int i;
  37. U32 saveAdcdly;
  38.     if(rADCDAT0&0x8000)
  39.     {
  40. //Uart_Printf("nStylus Up!!n");
  41. rADCTSC&=0xff; // Set stylus down interrupt bit
  42.     }
  43.     //else 
  44. //Uart_Printf("nStylus Down!!n");
  45. rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.
  46. saveAdcdly=rADCDLY;
  47. rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms
  48. rADCCON|=0x1;                   //start ADC
  49. while(rADCCON & 0x1); //check if Enable_start is low
  50. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  51.             while(!(rSRCPND & (BIT_ADC)));  //check if ADC is finished with interrupt bit
  52.             xdata=(rADCDAT0&0x3ff);
  53.             ydata=(rADCDAT1&0x3ff);
  54.  //YH 0627, To check Stylus Up Interrupt.
  55.  rSUBSRCPND|=BIT_SUB_TC;
  56.  ClearPending(BIT_ADC);
  57.  rINTSUBMSK=~(BIT_SUB_TC);
  58.  rINTMSK=~(BIT_ADC);
  59.  
  60.  rADCTSC =0xd3;    //Waiting for interrupt
  61.  rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
  62. while(1) //to check Pen-up state
  63. {
  64.  if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit
  65.  {
  66. //Uart_Printf("Stylus Up Interrupt~!n");
  67. break; //if Stylus is up(1) state
  68. }
  69. }
  70.     Uart_Printf("count=%03d  XP=%04d, YP=%04dn", count++, xdata, ydata);    //X-position Conversion data            
  71. rADCDLY=saveAdcdly; 
  72. rADCTSC=rADCTSC&~(1<<8); // Detect stylus Down interrupt signal.
  73.     rSUBSRCPND|=BIT_SUB_TC;
  74.     rINTSUBMSK=~(BIT_SUB_TC); // Unmask sub interrupt (TC)     
  75.     ClearPending(BIT_ADC);
  76. }