ARM7202触摸屏接口设计方案

1 引言
不同的应用领域触摸屏的设计方式也各不相同,一般有以下三种:⑴应用触摸屏模块。触摸屏模块提供标准的硬件接口与应用系统(一般为pc或x86架构的工控机)相连,安装驱动程序后即可工作,基本无需开发;⑵扩展触摸屏控制器。这是嵌入式系统中设计触摸屏普遍使用的方法,常用的触摸屏控制芯片有ads7843、ads7846等,这些芯片内部集成了a/d转换器和触摸屏的驱动电路,同时要设计一定的软件;⑶与前面方式⑵相仿,有些处理器集成了a/d转换器,通过io口模拟触摸屏的驱动信号也可实现触摸屏的控制。
arm7202集成了arm7tdmi cpu核、存储器管理单元(mmu)、8kb高速缓冲存储器(cache),主频达70mhz。是一高性能嵌入式处理器。除触摸屏控制器外,其片内还包含了其他丰富的资源,如lcd控制器、sdram控制器、中断控制器、dma 控制器等[1]。arm7202与触摸屏的接口在软/硬件设计上有些与前面三种不同的方面。
2 硬件设计
2.1 电阻触摸屏原理
电阻触摸屏是一多层的复合膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层塑料层,它的内表面也涂有一层透明的导电层,在两层导电层之间有许多细小的透明隔离点把它们隔开绝缘,如图1。当手指触摸屏幕时,平常绝缘的两层导电层在触摸点位置就有了一个接触,控制器检测到这个接触后,其中一面导电层接通y轴方向的5v均匀电压场,另一导电层将接触点的电压引至控制器进行a/d转换,得到电压值后与5v相比即可得触摸点的y轴坐标,如图2。同理得出x轴的坐标。这是所有电阻触摸屏共同的基本原理。
2.2 arm7202与触摸屏的接口
arm7202片上资源包含触摸屏控制器,用于控制4线电阻式触摸屏。在5路a/d转换通道中a0和a1是用于触摸屏坐标采集的,同时芯片提供atsxp、atsxn、atsyp和atsyn四根扫描线分别对x方向和y方向进行扫描。atsxp和atsxn在x方向施加正向电压时,在y方向检测到x坐标的对应值;同理atsyp和atsyn在y方向施加正向电压时,在x方向检测到y坐标的对应值,分别由a0和a1采集。为了减少系统功耗和触摸屏所占cpu资源,只在有落笔时触摸屏控制器才启动扫描,通过a/d转换得到坐标的对应值,因此需在外部设计落笔检测电路,如图3所示。图中irlml6302和irlml2402分别为pmosfet和nmosfet,作为开关管控制x方向和y方向的扫描输出。pb7接上拉电阻,检测落笔中断,当有落笔时,pb7检测到低电平,触发中断。pb6为中断检测电路的使能信号,当pb6为高电平时,中断有效,触摸屏扫描无效;反之中断无效,触摸屏扫描有效。
3 触摸屏控制程序机制
不同的操作系统下对触摸屏的应用各有不同,但都包括了设备的初始化、设备读写及中断响应等基本模块。触摸屏的驱动程序涉及到两个中断:落笔中断和触摸屏a/d转换中断。所包含的程序模块有:触摸屏初始化、落笔中断服务程序、a/d中断服务程序、滤波程序和坐标转换程序。这里重点说明触摸屏的两个中断。
触摸屏初始化程序完成外部电路的中断设置和采样率的设置,并将触摸屏的a/d中断和a/d转换器电源关闭,使外部电路中断有效。
有落笔时,外部中断被触发,进入落笔中断服务程序。在落笔中断服务程序中清中断源,关外部中断,使外部中断电路无效,打开触摸屏中断和ad转换器电源。此时触摸屏电路开始扫描触摸屏。触摸屏a/d转换结束后,产生a/d中断,进入a/d中断服务程序。在触摸屏a/d中断服务程序中,清a/d中断,关触摸屏a/d中断,读a/d转换值。此时还要判断落笔是否继续,若无落笔,开外部电路中断,使外部中断电路有效,关a/d中断和a/d转换器电源,进入节能模式,如图4(a);若还有落笔,要继续开触摸屏a/d中断,使外部中断电路无效,触摸屏的a/d转换继续进行,如图4(b)所示。
图4 触摸屏程序流图
由a/d转换得到的值是触摸屏上触摸点的x坐标和y坐标的值,要通过一定的方法转换为显示屏上的坐标。限于篇幅这里省略,其原理和实现方法见参考文献[2]。在a/d转换时,每次由a/d转换寄存器得到4组转换值,可以设计一个滤波程序以提高检测精度。
4 程序设计
触摸屏的应用程序模块有:触摸屏初始化、落笔中断服务程序、a/d中断服务程序、滤波程序和坐标转换程序。初始化程序、滤波程序和坐标转换程序是一般常规通用程序。触摸屏驱动程序其核心是落笔中断和a/d转换这两个中断服务程序,以下是在uc/os操作系统下触摸屏驱动程序的两个中断服务程序,其详细说明见注释。
static void touchpendownisr(int level) //落笔中断服务程序
{
unsigned int status;
status=*(volatile int *)piocis&0xfff;
if (status & 0x80 )
{
*(volatile int *)piocic|=0x80; //清落笔中断
*(volatile int *)piocim&=~0x80; //关落笔中断
*(volatile int *)piocdr&=~0x100; //使落笔中断检测无效,触摸屏扫描电路有效
*(volatile int*)adccr&=~0x80; //开a/d电源
*(volatile int*)adctpcr|=0x80|0x40; //触摸屏读有效,a/d中断有效
}
}
static void touchiniisr(int level) //触摸屏a/d转换中断服务程序
{
int x[4];
int y[4];
*adcisr |= 0x80; //清触摸屏a/d中断
touchsample(x,y); //得到x/y方向数值
*(volatile int*)adctpcr&=~(0x80|0x40); //触摸屏读无效,触摸屏a/d中断无效
*(volatile int *)piocdr|=0x100; //使落笔中断检测有效,触摸屏扫描电路无效
if(*(volatile int *)piocdr&0x80) //检测到起笔
{
*(volatile int *)piocic|=0x80; //清落笔中断
*(volatile int *)piocim|=0x80; //开落笔中断
*(volatile int *)adccr|=0x80; //关a/d电源
*(volatile int*)adctpcr&=~(0x80|0x40); //触摸屏读无效,触摸屏a/d中断无效
}
else //如仍有落笔
{
*(volatile int *)piocdr&=~0x100; //使落笔中断检测无效,触摸屏扫描电路有效
*(volatile int *)adctpcr|=0x80|0x40; //触摸屏读有效,触摸屏a/d中断有效
}
}
5 结束语
根据上述对触摸屏工作机制的分析,笔者在实时嵌入式操作系统uc/os下编写的触摸屏驱动程序应用于基于arm7202的智能控制器,实践证明系统稳定可靠,满足了在复杂的实时多任务环境中触摸屏快速响应的要求。

十年漫长探索 硬件仿真技术终成主流
半导体原材料价格全面调涨 涨幅大约5~15%
锤子坚果R1怎么样?坚果R1评测告诉你这是全能旗舰霸气外露机
小米6你想要的都在这里?
近三年技术和产业发展的回顾,再论“深度学习已死
ARM7202触摸屏接口设计方案
适于充当汽车和工业应用的电源的解决方案
第七届大学生集成电路设计•应用创新大赛
连接器为什么会腐蚀?哪些因素会导致连接器腐蚀?
关于超前滞后零极点频率补偿器原理及应用
RP Fiber Power在数值光束传播中创建多模光束
如何测试信号完整性,有哪些实现方法
芯片设计中ROM的概念、分类、设计流程
PLC在机场行李系统自动控制中的应用
上硅所重大发现:室温下具有类金属延展性的无机半导体
线程池的线程怎么释放
QUIC Version 1以一种新的互联网传输技术作为标准发布
西部数据致力于提供多元化的存储产品组合解决方案?
扼制英特尔和AMD的命运 10nm还能走多远
7010 SoC 优化的汽车级ADAS电源设计