基于ARM处理器S3C2440和Linux系统的I2C触摸屏

发布者:WiseThinker最新更新时间:2022-12-27 来源: elecfans关键字:ARM处理器  S3C2440  Linux系统  I2C触摸屏 手机看文章 扫描二维码
随时随地手机看文章

0  引言

随着计算机相关技术的发展,ARM嵌入式系统受到越来越广泛的应用,与人们生活的结合也越来越紧密。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于这种嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,可靠性高,不占额外的空间,是最常用的便携式系统的输入设备。特别是电阻式触摸屏,它结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度、高速传输反应、一次校正、稳定性高、不漂移等特点,因而被广泛用于工业控制领域。

1  电阻式触摸屏的工作原理

触摸屏安装在显示屏的前端,主要由触摸屏检测部件和触摸屏控制器两部分组成。按照工作原理和传输信息的介质不同,触摸屏可分为电阻式、电容感应式、红外线式以及表面声波式。其中的电阻式触摸屏是在表面保护层和基层之间覆着2层透明导电层氧化铟,而这2个导电层分别对应x、y轴,它们之间有细微透明绝缘颗粒绝缘。当物品按在触摸屏上时,会产生压力,从而使触摸屏两导电层接通,一旦触摸屏检测部件监测到用户的触摸位置,就将获得的位置信息送入触摸屏控制器TSC2007,并对该写信号进行处理,将电压信号转换成数字信号,同时以中断的方式送至S3C2440处理器,计算出触点坐标。

2硬件结构

TSC2007是美国德州仪器(TI)公司推出的新一代4线制触摸屏控制器,它在与触摸屏配合使用时,一旦检测到笔或手指点触摸在屏上,可迅速得到该点的位置信号,从而达到在触摸屏表面上寻址的目的。

TSC2007是典型的逐步逼近式A/D变换器,其结构以电容再分布为基础,包含了取样/保持功能。TSC2007的引脚与TPSC2003的引脚完全兼容,具有片内温度测量、触摸压力测量和预处理三个功能。TSC2007的I2C接口,以标准模式、高速模式和超高速模式进行数据传输与通讯。为了与其他ARM芯片兼容,设计中没有使用S3C2440内置的A/D通道,而是采用了外扩控制器TSC2007的方法,通过I2C总线方式与S3C2440通信。由于在嵌入式系统I2C总线中,S3C2440是总线上的主机,TSC2007是从机,而I2C系统有2个引脚,分别是串行数据线SDA和串行时钟线SCL。因此,设计中S3C2440的GPE14和GPE15分别作为I2C总线的SCL和SDA线,其触摸屏控制器接口电路如图1所示,图中的SDA和SCL线都是双向的。

3触摸屏的驱动

在Linux系统中,设备驱动程序是一组相关函数的集合,它包括设备服务子程序和中断处理程序。其中的设备服务子程序包含了所有与设备相关的代码,每个设备服务子程序只处理一种设备或者紧密相关的设备,从设备无关的软件中接受抽象的命令并执行它。当执行一条请求时,具体操作是根据控制器对驱动程序提供的接口,并利用中断机制去调用中断服务子程序配合设备来完成这个请求。设备驱动程序利用结构file_operaTIons与文件系统联系起来,设备的各种操作的入口函数放在结构file_operaTIons中,其中包括open()、release()、read()和write()等接口,从而简化了驱动程序的编写工作。这样,应用程序根本不必考虑操作的是设备还是普通文件,可一律视为文件来处理,具有非常清晰统一的I/O接口。其触摸屏的file_operaTIons结构定义如下:


本结构的主要作用是为不同的设备提供一致的接口。如在应用程序中,对不同设备进行读操作都使用read函数,写操作则都使用write函数。因此,编写触摸屏驱动的实际工作并不复杂。

3.1驱动工作流程

首先初始化触摸屏控制器,然后初始化脉宽调制计时器(PWM TIMER),可以选择计时器4为时钟,定义10 ms中断1次,以提供触摸屏采样时间基准,即10 ms触摸屏采样1次。而后映射触摸屏中断向量和定时器中断向量到响应程序,触摸屏中断处理程序是判断触摸屏是否被按下了,若触摸屏被按下,则给全局变量Flag_Trouch赋值为Touch_Down,否则赋值为Touch_Up。若计时器中断处理程序判断Flag_Touch被赋值为Touch_Down,则给全局变量StartSample置位,以控制触摸屏采样。然后系统通过S3C2440_get_xy()获得采样值,对得到的触摸屏的数据进行处理。接下来是对触摸屏的校准,最后是中断的释放和注册模块的卸载。其具体的触摸屏驱动工作流程图如图2所示。

3.2设备初始化模块

设备初始化模块的主要功能是:初始化设备、向内核注册设备等。具体实现函数如下:

初始化模块利用内核提供的request_irq函数,将触摸笔的按下与弹起的中断号进行登记,从而将中断号与中断服务函数联系起来;利用devfs_register_chrdev函数,向系统注册一个字符型设备;最后注册定时器中断,用来控制触摸屏的数据采样。

3.3采样值的获得

首先启动TSC2007的A/D转换。等待一段时间后,调用S3C2440_get_xy ()函数,这个函数的功能是获得触摸屏的位置,首先从TSC2007的一个通道获得x的坐标值,然后在从另一个通道获得y的坐标值,判断返回触摸点坐标值是否在有效范围内,如果在有效范围内则采样标志ts_pressure=1,如果不在有效范围之内,其采样标志ts_pressure=0。read函数中通过调用copy_to_user(buffer,dbuf,length),可将内核空间数据拷贝到用户空间。

3.4采样值的处理

函数Touch_Coordinate Conversion完成触摸屏采样值转换成显示坐标,其中TOUCH_MAX_Y和TOUCH_MIN_Y是触摸屏X坐标采样值的最大和最小值;X坐标同理。若使用的是320×240的TFT屏,则Y坐标的转换程序如下:

3.5触摸屏的校准

在实际的应用中,通常触摸屏是作为与显示屏配合使用的输入设备,需要从触摸屏采样得到的坐标与屏幕的显示坐标做一个映射。文中触摸屏设计采用的是三点校准的方法,与两点校准相比,三点校准的模型考虑到变相和旋转,更接近实际情况。应用中首先选取3个相距较远且不在一条线上的3个作为校准输人的独立采样点,它们相应的触摸屏采样坐标是P0(x0,y0)、P1(x1,y1)、P2(x2,y2),显示坐标是PD0(xD0,yD0)、PD1(xDl,yD1)、PD2(xD2,yD2)。直角坐标平面的两个点P和PD,定义P为触摸屏空间的坐标点,PD为显示屏空间的坐标点,P可以经过旋转、比例和平移得到PD坐标。PD和P点之间存在一次线性关系满足:xD=Ax+By+C,yD=Dx+Ey+F。对于同一个设备,其中的A、B、C、D、E、F为常数,称为校准常数,故只需在触摸屏校准时,解出这6个常数,就可以实现触摸屏空间到显示空间的转换。

3.6中断释放和注册模块的卸载

设计中通过调用s3c2440_ts_cleanup_module0来实现中断的释放和设备的卸载,分别将它们释放在初始化过程中,其申请的IRQ_TIMER4、IRQ_ADC_DONE、IRQ_TC的中断和字符设备的接口函数devfs_register_chrdev ()具体如下:



4结束语

文中基于S3C2440的触摸屏驱动开发,考虑到与其他的ARM芯片兼容性,并没有使用ARM自带的A/D通道,而是外扩了触摸屏控制器TSC2007。对TSC2007的初始化,主要是初始化TSC2007与S3C2440的I2C接口连接,在驱动流程中,如果触摸笔按下就进人中断处理程序,读取x,y坐标,在采样函数中设置了一个copy_to_user(buffer,dbuf,length)函数,将从触摸屏连续测的数据,送入存储区。

结合实际的硬件平台,这个基于嵌入式Linux操作系统下I2C总线接口触摸屏设计,采用的是处理采样数据的方法,同时运用了改进的校准方法,从而使该触摸屏驱动更能满足实际的要求。


关键字:ARM处理器  S3C2440  Linux系统  I2C触摸屏 引用地址:基于ARM处理器S3C2440和Linux系统的I2C触摸屏

上一篇:S3C2410处理器特性
下一篇:基于S3C2410微处理器和Linux实现嵌入式网关的设计

推荐阅读最新更新时间:2024-11-10 21:49

S3C2440+ADS1.2+H_JTAG 实现单步调试
1: 设置H_JTAG如下: 使之出现 2: 在ADS中debug,出现AXD调试界面,设定连接目标版 然后 下载镜像文件 接下来就可单步调试观察 TQ2440上的变化了 现在只会按照别人的操作 ,具体为什么这样做,尤其对那些JTAG 比如 H JTAG JTAG Jlink ...还不清楚
[单片机]
S3C2440学习之存储控制器
1、概述 数据位宽:BANK0:16/32位 其它BANK:8/16/32位 BANK0-BANK5可接ROM、SRAM BANK6-BANK7可接ROM、SRAM、SDRAM BANK0-6的起始地址是固定的,BANK7的起始地址是可调整的 BANK6-7的寻址范围可通过编程调整 所有存储器BANK的访问周期可编程 总线访问周期可通过插入外部wait来延长 支持SDRAM的自刷新和掉电模式 2、功能描述 (1)、BANK0的总线宽度由引脚OM1和OM2的电平信号决定。 (2)、BANK与ROM或SRAM连接时,由芯片的数据输出位宽决定将第几根地址线与芯片的第0根地址线连接,此处 主要是保证字节对齐 (3)、BANK6-
[单片机]
S3C2440-蜂鸣器
ARM驱动蜂鸣器的方式有两种:一种是PWM输出口直接驱动,另一种是利用IO定时翻转电平产生驱动波形对蜂鸣器进行驱动。PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波来进行驱动。在ARM中可以用几个特殊功能寄存器对占空比和周期进行设置。通过设置这些寄存器产生符合蜂鸣器要求的方波后,这个时候利用这个方波就可以对蜂鸣器进行驱动了。使用PWM时,通过TCMPn可以决定脉宽,TCNTn决定频率,TCMPn/TCNTn决定占空比。使用IO口电平翻转时,需要使用定时器来做定时,通过定时翻转产生符合要求频率的波形。由于蜂鸣器一般的工作电流比较大,以至于IO口无法驱动,一般使用放大电路来驱动,一般使用三极管来放大电流就可以了。
[单片机]
S3C2440-蜂鸣器
三 ARM9(S3C2440)的串口UART——程序实例讲解
串口通信程序编写步骤 UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。 选通道,通过函数Uart_Select();选UART0~UART2; 选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)来进行。时钟选UCLK ,rUCON0|=0x400;时钟选PCLK ,rUCON0&=0x3ff。 通信协议(rULCON0)设定,如果正常通信,一位停止位,8位数据位,无奇偶效验: rULCON0=(0 6)|(0
[单片机]
s3c2440的LED点灯裸机汇编程序
1.s3c2440裸机LED点灯代码(汇编代码) .text .global _start _start: LDR R0,=0x56000010 @ R0设为GPBCON寄存器。此寄存器 @ 用于选择端口B各引脚的功能: @ 是输出、是输入、还是其他 MOV R1,#0x00000400 STR R1, @ 设置GPB5为输出口, 位 =0b01 LDR R0,=0x56000014 @ R0设为GPBDAT寄存器。此寄存器
[单片机]
ARM处理器的寄存器
在ARM体系中通常有以下3种方式控制程序的执行流程: **在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)加2个字节。整个过程是按顺序执行。 **跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。其中,B指令用于执行跳转操作;BL指令在执行跳转操作同时,保存子程 序的返回地址;BX指令在执行跳转操作同时,根据目标地址为可以将程序切换到Thumb状态;BLX指令执行3个操作,跳转到目标地址处执行,保存子程序的返回 地址,根据目标地址为可以将程序切换到Thumb状态。 **当异常中断发生时,系统执行完当前指令后,将跳转到相应的异
[单片机]
基于s3c2440的madplay移植
在mini2440移植声卡后,赶紧找了移植madplay的资料,看上去挺简单的,于是接着移植madplay。 一、 环境和软件介绍 1、主机环境:虚拟机下Fedora9 2、交叉编译器:arm-linux-gcc-4.3.2 3、软件包:zlib-1.2.3、libid3tag-0.15.1b.tar.gz、libmad-0.15.1b.tar.gz、madplay-0.15.2b.tar.gz 4、 把以上软件包解压到/opt/studyarm/madplay-make目录下,分别改名为zlib、libid3tag、libmad、madplay。并在madplay-make目录下新建include和lib目录用于存放编译后
[单片机]
S3C2440裸机------异常与中断__und异常模示程序示例
1.异常向量表 我们先看一下芯片手册里面的异常向量表, 2.代码流程 我们在重定位的第10个程序的基础上进行修改。 我们要在start.S的前面增加跳转到相应异常向量表的代码,并且要增加代码,当发生未定义指令异常时候跳转到该代码块进行保存现场、处理未定义异常以及恢复现场的工作,然后在下面故意写一条不能被识别的指令。 2.1增加异常向量表代码 首先在start.S的前面增加相应的跳转指令,当发生异常时会根据这里的跳转指令跳转到相应的地方,代码如下。 _start: b reset /* vector 0 : reset */ b do_und /* vector 4 : und */ 2.2设置栈 进入异
[单片机]
<font color='red'>S3C2440</font>裸机------异常与中断__und异常模示程序示例
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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