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的智能控制器,實踐證明系統穩定可靠,滿足了在復雜的實時多任務環境中觸摸屏快速響應的要求。
相關閱讀:
- ...2017/07/04 14:36·增強版ARM DesignStart:通向定制化SoC的較快、較低風險之路
- ...2014/06/06 10:19·研祥ARM工業平板電腦助力高端汽車制造
- ...2014/04/11 15:52·研祥ARM工業平板電腦在電動汽車充電樁中的應用
- ...2012/03/31 14:49·實現基于ARM的嵌入式系統的SoC方法
- ...2012/03/26 14:07·基于uC/OSII的ARM9引導程序設計與實現
- ...2012/03/14 14:36·基于ARM處理器的單目視覺測距定位系統
- ...· Efinix® 全力驅動AI邊緣計算,成功推出Trion™ T20 FPGA樣品, 同時將產品擴展到二十萬邏輯單元的T200 FPGA
- ...· 英飛凌亮相進博會,引領智慧新生活
- ...· 三電產品開發及測試研討會北汽新能源專場成功舉行
- ...· Manz亞智科技跨入半導體領域 為面板級扇出型封裝提供化學濕制程、涂布及激光應用等生產設備解決方案
- ...· 中電瑞華BITRODE動力電池測試系統順利交付北汽新能源
- ...· 中電瑞華FTF系列電池測試系統中標北京新能源汽車股份有限公司
- ...· 中電瑞華大功率高壓能源反饋式負載系統成功交付中電熊貓
- ...· 中電瑞華國際在電動汽車及關鍵部件測評研討會上演繹先進測評技術