基于MeeGo的电容式触摸屏驱动设计

时间:2012-05-23来源:网络

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设备支持的事件类型

通过set_bit()告诉所支持的事件类型,触摸屏的事件类型代码为EV_ABS(0x03)。

(3)电容触摸屏参数设置

由input_set_abs_params()函数完成,代码如下:

input_set_abs_params(input,ABS_X,0,960,0,0);

//屏幕分辨率为960×640

Input_set_abs_params(input,ABS_Y,0.640,0,0);

//X坐标范围0~960

Input_set_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()和close()函数。调用input_dev*input_allocate_device(void)进行输入设备分配;调用set_bit(EV_ABS,input_evbit)来设置触摸屏事件;调用input_set_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,然后才对数据读取。

1 2 3

关键词: 驱动 设计 触摸屏 电容 MeeGo 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版