ts.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:2k
源码类别:

uCOS

开发平台:

C/C++

  1. #include "def1.h"
  2. #include "2440addr.h"
  3. #include "2440lib.h"
  4. #include "ts.h"
  5. #include "config.h"
  6. #include "app_cfg.h"
  7. #define REQCNT 30
  8. #define ADCPRS 9 //YH 0627
  9. #define LOOP 1
  10. #define LCD_XSIZE 240
  11. #define LCD_YSIZE 320
  12. #define XDATA_MIN  80//120
  13. #define XDATA_MAX  942//900
  14. #define YDATA_MIN  85//145
  15. #define YDATA_MAX  930//915
  16. #define  XLCD_POS(data) ( (int)((LCD_XSIZE*((data)-XDATA_MIN)) /(XDATA_MAX-XDATA_MIN)))
  17. #define  YLCD_POS(data) (LCD_YSIZE-(( (int)(LCD_YSIZE*((data)-YDATA_MIN)/(YDATA_MAX-YDATA_MIN)) )))
  18. unsigned long g_tsnum=0;
  19. OS_EVENT* ts_scan_event;
  20. volatile int xdata, ydata;    
  21. void open_tp(void)
  22. {
  23.    
  24.     rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
  25.     rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value
  26.     rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
  27.     pISR_ADC = (int)ts_isr;
  28. rINTMSK&=~BIT_ADC;       //ADC Touch Screen Mask bit clear
  29. rINTSUBMSK&=~(BIT_SUB_TC);
  30. }
  31. void close_tp(void)
  32. {
  33. rINTSUBMSK|=BIT_SUB_TC;
  34. rINTMSK|=BIT_ADC;
  35. }
  36. int m_num = 0;
  37. void  ts_isr(void)
  38. {
  39. rSUBSRCPND|=BIT_SUB_TC;
  40. ClearPending(BIT_ADC);
  41. if(!(rADCDAT0&0x8000))
  42. {
  43. ts_read();
  44. OSPrintf("down  XP=%04d, YP=%04dn", XLCD_POS(xdata), YLCD_POS(ydata));
  45. OSTaskResume(Task0Prio);
  46. }
  47. else
  48. {
  49. rADCTSC=0xd3;
  50. OSTaskSuspend(Task0Prio);
  51. OSPrintf("up  XP=%04d, YP=%04dn", XLCD_POS(xdata), YLCD_POS(ydata));
  52. }
  53. g_tsnum++;
  54. }
  55. void ts_read(void)
  56. {
  57. int i;
  58. U32 saveAdcdly;
  59.     if(rADCDAT0&0x8000)
  60.     {
  61. //Uart_Printf("nStylus Up!!n");
  62. rADCTSC&=0xff; // Set stylus down interrupt bit
  63.     }
  64. rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.
  65. saveAdcdly=rADCDLY;
  66. rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms
  67. rADCCON|=0x1;                   //start ADC
  68. while(rADCCON & 0x1); //check if Enable_start is low
  69. while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!
  70.     ydata=(rADCDAT0&0x3ff);
  71.     xdata=(rADCDAT1&0x3ff);
  72. rADCDLY=40000; 
  73. rADCTSC =0xd3;    //Waiting for interrupt
  74. rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
  75. }
  76. void Task0 (void *pdata)
  77. {
  78.  
  79. char *s="msg";
  80. char i;
  81. INT8U err;
  82. open_tp();
  83. OSTaskSuspend(Task0Prio);
  84. while (1)
  85. {
  86. ts_read();
  87. OSPrintf("move  XP=%04d, YP=%04dn", XLCD_POS(xdata), YLCD_POS(ydata));
  88.    OSTimeDly(OS_TICKS_PER_SEC);
  89. }
  90. }