- 3
- 0
- 约1.58万字
- 约 18页
- 2016-09-25 发布于河南
- 举报
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;
? ? ?
您可能关注的文档
- 鼠标钩子回调函数反汇编代码(左键单击处理过程).doc
- (5-6)护肤品FAB法则180mins.ppt
- (5.29)新目标七年级英语(下)复习提纲.doc
- (优秀)八年级下册第四单元---He said I was hard-working..doc
- (复习一般过去式的被动语态).ppt
- (外研·全国)2015届九年级英语复习课件第1课时 预备级-Module4七年级上册(共40张PPT).ppt
- 0224voa.doc
- 03-生活常规good manners.doc
- 07-08学年2学期A卷.doc
- 07EC-5 增减词.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 时速160公里动力集中动车组动力车(177页).pptx VIP
- 全国李氏家族字辈.pdf VIP
- 2025储能场站运营的价值定位、运营模式和收益示例-202508v3.pdf VIP
- 小学科学《斜面》优质课件.docx VIP
- 串联型感应加热电源的自动负载匹配技术.pdf VIP
- 2025年新课标《义务教育数学课程标准(2022年版)》测试题及答案.docx VIP
- 老年人谵妄中西医结合诊疗专家共识.pdf VIP
- 膨胀土基坑复合土钉墙试验研究.pdf VIP
- 2021年江苏省无锡市天一高级中学高二物理下学期期末试卷含解析.docx VIP
- 《贵州省公路工程施工监理电子招标文件示范文本(试行)》2025.docx VIP
原创力文档

文档评论(0)