主题 : Tiny210 V2 一线裸机程序,可以调背光,但读不出触摸数据,附代码 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 86683
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2013-01-22
最后登录: 2016-02-15
楼主  发表于: 2013-01-29 21:10

 Tiny210 V2 一线裸机程序,可以调背光,但读不出触摸数据,附代码

源码修改自:http://aiothome.net/read.php?tid-13182.html
复制代码
  1. #define GPH1CON            (*(volatile unsigned long *)0xE0200C20)
  2. #define GPH1DAT            (*(volatile unsigned long *)0xE0200C24)
  3. #define        PWMTIMER_BASE            (0xE2500000)
  4. #define        TCFG0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x00)) )
  5. #define        TCFG1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x04)) )
  6. #define        TCON          ( *((volatile unsigned long *)(PWMTIMER_BASE+0x08)) )
  7. #define        TCNTB0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x0C)) )
  8. #define        TCMPB0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x10)) )
  9. #define        TCNTO0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x14)) )
  10. #define        TCNTB1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x18)) )
  11. #define        TCMPB1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x1C)) )
  12. #define        TCNTO1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x20)) )
  13. #define        TCNTB2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x24)) )
  14. #define        TCMPB2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x28)) )
  15. #define        TCNTO2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x2C)) )
  16. #define        TCNTB3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x30)) )
  17. #define        TCMPB3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x34)) )
  18. #define        TCNTO3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x38)) )
  19. #define        TCNTB4        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x3C)) )
  20. #define        TCNTO4        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x40)) )
  21. #define        TINT_CSTAT     ( *((volatile unsigned long *)(PWMTIMER_BASE+0x44)) )
  22. #define REQ_TS   0x40U
  23. #define REQ_INFO 0x60U
  24. typedef struct
  25. {
  26.     unsigned short x;                   //x坐标
  27.     unsigned short y;                   //y坐标
  28. }TS_RET;
  29. TS_RET TS_points;
  30. static void set_pin_as_input(void)
  31. {
  32.       GPH1CON &= ~ (3<<8);
  33. }
  34. static void set_pin_as_output(void)
  35. {
  36.     GPH1CON &= ~ (3<<8);
  37.     GPH1CON |= 1<<8;
  38. }
  39. static void set_pin_value(int v)
  40. {
  41.     if (v) {
  42.         GPH1DAT |= 1<<2;
  43.     } else {
  44.         GPH1DAT &= ~(1<<2);
  45.     }
  46. }
  47. static int get_pin_value(void)
  48. {
  49.     if(GPH1DAT & (1<<2))
  50.         return 1;
  51.     else
  52.         return 0;
  53. }
  54. static void InitTimer(void)
  55. {
  56.     TCFG0 &= ~0xf0;
  57.     TCFG0 |= 65<<8;
  58.     TCFG1 &= ~(0xf<<12);
  59.     TCNTB3 = 104;
  60.     TCMPB3 = 104;
  61.     TCON |= 1<<17;
  62.     TCON &= ~(1<<17);
  63.     TCON &= ~(0x1f<<16);
  64.     TCON |= (1<<19);
  65.     TINT_CSTAT |= 1<<3;
  66. }
  67. static void StartTimer(void)
  68. {
  69.  
  70.     TCON |= (1<<16);
  71. }
  72. static void StopTimer(void)
  73. {
  74.    TCON &= ~(1<<16);/* 停止定时器3 */
  75. }
  76. static void WaitTimerTick(void)
  77. {
  78.     while ((TINT_CSTAT & (1U << 8)) == 0) ;
  79.     TINT_CSTAT |= 1<<8;
  80. }
  81. static unsigned char crc8(unsigned v, unsigned len);
  82. static int OneWireSession(unsigned char req, unsigned char res[])
  83. {
  84.     unsigned Req;
  85.     unsigned *Res;
  86.     unsigned int i;
  87.     Req = (req << 24) | (crc8(req << 24, 8) << 16);
  88.     Res = (unsigned *)res;
  89.     set_pin_value(1);
  90.     set_pin_as_output();
  91.     StartTimer();
  92.     for (i = 0; i < 60; i++) {
  93.         WaitTimerTick();
  94.     }
  95.     set_pin_value(0);
  96.     for (i = 0; i < 2; i++) {
  97.         WaitTimerTick();
  98.     }
  99.     for (i = 0; i < 16; i++) {
  100.         int v = !!(Req & (1U << 31));
  101.         Req <<= 1;
  102.         set_pin_value(v);
  103.         WaitTimerTick();
  104.     }
  105.     WaitTimerTick();
  106.     set_pin_as_input();
  107.     WaitTimerTick();
  108.     for (i = 0; i < 32; i++) {
  109.         (*Res) <<= 1;
  110.         (*Res) |= get_pin_value();
  111.         WaitTimerTick();
  112.     }
  113.     StopTimer();
  114.     set_pin_value(1);
  115.     set_pin_as_output();
  116.     return crc8(*Res, 24) == res[0];
  117. }
  118. static int TryOneWireSession(unsigned char req, unsigned char res[])
  119. {
  120.     int i;
  121.     for (i = 0; i < 3; i++) {
  122.         if (OneWireSession(req, res)) {
  123.             return 1;
  124.         }
  125.     }
  126.     return 0;
  127. }
  128. void InitOneWire(void)
  129. {
  130.     InitTimer();
  131. }
  132. int GetInfo(unsigned char *Lcd, unsigned short *FirmwareVer)
  133. {
  134.     unsigned char res[4];
  135.     if (!TryOneWireSession(REQ_INFO, res)) {
  136.         return 0;
  137.     }
  138.     *Lcd = res[3];
  139.     *FirmwareVer = res[2] * 100 + res[1];
  140.     return 1;
  141. }
  142. int SetBacklightOfLCD(unsigned Brightness)
  143. {
  144.     unsigned char res[4];
  145.     int ret;
  146.     if (Brightness > 127) {
  147.         Brightness = 127;
  148.     }
  149.     ret = TryOneWireSession(Brightness | 0x80U, res);
  150.     return ret;
  151. }
  152. static unsigned char crc8(unsigned v, unsigned len)
  153. {
  154.     unsigned char crc = 0xACU;
  155.     while (len--) {
  156.         if ((crc & 0x80U) != 0) {
  157.             crc <<= 1;
  158.             crc ^= 0x7U;
  159.         } else {
  160.             crc <<= 1;
  161.         }
  162.         if ((v & (1U << 31)) != 0) {
  163.             crc ^= 0x7U;
  164.         }
  165.         v <<= 1;
  166.     }
  167.     return crc;
  168. }
  169. void ARM1Wire_SET_Backlight(unsigned Brightness)
  170. {
  171.     //InitOneWire();
  172.     SetBacklightOfLCD(Brightness);
  173. }
  174. #define level    ((3770-317)/(480))
  175. #define vertical ((3839-192)/(272))
  176. int ARM1Wire_GET_XY(int *x,int *y)
  177. {
  178.     int ret;
  179.     unsigned char res[4];
  180.     unsigned short x1,y1;
  181.     //unsigned char pressed;
  182.     //unsigned int  ts_status;
  183.    
  184.     ret = TryOneWireSession(0x40U, res);
  185.     y1 =  ((res[3] >>   4U) << 8U) + res[2];
  186.     x1 =  ((res[3] &  0xFU) << 8U) + res[1];
  187.    
  188.     //pressed = (x != 0xFFFU) && (y != 0xFFFU);
  189.     *x= x1;//((x1-200)*480/(3880-200));
  190.     *y= y1;//((3772-y1)*272/(3772-324));
  191.     //ts_status=((x1 << 16) | (y1)) | (pressed << 31);
  192.     return ret;
  193. }




InitOneWire();                                           // 初始化timer3
ARM1Wire_SET_Backlight(10)   ;             //  屏幕变暗了,证明通信没问题
ARM1Wire_GET_XY(&x,&y);                     //  但读出的XY总是0xFFF


求教高手如何解决
[ 此帖被wenwu2013在2013-02-03 11:18重新编辑 ]