引言
随着人们对操控要求的不断提高,市场上出现了越来越多的高端手机、平板
电脑,这些产品共同的特点就是给人们提供了非常便利的操控方式,尤其是电容
触摸屏的使用,它能很好地实现多点触控功能。多点触控技术是当今炙手可热的
技术,它让人们的生活方式得到了前所未有的改变。电容触摸屏已经成为高端手
机的标配,如苹果的iPhone以及HTC Motorola的一些高端手机,虽然目前电
容屏的价格较贵,但随着工艺的提高,其价格必定会下降,再加上其给用户带来
的丰富体验,电容触摸屏的使用必将越来越广泛。M15英文 eeGo是Intel和Nokia公
司合作开发的开源操作系统,基于Linux内核,其良好的开源性为驱动程序的小学生励志故事 开
发提供了很好的基础条件。本设计在MeeGo1.1版本下,并基于Linux 2.6.35
内核来讨论实现电容式触摸屏的驱动开发技术。
1 电容触摸屏原理
电容式触摸屏是利用人体的电流感应工作的,分为表面电容式和投射电容
式,前者不能识别多点,后者可以识别多点,因此设计采用投射电容式触摸屏。
投射电容式触摸屏是利用触摸屏电极发射出静电场线而工作的,分为交互电容和
自我电容。设计采用的是交互电容式触摸屏。它是在玻璃表面用ITO(氧化铟锡)
制作横向与纵向的电极,两组电极交叉之处将会形成电容,即这两组电极分别构
成了电容的两极。
当电容屏被手指触摸时,手指就会吸收一个很小的电流,从而改变政府的性质 了触摸点
附近电极之间的藕合,这就会改变这两个电极之间的电容量。检测投射式电容屏
大小时,横向的电极依次发射信号,纵向的所有电极同时接收信号,这样就能得
到两电极交汇点的电容值大小,也就是整个触摸屏平面的电容大小。可以据此算
出每一个触摸点的坐标,图1为投射式电容屏的等效电路示意图。
2 Linux输入子系统
Linux输入子系统(以下简称输入子系统)是基于内核对象kobject实现的,
应用于Linux 2.6.35内核中。凭借该机制内核通过输入子系统向用户空间输出
设备的各类消息,方便了对设备的管理。输入子系统由系统核心层、驱动层和事
件处理层三部分组成。一个输入事件如鼠标移动、键盘按键按下等操作通过驱动
层、系统核心层、事件处理层到达用户空间,传给应用程序。
这样在设计驱动程序时只需要考虑驱动层的实现就可以了,减少了工作量,
降低了设计难度。另外基于子系统的设计提高了驱动程序的可移植性和可适应性,
因为基于子系统的驱动程序设计不用考虑向上层报告输入设备的接口没计,此工
作由输入子系统来完成,而输入子系统对上层的接口具有通用性,可以使驱动程
序的使用范围得到扩展。图2是Linux输入子系统的框架图。
3 触摸屏驱动程序设计
3.1 触摸屏驱动工作原理
本设计重在提出触摸屏驱动的整体设计方案,该设计流程也适用于其他触
摸屏驱动设计开发。此设计可以采用SPI总线作为触摸屏和处理器的接口,硬件
连接示意图如图3所示。TOUCH SCREEN是电容式触摸屏,可采用FT5201电
容式全屏触摸芯片,INT是中断引脚,当触摸屏被触摸时,通过INT引脚触发中
断处理程序,CPU可采用Intel公司的Atom D510处理器。
SPI总线是一种高速的、全双工、同步的通信总线,以主从方式工作,有4
根线分别是SDI(数据输入)、SDO(数据输出)、CLK(时钟)、CS(片选)。
SPI总线为了与外设进行企鹅的故事 数据交换,其输出串行同步时钟相位和极性可以根据外
设工作要求进行配置。时钟相位(CPHA)能够配置用于选择两种不同的传输协
议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升
或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或
下降)数据被采样。时钟极性(CPOL)对传输协议没有重大的影响,如果CPOL=秀才翘尾巴打一字 0,
串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为
高电平。
3.2 驱动程序软件设计
依托Linux输入子系统架构,驱动程序的设计需要完成以下工作。
(1)分配、注册、注销input设备
各个接消化腺的功能 口函数如下:
◆分配函数为struct input_dev*input_allocate_device(void);
◆注册函数为int input_register_device(struct input_dev*devr);
◆注销函数为void input_unregister_device(struct input_dev*dev)。
(2)设置input设备支持的事件类型
通过t_bit()告诉所支持的事件类型,触摸屏的事件类型代码为EV_ABS
(0x03)。
(3)电容触摸屏参数设置
由input_t_abs_params()函数完成,代码如下:
input_t_abs_params(input,ABS_X,0,960,0,0);
//屏幕分辨率为960640
Input_t_abs_params(input,ABS_Y,0.640,0,0);
//X坐标范围0~960
Input_t_abs_params(input,ABS_MAJOR,0,255,0,0);
//Y坐标范围0~640
(4)上报输入事件
触摸屏被触摸感应时,通过input_report_abs()函数上报发生的事件及
坐标值。
3.3 驱动设计的主要函数
(1)void spi_init()函数
在该函数中通过spi_register_driver(strcut spi_driver*drv)来注册触摸
屏SPI接口。
(2)Touch_probe()函数
在这个函数中,会对SPI总线的相关参数进行配置,并注册open()和
clo()函数。调用input_dev*input_allocate_device(void)进行输入设备
分配;调用t_bit(EV_ABS,input_evbit)来设置触摸屏事件;调用
input_t_params()设置坐标范围及接触点主轴长度范围;最后调用
input_register_device(struct input_dev*dev)把触摸屏注册为输入子系统设
备。
(3)触摸屏中断注册及中断处理函数
request_irq(TOUCH IRQ,Touch interrupt,0,“touch”,NULL)
为中断函数注册,其中Touch_interrupt是中断处理函数。当触摸屏有感应时将
拉低INT引脚,此时便触发中断处理函数Touch_interrupt.该中断函数调用
intput_report_abs()将采集到的坐标数据上报给输入子系统,当为单点触摸
时,上报该触点;当为多点触摸时,依次将每个点的坐标上报。这里为了消除抖
动带来的误操作,在中断处理程序中启用了一个定时器init_timer(),进入中
断后将延时5 ms,然后才对数据读取。
3.4 数据的处理
电容式触摸屏支持多点识别,所以必须要处理好多点数据的采集,为此将采
集到的数据放到事先分配好的缓存read_data[]中。该缓存存有触点的个数以
及各个触点的坐标值,为了保证每一点的准确性和完整性,需要用内核函数
input_mt_sync()进行同步。具体的读取代码如下:
结语
多点触控技术的使用将成为这个时代的标志。本文基于MecGo平台,对电
容屏的原理及驱动开发进行了详细的分析讨论,并基于Linux输入子系统的框架
开发驱动,减少了驱动开发的工作量,提高了程序的可移植性。在此驱动基础上,
并结合MeeGo提供的多点触摸界面框架(MeeGo Touch UI Framework,
MTF),就可以实现多点触控的功能。
本文发布于:2023-04-20 06:09:38,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/505536.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |