• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 6410一线触摸和一线背光控制裸机源代码 复制链接 | 浏览器收藏 | 打印
菜鸟在路上
级别: 圣骑士
UID: 42749
精华: 6
发帖: 241
金钱: 1530 两
威望: 306 点
贡献值: 6 点
综合积分: 602 分
注册时间: 2011-04-11
最后登录: 2016-07-19
楼主  发表于: 2011-06-16 16:57

 6410一线触摸和一线背光控制裸机源代码

管理提醒: 本帖被 xoom 执行加亮操作(2011-06-17)
复制代码
  1. #include "one_write.h"
  2. #include "s3c6410_addr.h"
  3. #include "soc_cfg.h"
  4. #include "utils.h"
  5. #if 1
  6. //#define TINT_CSTAT_REG  __REG(0x7F006044)
  7. //#define rGPFCON GPFCON_REG
  8. //#define rGPFDAT GPFDAT_REG
  9. //#define rTCNTB3 TCNTB3_REG
  10. //#define rTINT_CSTAT TINT_CSTAT_REG
  11. //#define rTCON TCON_REG
  12. #define TINT_CSTAT_INTMASK(n) ( (n&0x1FU))
  13. #define TIMER3_PENDING_CLEAR (1U<<8)
  14. #define TIMER3_INTERRUPT_ENABLE (1<<3)
  15. #define SYS_TIMER_PRESCALER 2
  16. #define SYS_TIMER_DIVIDER 1
  17. //#define S3C6410_PCLK (get_PCLK())
  18. #define SAMPLE_BPS 9600
  19. #define REQ_INFO          0x60U
  20. //extern ulong   get_PCLK (void);
  21. #endif
  22. static void set_pin_as_input(void)
  23. {
  24.     unsigned tmp;
  25.     tmp = rGPFCON;
  26.     tmp &= ~(3U << 30);
  27.     rGPFCON = tmp;
  28. }
  29. static void set_pin_as_output(void)
  30. {
  31.     unsigned tmp;
  32.     tmp = rGPFCON;
  33.     tmp = (tmp & ~(3U << 30)) | (1U << 30);
  34.     rGPFCON = tmp;
  35. }
  36. static void set_pin_value(int v)
  37. {
  38.     unsigned tmp;
  39.     tmp = rGPFDAT;
  40.     if (v) {
  41.         tmp |= (1 << 15);
  42.     } else {
  43.         tmp &= ~(1 << 15);
  44.     }
  45.     rGPFDAT = tmp;
  46. }
  47. static int get_pin_value(void)
  48. {
  49.     int v;
  50.     unsigned long tmp;
  51.     tmp = rGPFDAT;
  52.     v = !!(tmp & (1 << 15));
  53.     return v;
  54. }
  55. static void InitTimer(void)
  56. {
  57.     rTCNTB3 = (S3C6410_PCLK / SYS_TIMER_PRESCALER / SYS_TIMER_DIVIDER / SAMPLE_BPS - 1);
  58.     rTINT_CSTAT = TINT_CSTAT_INTMASK(rTINT_CSTAT) | TIMER3_PENDING_CLEAR;
  59.     rTINT_CSTAT = TINT_CSTAT_INTMASK(rTINT_CSTAT) | TIMER3_INTERRUPT_ENABLE;
  60. }
  61. static void StartTimer(void)
  62. {
  63.     rTCON &= ~(0xf << 16);    // Timer3 Stop
  64.     rTCON |= (1 << 17);    // update TCNTB3
  65.     rTCON &= ~(1 << 17);
  66.     rTCON |= ((1 << 19) | (1 << 16));    // AutoReload mode, Timer3 Start
  67. }
  68. static void StopTimer(void)
  69. {
  70.     unsigned tcon;
  71.     tcon = rTCON;
  72.     tcon &= ~(1 << 16);
  73.     rTCON = tcon;
  74. }
  75. static void WaitTimerTick(void)
  76. {
  77.     while ((rTINT_CSTAT & (1U << 8)) == 0) ;
  78.     rTINT_CSTAT = TINT_CSTAT_INTMASK(rTINT_CSTAT) | TIMER3_PENDING_CLEAR;
  79. }
  80. static unsigned char crc8(unsigned v, unsigned len);
  81. static int OneWireSession(unsigned char req, unsigned char res[])
  82. {
  83.     unsigned Req;
  84.     unsigned *Res;
  85.     unsigned int i;
  86.     Req = (req << 24) | (crc8(req << 24, 8) << 16);
  87.     Res = (unsigned *)res;
  88.     set_pin_value(1);
  89.     set_pin_as_output();
  90.     StartTimer();
  91.     for (i = 0; i < 60; i++) {
  92.         WaitTimerTick();
  93.     }
  94.     set_pin_value(0);
  95.     for (i = 0; i < 2; i++) {
  96.         WaitTimerTick();
  97.     }
  98.     for (i = 0; i < 16; i++) {
  99.         int v = !!(Req & (1U << 31));
  100.         Req <<= 1;
  101.         set_pin_value(v);
  102.         WaitTimerTick();
  103.     }
  104.     WaitTimerTick();
  105.     set_pin_as_input();
  106.     WaitTimerTick();
  107.     for (i = 0; i < 32; i++) {
  108.         (*Res) <<= 1;
  109.         (*Res) |= get_pin_value();
  110.         WaitTimerTick();
  111.     }
  112.     StopTimer();
  113.     set_pin_value(1);
  114.     set_pin_as_output();
  115.     return crc8(*Res, 24) == res[0];
  116. }
  117. static int TryOneWireSession(unsigned char req, unsigned char res[])
  118. {
  119.     int i;
  120.     for (i = 0; i < 3; i++) {
  121.         if (OneWireSession(req, res)) {
  122.             return 1;
  123.         }
  124.     }
  125.     return 0;
  126. }
  127. void InitOneWire(void)
  128. {
  129.     InitTimer();
  130. }
  131. int GetInfo(unsigned char *Lcd, unsigned short *FirmwareVer)
  132. {
  133.     unsigned char res[4];
  134.     if (!TryOneWireSession(REQ_INFO, res)) {
  135.         return 0;
  136.     }
  137.     *Lcd = res[3];
  138.     *FirmwareVer = res[2] * 100 + res[1];
  139.     return 1;
  140. }
  141. int SetBacklightOfLCD(unsigned Brightness)
  142. {
  143.     unsigned char res[4];
  144.     int ret;
  145.     if (Brightness > 127) {
  146.         Brightness = 127;
  147.     }
  148.     ret = TryOneWireSession(Brightness | 0x80U, res);
  149.     return ret;
  150. }
  151. static unsigned char crc8(unsigned v, unsigned len)
  152. {
  153.     unsigned char crc = 0xACU;
  154.     while (len--) {
  155.         if ((crc & 0x80U) != 0) {
  156.             crc <<= 1;
  157.             crc ^= 0x7U;
  158.         } else {
  159.             crc <<= 1;
  160.         }
  161.         if ((v & (1U << 31)) != 0) {
  162.             crc ^= 0x7U;
  163.         }
  164.         v <<= 1;
  165.     }
  166.     return crc;
  167. }
  168. void ARM1Wire_SET_Backlight(unsigned Brightness)
  169. {
  170.     //InitOneWire();
  171.     SetBacklightOfLCD(Brightness);
  172. }
  173. #define level    ((3770-317)/(480))
  174. #define vertical ((3839-192)/(272))
  175. int ARM1Wire_GET_XY(void)
  176. {
  177.     int ret;
  178.     unsigned char res[4];
  179.     unsigned short x,y,x1,y1;
  180.     unsigned char pressed;
  181.     unsigned int  ts_status;
  182.     
  183.     ret = TryOneWireSession(0x40U, res);
  184.     y =  ((res[3] >>   4U) << 8U) + res[2];
  185.     x =  ((res[3] &  0xFU) << 8U) + res[1];
  186.     
  187.     pressed = (x != 0xFFFU) && (y != 0xFFFU);
  188.     x1= ((x-200)*480/(3880-200));
  189.     y1= ((3772-y)*272/(3772-324));
  190.     //ts_status=((x1 << 16) | (y1)) | (pressed << 31);
  191.     
  192.     Uart_Printf("ADx: %04d  , ADy: %04d ,pressed: %04d\n",x1,y1,pressed);
  193.     return ret;
  194. }


从UBOOT中搬过来的,在裸机程序里可以直接用,可以控制背光,获取触摸屏的X,Y值。
级别: 新手上路
UID: 78
精华: 0
发帖: 15
金钱: 90 两
威望: 15 点
贡献值: 0 点
综合积分: 30 分
注册时间: 2008-02-09
最后登录: 2011-10-10
1楼  发表于: 2011-06-16 17:04
顶一下,加油
级别: 新手上路
UID: 47214
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2011-05-20
最后登录: 2011-07-21
2楼  发表于: 2011-06-16 17:05

 回 1楼(yjc99) 的帖子

ding ge
不懂就问,懂就答,都不懂,问神!
级别: 侠客
UID: 30116
精华: 0
发帖: 105
金钱: 525 两
威望: 105 点
贡献值: 1 点
综合积分: 210 分
注册时间: 2010-10-12
最后登录: 2020-03-10
3楼  发表于: 2011-06-16 17:12
收藏一下,
菜鸟在路上
级别: 圣骑士
UID: 42749
精华: 6
发帖: 241
金钱: 1530 两
威望: 306 点
贡献值: 6 点
综合积分: 602 分
注册时间: 2011-04-11
最后登录: 2016-07-19
4楼  发表于: 2011-06-16 17:18
说明一下
头文件 one_write.h 没有用,可以去掉
其他文件没有请看这个帖子的的源程序,我工程有点大了,传不上去
http://www.aiothome.net/read.php?tid-12820.html
级别: 骑士
UID: 14419
精华: 1
发帖: 183
金钱: 995 两
威望: 199 点
贡献值: 1 点
综合积分: 386 分
注册时间: 2010-02-08
最后登录: 2014-04-13
5楼  发表于: 2011-06-19 03:32
精彩!谢谢了。
我思故我在
级别: 侠客
UID: 11698
精华: 0
发帖: 61
金钱: 310 两
威望: 62 点
贡献值: 0 点
综合积分: 122 分
注册时间: 2009-12-18
最后登录: 2016-04-09
6楼  发表于: 2011-06-29 09:57
精彩!谢谢了。
级别: 侠客
UID: 44311
精华: 0
发帖: 138
金钱: 710 两
威望: 142 点
贡献值: 0 点
综合积分: 276 分
注册时间: 2011-04-24
最后登录: 2014-10-14
7楼  发表于: 2011-06-29 12:27
学习!
掌控ARM,前途无疆!
级别: 侠客
UID: 50307
精华: 0
发帖: 67
金钱: 345 两
威望: 69 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2011-06-21
最后登录: 2012-05-27
8楼  发表于: 2011-07-06 08:18
学习下。
级别: 新手上路
UID: 49230
精华: 0
发帖: 40
金钱: 200 两
威望: 40 点
贡献值: 0 点
综合积分: 80 分
注册时间: 2011-06-09
最后登录: 2011-10-26
9楼  发表于: 2011-07-06 20:27
rTCNTB3 = (S3C6410_PCLK / SYS_TIMER_PRESCALER / SYS_TIMER_DIVIDER / SAMPLE_BPS - 1);    请楼主讲解哈这条命令呗   没看懂 谢谢
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go