ARM7202触摸屏接口设计方案
触摸屏的应用程序模块有:触摸屏初始化、落笔中断服务程序、A/D中断服务程序、滤波程序和坐标转换程序。初始化程序、滤波程序和坐标转换程序是一般常规通用程序。触摸屏驱动程序其核心是落笔中断和A/D转换这两个中断服务程序,以下是在uc/OS操作系统下触摸屏驱动程序的两个中断服务程序,其详细说明见注释。
static void TouchPenDownISR(int level) //落笔中断服务程序
{
unsigned int status;
status=*(volatile int *)PioCIS0xfff;
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 *)PioCDR0x80) //检测到起笔
{
*(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的智能控制器,实践证明系统稳定可靠,满足了在复杂的实时多任务环境中触摸屏快速响应的要求。
评论