基于TQ2440和Linux的触摸屏的驱动研究

发布者:Qingliu2022最新更新时间:2012-08-14 来源: 微型机与应用 关键字:TQ2440  Linux  触摸屏 手机看文章 扫描二维码
随时随地手机看文章

嵌入式技术在工业和日常生活中变得越来越普及,触摸屏作为交互终端已经逐渐取代键盘成为嵌入式系统的输入设备。使用TQ2440开发板,通过对嵌入式Linux内核中触摸屏驱动的研究,编写和移植了触摸屏的驱动程序,校准之后触摸屏可以正常使用。

随着信息查询技术的发展,触摸屏因具有坚固耐用、反应速度快、节省空间、易于交流等优点,而得到了广泛应用[1]。触摸屏作为一种新兴的电脑输入设备,是目前最简单、方便的一种人机交互设备。

1 硬件简介

1.1 TQ2440开发板简介

天嵌公司生产的TQ2440开发板,微处理器采用Samsung S3C2440AL,板载64 MB SDRAM、256 MB Nand Flash、2 MB Nor Flash,板载5线异步串行口(UART0)、100 Mb/s DM9000网卡、USB HOST接口、USB Device接口和一个SD卡接口,集成了4线电阻式触摸屏接口和JTAG接口等,音频接口采用芯片UDA1341,立体声音频输出,可录音。

1.2 S3C2440处理器简介

S3C2440是由三星公司推出的16/32 bit RISC微处理器,最高主频可达533 MHz,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。处理器内部集成SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C总线、I2S总线、SD接口、PWMtimer、触摸屏接口、8通道10 bit A/D控制器和camera接口等,很便于一般开发。

1.3 触摸屏

按照触摸屏的工作原理和传输信息的介质一般可分为4种,分别为电阻式、红外线式、电容感应式以及表面声波式。本次设计采用的是东华3.5英寸触摸屏,为4线电阻式触摸屏。具体参数为:型号: WXCAT35-TG3#001F;尺寸:103 mm×83 mm;显示面积:70.08 mm(H)×52.56 mm(V);显示颜色:16.7兆色分辨率;对比度:300:1;亮度:320 cd/m2;电源:5 V电压供电。

电阻式触摸屏利用压力感应进行控制,由触摸检测部件和触摸屏控制器组成。触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,并将触摸位置信息送到触摸屏控制器;触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收来自CPU的命令并加以执行。触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层氧化铟(OTI),上面再覆盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层OTI,在两层导电层之间有许多细小(小于1/1 000)的透明隔离点把它们隔开绝缘。当手指接触屏幕时,两层OTI导电层将出现一个接触点,因其中一面导电层接通Y轴方向的5 V均匀电压场,使得侦测层的电压由零变为非零,控制器侦测到这个接通数据后,进行 A/D转换,并将得到的电压值与5 V相比较,即可得出触摸点的Y轴坐标。同理可得出X轴的坐标。

S3C2440的触摸屏接口包括触摸触点控制逻辑和有中断产生逻辑的ADC接口逻辑,可以控制或选择触摸屏触点用于XY坐标的转换。触摸屏接口为了完成相应的工作,具有4种工作模式[2]:

(1)正常转换模式:此模式与通用的AD转换模式相似,可以在ADCCON(ADC控制寄存器)中设置,在ADCDAT0(ADC数据寄存器0)中完成数据读写。

(2)X/Y坐标各自转换:触摸屏控制器支持两种转换模式,X/Y坐标各自转换与X/Y坐标自动转换。各自转换是在X模式下,将X坐标写入ADCDAT0后产生中断;在Y模式下,将Y坐标写入ADCDAT1后产生中断。

(3)X/Y坐标自动转换:在此模式下,触摸屏控制器先后转换触摸点的X坐标与Y坐标。当X坐标与Y坐标都转换完成时,中断控制器产生中断。

(4)等待中断模式:当触摸笔按下时,触摸屏产生中断(INT_TC)。等待中断模式必须将寄存器rADCTSC设置为0xd3;在触摸屏控制器产生中断以后,必须将此模式清除。

如果GCLK是50 MHz且预分频器的分频值设置为49 MHz,10 bit的转换时间按下式计算:

A/D转换频率=50 MHz/(49+1)MHz=1 MHz

转换时间=1/(1 MHz/5个周期)=1/200 kHz="5" ?滋s,可见转换时间很短。[page]

2 触摸屏驱动程序

2.1 建立嵌入式Linux系统开发环境

建立此开发环境的步骤为:

(1)在Windows XP SP3系统下安装虚拟机vmware5.5.3,在虚拟机里安装Redhat9.0系统。在Redhat9.0系统下编译开发板所需的镜像和文件,使用虚拟机工具实现了Windows和Redhat的文件共享,在Windows系统下可以直接下载镜像和文件到开发板上。

(2)使用Windows XP SP3自带的超级终端,并使用串口线连接PC和开发板。这样就可以在PC上对开发板进行相关的操作。

(3)本次实验开发板使用的是Linux2.6.30.4内核,而Redhat9.0系统是2.4.20.8内核,所以需要下载适合开发板的编译器。下载最新版本的支持EABI技术的交叉编译器(本次实验使用的是EABI_4.3.3_2009版本),复制到Redhat9.0系统目录/opt/EABI_4.3.3_2009/下,打开系统文件/etc/profile(可在终端使用命令vim /etc/profile),添加相应语句(本次实验使用vim命令打开profile文件,在第20行添加语句pathmunge/opt/EABI_4.3.3_2009/4.3.3/bin)让编译器生效,这样就可以在PC上交叉编译开发板所需要的文件。至此开发环境已经建立。

2.2 Linux内核的移植

本次实验使用的boatload是天嵌公司自己开发的u-boot,用J-TAG烧写方式写入NOR Flash,然后便可以使用u-boot自带的USB下载(需要在Windows下安装USB下载驱动程序)功能下载开发板上需要的Linux内核镜像了,这样方便而且高效。下载Linux2.6.30.4内核源代码,复制到Redhat9.0系统目录/opt下,并解压。在目录/opt/linux2.6.30.4/目录下便可以进行修改和编译开发板上需要的内核镜像。在移植触摸屏驱动之前,需要移植板载256 MB NAND Flash的驱动、yaffs文件系统,这样便完善了串口驱动程序,最后移植LCD屏的驱动。

2.3 触摸屏驱动程序

Linux系统将存储器和外设分为字符设备、块设备、网络设备三大类。触摸屏属于字符设备,以串行顺序依次进行访问。在Linux系统中,以文件名的形式在/dev目录下建立触摸屏设备文件, 应用程序可以通过系统调用函数open()打开此文件,建立起与设备的连接,然后通过函数read()、write()、release()、ioctl()等常规的文件操作对目标设备进行操作。Linux为了把所有的设备当作文件系统进行管理,为所有的文件及设备文件定义了统一的操作函数接口file_operations,每个文件都通过指向file_operations结构的指针字段与它自己的函数集相关联。file_operations中成员为一系列指向各操作函数的指针,这些操作函数主要负责系统调用的实现,不同类型的设备文件系统有不同类型的file_operations结构[4]。触摸屏的 file_operations 结构定义为:
static struct file_operation s3c2410_fops=
{
  owner: THIS_MODULE,
  open: s3c2410_ts_open,//打开
  read: s3c2410_ts_read,//读坐标
  release:
s3c2410_ts_release,
  #ifdef USE_ASYNC
Fasync:s3c2410_ts_fasync,//fasync()函数
  #endif
  poll:s3c2410_ts_poll,//轮询
}

[page]

结构中s3c2410_ts_open函数为file_operations中函数指针open所指向的函数,即打开触摸屏设备时 open操作即为调用s3c2410_ts_open函数,完成触摸屏初始状态参数的设置、消息队列初始化等。read所指向s3c2410_ts_

read函数主要是向消息队列提供触摸屏坐标采集数据,以供应用程序调用。s3c2410_ts_poll为查询设备的可读写状态,s3c2410_ts_release则在释放设备时调用。

在触摸屏驱动程序中定义了一组宏,用于控制触摸屏和ADC进入不同的工作模式,如等待中断、X/Y位置转换等。定义了触摸屏结构体TS_DEV包含一个缓冲区、自旋锁、等待队列和fasync_struct指针,结构为:
typedef struct
{
  unsigned int penStatus;
  TS_RET buf[MAX_TS_BUF]; /*缓冲区*/
  unsigned int head,tail; /*缓冲区头和尾*/
  wait_queue_head_t wq; /*等待队列*/
   spinlock_t lock;
  #ifdef USE_ASYNC
struct fasync_struct *aq;
#endif
  struct cdev cdev;
}TS_DEV;

触摸屏结构体中的TS_RET包含屏幕的X、Y坐标和触摸状态信息(PEN_DOWN、PEN_UP),这个信息会在用户读取触摸屏信息时复制到用户空间,结构为:
typedef struct
{
  unsigned short pressure;
  unsigned short x;//X坐标
  unsigned shorty;//Y坐标
  unsigned short pad;
}TS_RET;

触摸屏工作时会产生两类中断:一类是触点中断(INT_TC),一类是X/Y位置转换中断(INT_ADC)。使用函数s3c2410_isr_tc用来处理触摸屏的触点/抬起中断,在触点中断发生后,若之前处于PEN_UP状态,则应该启动X/Y位置转换;当处于PEN_DOWN状态时,则调用函数tsEvent完成缓冲区的填充、等待队列的唤醒和异步通知信号的释放。使用函数s3c2410_isr_adc来处理X/Y位置转换中断,当X/Y位置转换中断发生后,读取X、Y的坐标值,填入缓冲区。在函数s3c2410_isr_adc中通过调用函数s3c2410_get_XY来获取X、Y坐标的。最后由函数s3c2410_ts_poll实现轮询接口,将等待队列添加到结构体poll_table中,当缓冲区有数据时,返回资源可读取标志,否则返回0。函数s3c2410_ts_fasync完成触摸屏对应用程序的异步通知。在程序的最后,由函数__init s3c2410_ts_init和__exit s3c2410_ts_exit完成从内核中加载和卸载触摸屏驱动程序,加载函数__init s3c2410_ts_init还需要完成申请设备号、添加cdev、申请中断、设置触摸屏控制引脚等多项工作,卸载函数_exit s3c2410_ts_exit完成释放设备号、删除cdev、释放中断等工作[3]。

2.4 实验操作过程

将编写好的触摸屏驱动ts.c文件拷贝到内核源码目录“drivers/input/touchsreen/”下,并修改同目录下的“Kconfig”和“Makefile”文件。在内核配置单中添加触摸屏编译配置选项,修改Kconfig文件的第468行,添加如下内容:

[page]

config TOUCHSCREEN
tristate "TouchScreen input driver"
depends on ARCH_S3C2410 && INPUT &&
INPUT_TOUCHSCREEN
help
Say Y here if you have the TouchScreen.
and depends on ADC
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be calLED ts.
  在目录的Makefile文件中添加触摸屏的编译条目,添加内容如下:
  obj-$(CONFIG_TOUCHSCREEN) += ts.o
  内核配置单的选择:
Device Drivers --->
Input device support --->
  [*]   Touchscreens --->
  <*>   TouchScreen input driver

配置完毕后,保存配置单,然后编译内核,再将编译好的镜像下载到开发板中运行。

2.5 触摸屏的校准

TQ2440出厂时使用的是Linux2.6.25.8内核,触摸屏已经完成校准,但本次实验重新使用了最新的Linux2.6.30.4内核,所以需要重新校准。移植好内核之后,下载了天嵌公司已经做好的QT图形界面到开发板,并重启开发板,校准时只需要将触摸笔点中十字架的中心,然后进行5点校准,完毕后触摸屏就可以正常使用。如图1所示。

49.jpg

触摸屏因其使用方便、快捷,而得到广泛应用。Linux系统因其源代码公开、成本低廉、裁减性好、高效、灵活等特点,在嵌入式领域得到了很好的发展和应用。本文介绍了触摸屏的工作原理,对嵌入式Linux系统内核源码的触摸屏驱动做了深入探讨,编译和下载Linux内核到开发板上运行,并且移植了QT图形界面,触摸屏校准之后,使用情况良好。

参考文献
[1] 吴金宏.触摸屏技术及其应用[J].家庭电子,1998,9(4):96-99.
[2] 王立凤.触摸屏技术及其应用[J].电子工业专用设备,2006,35(1):63-66.
[3] 宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008.

关键字:TQ2440  Linux  触摸屏 引用地址:基于TQ2440和Linux的触摸屏的驱动研究

上一篇:基于AT91SAM9260的智能保密柜设计方案
下一篇:基于ARM11的无线视频

推荐阅读最新更新时间:2024-03-16 13:05

Linux之父炮轰英特尔Spectre修补是全然的垃圾
集微网消息,Spectre漏洞阴影余波荡漾,Linux操作系统机器安装修补程序后频频出包。 Linux之父Linux Torvalds周一在Linux群组论坛公开炮轰,英特尔提供给Linux的Spectre修补程序是全然的垃圾(complete and utter garbage)。   Linux Torvalds认为英特尔在修补Spectre上的做法相当糟,采用间接分支限制推测会造成系统效能大幅下滑,因此英特尔不默认启用这项功能,却将责任推诿至他人身上,等于试图将垃圾推给他人。 Torvalds指出,从推测执行控制CPU ID这件事显示,英特尔在Meltdown上做了对的事,但这也不令人意外,因为修补并不是太难,而且也是比较明
[手机便携]
全志推出基于玄铁C906的Linux SBC,售价12美元
本文来源CNX-Software,作者Jean-Luc Aufranc 阿里巴巴在2019年推出了玄铁910 RISC-V内核(又名XT910),具有强大功能,最多支持16个内核。但在2020年的更新显示,该公司计划开发一个完整的RISC-V核心系列产品,用于从低功耗微控制器到服务器SoC的广泛应用。 当时,我只是假设公司计划保留他们的核心,但时间证明我错了,因为阿里巴巴负责开发RISC-V核心的子公司平头哥开始与全志科技合作开发开源处理器,很快就会发布低成本的支持Linux的RISC-V SBC(单板电脑)。 据我所知,公司与全志科技签订了保密协议,但根据现阶段可用的公开信息,售价12.5美元的矽速科技(Sipee
[嵌入式]
全志推出基于玄铁C906的<font color='red'>Linux</font> SBC,售价12美元
联想回应反对预装国产系统:谣言 一直支持国产
  5月21日晚间消息,针对网传“ 联想 在中央某采购中心关于预装国产操作系统的投票上投了反对票”的消息。 联想 发布声明称,对此谣言表示强烈愤慨和谴责,同时取证并保留追究法律责任的权利。下面就随嵌入式小编一起来了解一下相关内容吧。    联想 集团表示,网上所谓的国产操作系统投票事件,是发生在中央国家机关政府采购中心(简称央采中心)部门近日召开的2018年度计算机批量集中采购供应商会上。在此次会上,联想集团提出的建议是使用单独国产 Linux 系统整机方案,包括台式机和笔记本。该建议形成了会议意见,并被央采中心向上级主管部门报批。   以下是联想声明全文:   联想集团关于所谓操作系统投票事件的基本事实说明   网上所谓的国产
[嵌入式]
基于嵌入式Linux操作系统的可视化安全倒车系统
  引言   电子信息与数字图像处理技术目前已被广泛地应用在各个领域,车载系统的信息化已成为现代汽车业的重要标志。现在的倒车雷达系统可以为驾驶者提供许多帮助,多数采用超声波测距技术,可以直接显示出车尾与障碍物之间的距离。但由于超声波的散射特性,如果地面有尖锐的突起或存在横在半空的棱角状物体,系统就不能有效地“察觉”。假如能为现有的倒车系统增加一个可视功能,那么驾驶员在倒车时不必回头就可清楚车后的情况。本文设计了一种可视化安全 倒车 系统,该系统采用 嵌入式Linux操作系统 内核驱动 USB摄像头实现车后状况实时监控,通过判断超声波测距是否达到阈值来启动语音报警功能。   1 系统方案设计   如图1所示,系统由主控模块、超声
[单片机]
基于嵌入式<font color='red'>Linux</font>操作系统的可视化安全倒车系统
ARM-Linux GPIO操作事宜
1.在嵌入式Linux GPIO表示为 S3C2410_GPx(n) ,其中x的取值为 A,B,C,D,E,F,G,H..... ,表示那个GPIO口,n的取值为 1,2,3,..... 表示第几个管脚。 例如 B口的第六管教:S3C2410_GPB(6) D口的第12管教:S3C2410_GPD(12) ..... 注 这些宏定义在arch/arm/mach-s3c2410/include/mach/gpio-nrs.h,使用#include mach/gpio-nrs.h 以下包含#include mach/hardware.h linux/gpio.h mach/regs-gpio.h 2.设置gpio的工作模
[单片机]
触摸屏技术及其技巧解析
前言 如果说外观以代表了时尚、活力、向上的神韵。那么,产品本身的功能特点则代表了触控产品形态的表现。只有形神兼具的产品,才能真正获得消费者的认可。能给人带来新鲜的感受以及留下好用的印象,这边对功能特点做出了好的诠释。 目前,触摸屏的应用范围从以往的银行自动柜员机、工控计算机等小众商用市场,迅速扩展到手机、PDA、GPS(全球定位系统)、MP3、MP4、甚至平板电脑(UMPC)等大众消费电子领域。展望未来,触控操作简单、便捷、人性化的触摸屏有望成为用户与产品互动的最佳界面,从而迅速普及。 触控技术的深入剖析 搞清设计所需是触控产品设计最重要的第一步。触控屏供应链上的许多提供商通常提供许多令人迷惑的不同组件,而更多的时
[嵌入式]
ARM开发之linux字符型驱动的编写----LED驱动为例
相应头文件: #include #include #include #include #include #include #include #include #include 开发步骤: 0.驱动开发的简单架构 1.定义设备结构体 2.申请设备号 3.定义文件操作集 4.设备初始化 5.注册设备 6.申请物理内存区 7.通过映射物理地址来获得相应虚拟地址 8.创建设备的类 9.创建设备文件结点 10.应用程序的编写 11.代码演示 0.驱动开发的简单架构 驱动代码虽然也是用C语言编写,但没有main函数。取而代之有起始宏( module_init()
[单片机]
ARM开发之<font color='red'>linux</font>字符型驱动的编写----LED驱动为例
明年电容触摸屏技术是否会迎来市场井喷?
  得益于苹果iPhone的热?卖,投射式电容触摸屏成为众多用户和开发者关注的热门技术,也有大量的供应商和设计者计划开始使用电容触摸屏。然而,随著对新技术关注度的慢慢沉淀,电容触摸屏在设计上和商业上需要考虑的各种实际问题也开始浮现。与此同时,纯平电阻式触摸屏工艺(TouchWindow)的完善使电阻式触摸屏的成本和外观更具竞争力,一些新兴电阻触摸屏技术已诞生,比如支持多点触摸感应的数字式电阻触摸屏、支持多种手势的模拟矩阵式电阻触控等等。   不过,由于电容触摸屏天生的高透光率、经久耐用、优秀的用户体验及支持多点触摸等优势,它正被越来越多的手机厂商所采用,并且即将推出的Windows7将推动电容触摸屏从小屏幕走向中屏幕,进入更多的
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved