ARM7202觸摸屏接口設計方案
觸摸屏的應用程序模塊有:觸摸屏初始化、落筆中斷服務程序、A/D中斷服務程序、濾波程序和坐標轉換程序。初始化程序、濾波程序和坐標轉換程序是一般常規(guī)通用程序。觸摸屏驅動程序其核心是落筆中斷和A/D轉換這兩個中斷服務程序,以下是在uc/OS操作系統(tǒng)下觸摸屏驅動程序的兩個中斷服務程序,其詳細說明見注釋。
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方向數(shù)值
*(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 結束語
根據上述對觸摸屏工作機制的分析,筆者在實時嵌入式操作系統(tǒng)uc/OS下編寫的觸摸屏驅動程序應用于基于ARM7202的智能控制器,實踐證明系統(tǒng)穩(wěn)定可靠,滿足了在復雜的實時多任務環(huán)境中觸摸屏快速響應的要求。
評論