您的位置 首页 数字

S5PV210(TQ210)学习笔记——触摸屏驱动编写

电阻式触摸屏的驱动比较简单,可以采用输入子系统驱动框架来编写,而电容式触摸屏的驱动程序相对比较复杂,因为电容触控一般采用I2C接口控

电阻式触摸屏的驱动比较简单,能够选用输入子系统驱动结构来编写,而电容式触摸屏的驱动程序相对比较复杂,由于电容触控一般选用I2C接口操控,我在自己编写电容触控驱动的时分抑郁了好几天,当然,并不是由于I2C电容触控驱动繁琐,主要是天嵌TQ210的触摸屏驱动程序是以模块方法供给的,并不开放源代码,也没有供给触控的芯片手册,我曾经过技术咨询群和电话咨询的方法咨询过天嵌相关人士,想跟他们讨取触控协议而不要所谓的触控驱动程序源码,但受保密协议约束不供给源码及手册。咱们不去追查这些无聊的问题,只需找到触控芯片的类型并依据触控芯片类型找到对应的手册,然后就能够自己编写所谓的电容式触摸屏驱动了。

一 触控芯片剖析

首要,卸下触摸屏的四个螺丝并翻过触摸屏来调查,能够在在触摸屏排线上看到触控芯片,仔细调查芯片类型(假如看不清能够用放大镜合作手电筒观看),咱们能够看到,TQ210的触摸屏操控芯片是GT811,然后我找到了GT811的芯片手册(这些材料都上传到了我的CSDN资源里,请您支撑一下),有了手册,编写驱动就不难了。

GT811引出了6根脚,分别是VCC、GND、I2CSDA、I2CSCL、INT和RESET,尽管INT脚不是有必要的,可是开发高效省资源的触屏驱动程序往往都选用中止方法,下面是GT811的引脚图:

我用万能表实践测量了一下触控模块的各个引脚,实践线序是GND、SDA、SDL、INT、RESET和VDD。GT811的初始化次序如下:

  1. (1)初始化INT脚为悬浮输入态并初始化RESET脚为输出态,并输出低电平
  2. (2)延时1ms
  3. (3)初始化RESET脚为悬浮输入态,并使能上拉
  4. (4)写入GT811寄存器装备表
  5. (5)依据需要装备INT脚

详细的操作能够拜见代码部分。

二 I2C驱动编写

I2C驱动也是根据总线结构的,不过分为两种,一种是Legacy方法,另一种是New Style方法,其间,Legacy方法在新内核中现已不支撑了,不过韦东山教师的视频中仍是剖析的Legacy方法,New Style方法你能够自己用Source Insight追寻剖析一下,我这儿就不多说了,详细的能够参阅下面的代码。

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. conststaticunsignedshortnormal_address[]={0x5d,I2C_CLIENT_END};
  10. staticunsignedgt811_rst;
  11. staticunsignedgt811_int;
  12. staticstructinput_dev*ts_input;
  13. staticstructworkqueue_struct*wq;
  14. staticstructwork_structwork;
  15. staticstructi2c_client*this_client=NULL;
  16. staticunsignedintstatus=0;
  17. staticinti2c_read_bytes(structi2c_client*client,uint8_t*buf,intlen)
  18. {
  19. structi2c_msgmsgs[2];
  20. intret=-1;
  21. msgs[0].flags=!I2C_M_RD;
  22. msgs[0].addr=client->addr;
  23. msgs[0].len=2;
  24. msgs[0].buf=&buf[0];
  25. msgs[1].flags=I2C_M_RD;
  26. msgs[1].addr=client->addr;
  27. msgs[1].len=len-2;
  28. msgs[1].buf=&buf[2];
  29. ret=i2c_transfer(client->adapter,msgs,2);
  30. returnret;
  31. }
  32. staticinti2c_write_bytes(structi2c_client*client,uint8_t*data,intlen)
  33. {
  34. structi2c_msgmsg;
  35. intret=-1;
  36. msg.flags=!I2C_M_RD;
  37. msg.addr=client->addr;
  38. msg.len=len;
  39. msg.buf=data;
  40. ret=i2c_transfer(client->adapter,&msg,1);
  41. returnret;
  42. }
  43. staticconststructi2c_device_idts_id[]={
  44. {“tq210-ts”,0},
  45. {}
  46. };
  47. staticintts_init_panel(structi2c_client*client){
  48. shortret=-1;
  49. uint8_tconfig_info[]={
  50. 0x06,0xA2,
  51. 0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,0xE2,0x53,0xD2,0x53,0xC2,0x53,
  52. 0xB2,0x53,0xA2,0x53,0x92,0x53,0x82,0x53,0x72,0x53,0x62,0x53,0x52,0x53,0x42,0x53,
  53. 0x32,0x53,0x22,0x53,0x12,0x53,0x02,0x53,0xF2,0x53,0x0F,0x13,0x40,0x40,0x40,0x10,
  54. 0x10,0x10,0x0F,0x0F,0x0A,0x35,0x25,0x0C,0x03,0x00,0x05,0x20,0x03,0xE0,0x01,0x00,
  55. 0x00,0x34,0x2C,0x36,0x2E,0x00,0x00,0x03,0x19,0x03,0x08,0x00,0x00,0x00,0x00,0x00,
  56. 0x14,0x10,0xEC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x40,
  57. 0x30,0x3C,0x28,0x00,0x00,0x00,0x00,0xC0,0x12,0x01
  58. };
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/256206.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部