基于PXA255的触摸屏控制器ADS7843驱动程序设计

发布者:CrystalClear最新更新时间:2012-04-05 来源: 电子器件 关键字:触摸屏  ADS7843  PXA255 手机看文章 扫描二维码
随时随地手机看文章

在便携式的电子类产品中,触摸屏由于其便、灵活、占用空间少等优点,已经逐渐取代键盘成为嵌入式计算机系统常选用的人机交互输入设备。触摸屏输入系统由触摸屏、触摸屏控制器、微控制器及其相应的驱动程序构成。本文从触摸屏控制器的驱动程序设计着手,介绍触摸屏控制器ADS7843的内部结构及工作原理和在嵌入式Linux操作系统中基于PXA255微处理器的ADS7843驱动程序设计。

1、触摸屏控制器ADS7843的介绍
1.1 ADS7843的内部结构
ADS7843 内驻一个多路低导通电阻模拟开关组成的供电-测量电路网络、12bit逐次逼近A/D转换器和异步串行数据输入输出,ADS7843根据微控制器发来的不同测量命令导通相应的模拟开关,以便向触摸屏电极对提供电压,并把相应电极上的触点坐标位置所对应的电压模拟量引入A/D转换器,图1为ADS7843内部结构图。X+、Y+、X-、Y-为触摸屏电极模拟电压输入;CS为ADS7843的片选输入信号,低电平有效;DCLK接外部时钟输入,为芯片进行 A/D转换和异步串行数据输入/输出提供时钟;DIN串行数据输入端,当CS低电平时,输入数据在时钟的上升沿将串行数据锁存;DOUT串行数据输出端, 在时钟下降沿数据由此移位输出,当CS为高电平时,DOUT呈高阻态。BUSY为系统忙标志端,当CS为低电平,且BUSY为高电平时,表示 ADS7843正在进行数据转换;VREF参考电压输入端,电压值在+1V到+VCC之间变化;PENIRQ为笔触中断,低电平有效;IN3、IN4为辅助ADC转换输入通道;+VCC为电源输入。



图1 ADS7843内部结构

1.2 ADS7843的转换时序
ADS7843 完成一次数据转换需要与微控制器进行3次通信,第一次微处理器通过异步数据传送向ADS843发送控制字,其中包括起始位、通道选择、8/12位模式、差分/单端选择和掉电模式选择,其后的两次数据传送则是微控制器从ADS7843取出16bitA/D转换结果数据(最后四位自动补零),每次通信需要8个时钟周期,完成一次数据转换共需24个时钟周期,图2为ADS7843转换时序。[page]



图2 ADS7843转换时序

2、ADS7843与PXA255硬件接口
PXA255 微处理器是Intel公司生产的第二代基于32位XScale微架构的集成系统芯片(ISOC),PXA255具有高性能、低功耗等优点,它除了 XScale微内核外,还集成了许多适用于手持设备市场需要的外围设备。图3为ADS7843触摸屏控制器与PXA255微处理器的硬件连线示意图。当屏触发生时ADS7843向PXA255发出中断请求,由PXA255响应该中断请求,启动通信过程,读取ADS7843的转换结果,从而得到触摸点的坐标。ADS7843各信号的时序受外部输入时钟信号频率的影响,一旦外部输入时钟频率固定,各信号的时序便完全确定,因此需要配置PXA255的接口信号时序,使之完全符合ADS7843的时序。



图3 ADS7843触摸屏控制器与PXA255微处理器的连线示意图


3、ADS7843驱动程序的设计

Linux 作为一个宏内核操作系统,其设备驱动都在内核,即系统空间实现,实现方式有两种,一种是将有关的设备驱动程序和数据结构静态地连接在内核映像中;另一种是将具体的设备驱动程序和数据结构独立加以编译,成为可安装的模块,需要时由应用程序通过系统调用动态地予以安装或拆卸。设备驱动的实现方法也有两种,一种是轮询(polling)方式,另一种是中断(inter-rupt)方式,轮询方式对设备的操作完全由CPU掌握,外部设备则完全处于被动状态。中断方式是由外部设备主动提出申请,CPU响应申请后对外部设备进行处理,是现在常用的设备驱动方式。Linux的设备驱动具有两个显著的特点,其一是把所有的设备视为一种设备文件,每个设备都呈现于文件系统的/dev目录下,设备驱动与文件操作具有相同的界面和语义,并通过同一组系统调用进行操作;另一个显著特点是Linux的设备驱动有着分明的层次和结构。 [page]

Linux内核的新近版本为设备入口提供了一种特殊的文件系统,即设备文件系统 devfs(device file system)。新的devfs机制的优点在于:①各种设备驱动模块动态地向系统登记,设备初始化时在/dev目录下创建设备入口点,移除设备时将其删除。②设备驱动程序可以指定设备名、所有者和权限位。③不需要为设备驱动程序分配主设备号以及次设备号。④当装载和卸载模块时,不再需要运行脚本来创建设备文件,驱动程序自主地管理其设备文件。采用devfs机制的设备驱动程序调用下面的函数来处理设备的创建和删除工作。

devf s_hander_t devf s_mk_dir ( devf s_ han2 der_t dir ,const char 3 name ,void 3 info)
devf s_hander_t devf s_register ( devf s_ han2 der_t dir ,const char 3 name ,unsigned int flags , unsigned int major ,unsigned int minor ,umode_t mode ,void 3 op s ,void 3 info)
void devf s_unregister (devf s_hander_t de)

在 Linux操作系统编写设备驱动程序时有几个固定的功能模块:向Linux内核注册该设备时的初始化设备驱动程序模块;用于系统卸载模块时删除设备驱动程序的模块;提供用户使用该设备驱动程序的文件操作接口模块。对于各类具体设备编写驱动程序时还应具有对该设备进行操作的应用函数。下面就以ADS7843 驱动程序设计为例分析以上几个功能模块。

1) ADS7843 向Linux 内核注册设备时的初始化函数
int __init ads7843_t s_init (void)   / / 设备初始化函数
{int ret ;
if ( ( ret = devf s _ register _ chrdev ( TS _ MAJOR , TS _ NAME , &ads7843_t s_fops) ) ! = 0)
{ print k (" registering of " TS_NAME " is failed\ n" ) ; return ret ;}
devf s_t s_dir = devf s_mk_dir (NULL , " touchscreen" , NULL) ;    / / 建立触摸屏设备目录
devf s_handle = devf s_register ( devf s_t s_dir , " t s" ,DEVFS_ FL_ DEFAUL T , TS _ MAJOR , 0 , S _ IFCHR | S _ IRUSR | S _ IWUSR , &ads7843_t s_fops , NULL) ;    / / 注册设备
if ( ( ret = request_irq( IRQ_ GPIO_ADS7843 , ads7843_t s_inter-rupt ,
      SA_SHIRQ| SA_INTERRUPT , TS_NAME , dev_ id) ) ) / / 申请中断
{ print k ("ads7843_t s_init : failed to register IRQ\ n" ) ;
 f ree_irq( IRQ_GPIO_ADS7843 , dev_id) ; return ret ;}
if ( ( ret = ads7843_init () ) ! = 0)     / / 初始化触摸屏
{f ree_irq( IRQ_GPIO_ADS7843 , dev_id) ; return ret ;}
GPDR0 & = ~GPIO_bit (ADS7843_BUSY) ;
GPDR0 & = ~GPIO_bit (ADS7843_DOU T) ;
Ads7843_Enable_IRQ() ;/ / 开启中断
print k ("ads7843 touch screen driver initialized\ n" ) ;
return 0 ;}

2) 系统卸载ADS7843 驱动程序功能函数
void __exit ads7843_t s_cleanup (void) / / 卸载驱动程序函数
{   if (in_timehandle)
  del_timer ( &timer) ;
f ree_irq( IRQ_GPIO_ADS7843 , dev_id) ;    / / 释放中断
devf s_unregister_chrdev( TS_MAJOR , TS_NAME) ;/ / 从系统中删除设备驱动程序
print k (" ads7843 touch screen driver removed\ n" ) ;}

3) 在驱动程序最后用于模块初始化和删除驱动的功能函数
module_init (ads7843_t s_init) ;/ / 初始化驱动模块函数
module_exit (ads7843_t s_cleanup) ;/ / 删除驱动模块函数 [page]

4) ADS7843 设备文件操作结构体
static st ruct file_operations ads7843_t s_fops = {
read :ads7843_t s_read ,     / / 从设备中读数据操作
poll :ads7843_t s_poll , / / 查询设备操作
ioctl :  ads7843_t s_ioctl ,   / / 设备IO 控制操作
fasync : ads7843_t s_fasync , / / 异步通知操作
open : ads7843_t s_open , / / 打开设备操作
release : ads7843_t s_release , } ; / / 当文件结构被释放时,调用释放操作

由于文章篇幅所限,对设备文件操作的功能函数不再一一列出。

5) ADS7843 具体操作函数
①ADS7843 串行输出控制字函数
void ADS7843_din (char command)
udelay(DELA Y) ; / / 延时
for (int i = 0 ; i < 8 ; i + + ) / / 从串行输入端输入8 位控制字
{  ADS7843_ClearBit (0 , ADS7843_CL K) ; / / 时钟变低,下降沿输出
 if ( (command > > i) &0x1)
  ADS7843_SetBit (0 , ADS7843_DIN) ; / / 数据位为1
 el se
  ADS7843_ClearBit (0 , ADS7843_DIN) ; / / 数据位为0
 udelay (DELA Y) ;
 ADS7843_SetBit (0 , ADS7843_CL K) ;}} / / 时钟变高

②微处理器读取X 坐标值函数(读取Y坐标值函数相类似,控制字为0x90)
int ADS7843_t s_measure_x (void)
{ char i , int touch_data = 0 ;
ADS7843_ClearBit (0 , ADS7843_CS) ; / / 片选端置低电平
udelay(DELA Y) ;
ADS7843_din (0xD0) ;    / / 向ADS7843 发送读X 坐标控制字0xD0
ADS7843_ClearBit (0 , ADS7843_CL K) ;
udelay(DELA Y) ;
while ( ! ( GPLR0 & GPIO_ bit (ADS7843 _BUSY) ) ) print k ( "BUSY1\ n" ) ;
ADS7843_ClearBit (0 , ADS7843_CL K) ;
for (i = 0 ; i < 15 ; i + + )    / / 读取坐标值
{ touch_data < < = 1 ;
if ( GPLR0 & GPIO_bit (ADS7843_DOU T) )
  touch_data | = 0x01 ;
else
  touch_data & = 0xffffe ;
ADS7843_SetBit (0 , ADS7843_CL K) ;
udelay(DELA Y) ;
ADS7843_ClearBit (0 , ADS7843_CL K) ;}
touch_data > > = 3 ;/ / 对最后4 位自动置0 处理
return (touch_data & 0xfff) ;}

4、驱动模块的安装
在 Linux操作系统中,对于已编好的设备驱动程序,利用编译工具将驱动程序编译成驱动模块。对于驱动模块的安装,一种方法是重新编译Linux内核将驱动程序加载到系统内核,另一种方法就是利用inmod和rmmod函数动态地装载和卸载设备驱动模块。我们在IntelXscalePXA255评估板上利用重新编译Linux内核的方法将触摸屏控制器ADS7843的驱动模块加载到系统内核。运行后取得了理想的效果。

5、结束语

触摸屏已成为现代嵌入式设备人机交互的首选输入设备,触摸屏控制器的驱动程序设计当然也就成为嵌入式设备研发的必需工作。本文以ADS7843为例介绍了在嵌入式Linux操作系统中触摸屏控制器驱动程序设计的编程方法。对于在嵌入式Linux操作系统下进行其它设备的驱动开发具有一定的启示作用。

关键字:触摸屏  ADS7843  PXA255 引用地址:基于PXA255的触摸屏控制器ADS7843驱动程序设计

上一篇:基于SAA6752HS的嵌入式视频监控和传输系统设计
下一篇:基于OMAP架构的智能手持设备设计

推荐阅读最新更新时间:2024-03-16 12:56

linux中触摸屏驱动的实现(2)——基于s3c6410处理器
上一篇主要讲述了linux中触摸屏设备作为平台设备存在的模块加载和卸载函数,还有就是对应的probe函数和remove函数,这一篇说下在probe函数中注册的两个中断处理函数。 1、先来说第一个中断处理函数——触摸屏中断,对应的中断处理函数是stylus_updown,当触摸屏被按下时,会产生中断信号IRQ_PENDUP。函数源码如下: static irqreturn_t stylus_updown(int irqno, void *param) { unsigned long data0; unsigned long data1; int updown;定义一个整型变量,用来表示触摸屏是否被按下,如果按下,这个值是1;
[单片机]
linux中<font color='red'>触摸屏</font>驱动的实现(2)——基于s3c6410处理器
低成本电容式触摸屏技术推动系统设计创新
电容式触控技术在厨房设备中的应用已经有几年了,例如在烤箱和煎锅的不透明玻璃面板后面采用分离按键实现。这些触摸控制键逐渐替代了机械按键,因为后者具有使用寿命短、不够卫生等方面的问题,而且还有在面板上开孔安装按键的相关成本。 图1:“电荷转移”技术原理示意图。 电容式感应技术由于具有耐用、易于低成本实现等特点,而逐渐成为触摸控制的首选技术。此外,由于具有可扩展性,该技术还可以提供其它技术所不能实现的用户功能。在显示屏上以软按键方式提供用户界面,这通常被称为触摸屏。量研科技(Quantum Research)公司在触摸屏技术方面的发展为新设备的设计打开了大门,并将日益成为市场主流。 采用量研的电容式触摸感应技术
[工业控制]
I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之触摸屏驱动移植
之所以说是驱动移植是因为之前已经在TQ210、AM335x两个平台上移植过了,因此,仅需要少量修改就可以将驱动移植到imx6q。下面开始触摸驱动移植。 DTS编写 参考其它DTS的i2c设备写法,我们可以添加如下内容: &i2c1 { clock-frequency = 100000 ; pinctrl-names = default ; pinctrl-0 = &pinctrl_i2c1_2 ; status = okay ; gt811@5d { compatible = gt811,gt811_ts ; pinctrl-names = default ; reg = 0x5d ;
[单片机]
I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之<font color='red'>触摸屏</font>驱动移植
基于NXP LPC2148的微型尿液分析仪
项目概述    我们设计的微型尿液分析仪可以检测尿液的十种参数,包括白细胞、亚硝酸盐、尿胆原、蛋白质、PH值、潜血、比重、酮体、胆红素和葡萄糖。   在用户把浸没了尿液的试纸条放入仪器后,通过LPC2148控制LED光源进行分时发光,然后反射光通过光纤照射到CCD上,经过信号的采集和模数转换,并在微处理器中经过归一化的算法,将结果输出至LCD进行显示,或者根据需要传输至PC。并可以利用以太网接口连接Internet,方便建设一个健康检测网络。不用复杂的操作便可以得到医生的诊断,十分适合家庭用户的使用。    通过设计新的仪器结构和检测方法,使仪器精度达到或超过国内医院使用较多的尿液分析仪的水平,把体积减小到170×110×12
[医疗电子]
基于NXP LPC2148的微型尿液分析仪
触摸屏技术应用在工业控制中的应用
一、概 述 工业触摸屏,是通过触摸式工业显示器把人和机器连为一体的智能化界面。它是替代传统控制按钮和指示灯的智能化操作显示终端。它可以用来设置参数,显示数据,监控设备状态,以曲线/动画等形式描绘自动化控制过程。更方便、快捷、表现力更强,并可简化为PLC的控制程序,功能强大的触摸屏创造了友好的人机界面。触摸屏作为一种特殊的计算机外设,它是目前最简单、方便、自然的一种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。 二、工业触摸屏原理 触摸屏系统一般包括触摸屏控制器(卡)和触摸检测装置两个部分。其中,触摸屏控制器(卡)的主要作用是从触摸点检测装置上接收触摸信息CONTROL ENGI
[工业控制]
<font color='red'>触摸屏</font>技术应用在工业控制中的应用
PLC和触摸屏在国家体育场鸟巢中的应用
一、概述   国家体育场(“鸟巢”)为2008年第29届奥林匹克运动会的主体育场,是奥运会场馆的代表,它在设计、施工和运行中所体现的“绿色奥运””科技奥运”理念,场馆和相关设施严格执行节能环保设计标准,在可再生能源与新能源利用、建筑节能、水资源保护和利用等方面采取了一系列有力措施。 “鸟巢”在设计中包含了一套规模很大的雨水深度处理回用系统,体育场内70%的供水由回用水代替,其中23%来自系统处理后的雨水;更引人注目的是,“鸟巢”使用了地源热泵,从土壤中吸收能量,用于补偿体育场空调系统等。地源热泵是一种使用可再生能源、节能、环保的系统,通过地埋换热管,冬季吸收土壤中蕴含的热量为“鸟巢”供热,夏季吸收土壤中存贮的冷量向“鸟巢”供冷。
[嵌入式]
Synaptics推出全新ClearPad触控解决方案
北京,2016年 5 月 31日 人机交互解决方案的领先开发商Synaptics公司(纳斯达克代码:SYNA)今日宣布推出两款新的ClearPad 触控解决方案,面向市场容量较大的高性价比中端智能手机和平板电脑市场。Synaptics功能丰富的解决方案包括面向智能手机市场的ClearPad S3603,以及为平板和笔记本电脑开发的ClearPad S7611。 S3603和S7611分立式触控解决方案可为OEM/ODM降低总体成本,同时保留了Synaptics旗舰产品的主要功能,例如潮湿环境操作、低功耗唤醒手势、以及卓越的戴手套触控性能。借助自2006年起即在ClearPad解决方案中应用的Synaptics专有触控架构,可实现
[手机便携]
触摸屏之电阻屏、电容屏详解
触摸式显示屏并非新鲜事物。早在此波智能手机浪潮到来之前,在各种掌上电脑、手机,甚至黑白屏手机上,你都曾见过触摸屏的身影。只不过在大多数人的印象中,那个年代的触摸屏总是与触摸笔共同出现———你必须通过触摸笔或者指甲等硬物的按压,才能实现输入指令,其本质为“电阻式触摸屏”。而直到2007年iPhone的出现,另一种触摸屏,“电容式触摸屏”开始出现在人们的视线中。然而经历了4-5年的发展,触摸型智能终端市场已然“城头变幻大王旗”,从电阻式触摸屏全面转向电容式触摸屏。 电阻式触摸屏 传统的电阻式触摸屏共有5层构成。手指触摸的表面是一个硬涂层,用以保护下面的PE T层(一种透明性、阻气性好的保护材料)。PET层是很薄的有弹性的PE T薄
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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