ARM7202觸摸屏接口設(shè)計(jì)方案
觸摸屏的應(yīng)用程序模塊有:觸摸屏初始化、落筆中斷服務(wù)程序、A/D中斷服務(wù)程序、濾波程序和坐標(biāo)轉(zhuǎn)換程序。初始化程序、濾波程序和坐標(biāo)轉(zhuǎn)換程序是一般常規(guī)通用程序。觸摸屏驅(qū)動(dòng)程序其核心是落筆中斷和A/D轉(zhuǎn)換這兩個(gè)中斷服務(wù)程序,以下是在uc/OS操作系統(tǒng)下觸摸屏驅(qū)動(dòng)程序的兩個(gè)中斷服務(wù)程序,其詳細(xì)說明見注釋。
static void TouchPenDownISR(int level) //落筆中斷服務(wù)程序
{
unsigned int status;
status=*(volatile int *)PioCIS0xfff;
if (status 0x80 )
{
*(volatile int *)PioCIC|=0x80; //清落筆中斷
*(volatile int *)PioCIM=~0x80; //關(guān)落筆中斷
*(volatile int *)PioCDR=~0x100; //使落筆中斷檢測(cè)無效,觸摸屏掃描電路有效
*(volatile int*)ADCCR=~0x80; //開A/D電源
*(volatile int*)ADCTPCR|=0x80|0x40; //觸摸屏讀有效,A/D中斷有效
}
}
static void TouchINIISR(int level) //觸摸屏A/D轉(zhuǎn)換中斷服務(wù)程序
{
int x[4];
int y[4];
*adcisr |= 0x80; //清觸摸屏A/D中斷
TouchSample(x,y); //得到X/Y方向數(shù)值
*(volatile int*)ADCTPCR=~(0x80|0x40); //觸摸屏讀無效,觸摸屏A/D中斷無效
*(volatile int *)PioCDR|=0x100; //使落筆中斷檢測(cè)有效,觸摸屏掃描電路無效
if(*(volatile int *)PioCDR0x80) //檢測(cè)到起筆
{
*(volatile int *)PioCIC|=0x80; //清落筆中斷
*(volatile int *)PioCIM|=0x80; //開落筆中斷
*(volatile int *)ADCCR|=0x80; //關(guān)A/D電源
*(volatile int*)ADCTPCR=~(0x80|0x40); //觸摸屏讀無效,觸摸屏A/D中斷無效
}
else //如仍有落筆
{
*(volatile int *)PioCDR=~0x100; //使落筆中斷檢測(cè)無效,觸摸屏掃描電路有效
*(volatile int *)ADCTPCR|=0x80|0x40; //觸摸屏讀有效,觸摸屏A/D中斷有效
}
}
5 結(jié)束語(yǔ)
根據(jù)上述對(duì)觸摸屏工作機(jī)制的分析,筆者在實(shí)時(shí)嵌入式操作系統(tǒng)uc/OS下編寫的觸摸屏驅(qū)動(dòng)程序應(yīng)用于基于ARM7202的智能控制器,實(shí)踐證明系統(tǒng)穩(wěn)定可靠,滿足了在復(fù)雜的實(shí)時(shí)多任務(wù)環(huán)境中觸摸屏快速響應(yīng)的要求。
評(píng)論