Linux下触摸屏驱动.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下触摸屏驱动

Linux下的触摸屏驱动 一.触摸屏理论概述 对于触摸屏驱动,我们主要需要掌握触摸屏驱动代码和应用层测试代码。下面讲的是基于Mini2440的触摸屏驱动,现在的驱动我们都将设备和驱动分离,挂在平台设备总线上,让设备和驱动去匹配。而我们在linu2.6.32.2内核版本中的触摸屏驱动仍然没有将设备和驱动分离,这样就不存在匹配问题,这种现象其实我们并不陌生,在我们学习驱动的前期,都会研究简单字符驱动代表LED驱动,那个驱动就是把设备和驱动写在了一起。总结下,驱动和设备可以分离也可以不分离,建议分离,而本触摸屏驱动没有分离设备和驱动,有兴趣可以将设备和驱动进行分离。 先说明下触摸屏的工作原理,当有人在触摸屏上按下触笔时,触摸屏的四个引脚会产生不同的电压值,这样触摸屏控制器就能检测到这种变化,从而产生INT_TC中断,表示触笔按下。然后在得到CPU指示的情况下,触摸屏控制器可以根据四个引脚上产生的不同电压值进行AD转换,从而计算出X和Y坐标的数值,并在将这两个值保持到其内部寄存器后,发出INT_ADC中断,表示坐标转换已完成,从而软件就可以读取按下触笔的位置。 二.触摸屏驱动分析 本驱动分析很有特点,我对触摸屏驱动的分析是按照整个触摸事件的执行顺序进行代码分析的,有的函数由于每次被执行完成的任务不同,所以需要多次分析。同时,我把整个触摸事件的来龙去脉也都说的很清楚了。 驱动分析/driver/input/touchscreen/s3c2410_ts.c static int __init s3c2410ts_init(void) { ? ? ? struct input_dev *input_dev; ? ? ? adc_clock = clk_get(NULL, adc);? //获取时钟 ? ? ? if (!adc_clock) { ? ? ? ? ? ? ? printk(KERN_ERR failed to get adc clock source\n); ? ? ? ? ? ? ? return -ENOENT; ? ? ? } ? ? ? clk_enable(adc_clock);? //使能时钟 ? ? ? base_addr=ioremap(S3C2410_PA_ADC,0x20);? //物理地址转为虚拟地址 ? ? ? if (base_addr == NULL) { ? ? ? ? ? ? ? printk(KERN_ERR Failed to remap register block\n); ? ? ? ? ? ? ? return -ENOMEM; ? ? ? } ? ? ? s3c2410_ts_connect();? //触摸屏端口配置 ? //使能预分频,分频系数为0xff ? iowrite32(S3C2410_ADCCON_PRSCEN| S3C2410_ADCCON_PRSCVL(0xFF),base_addr+S3C2410_ADCCON); ? ? ? iowrite32(0xffff,? base_addr+S3C2410_ADCDLY); //延时 ? //检查光标按下中断信号,等待中断 ? ? ? iowrite32(WAIT4INT(0), base_addr+S3C2410_ADCTSC); ? ? ? input_dev = input_allocate_device();? //分配input设备 ? ? ? if (!input_dev) { ? ? ? ? ? ? ? printk(KERN_ERR Unable to allocate the input device !!\n); ? ? ? ? ? ? ? return -ENOMEM; ? ? ? } ? ? ? dev = input_dev; ? ? ? //支持按键事件、坐标事件 ? ? ? dev-evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS); ? ? ? dev-keybit[BITS_TO_LONGS(BTN_TOUCH)] = BIT(BTN_TOUCH); ? ? ? //对于X轴范围是0-ox3ff,数据误差是0,中心平滑位置是0 ? ? ? input_set_abs_params(dev, ABS_X, 0, 0x3FF, 0, 0); ? ? ? input_set_abs_params(dev, ABS_Y, 0, 0x3FF, 0, 0); ? ? ? input_set_abs_params(dev, ABS_PRESSURE, 0, 1, 0, 0); ? ? ? dev-name = s3c2410ts_name; ? ?

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档