ARM嵌入式系統中觸摸屏的中斷控制方法
首先必須弄清楚SUBSRCPND與SRCPND之間的關(guān)系,幾個(gè)SUBSRCPND可能對應同一個(gè)SRCPND。經(jīng)過(guò)不斷總結,得出的對應關(guān)系如表1所列。從表中可知,觸摸屏要用到SUBSRCPND中的INT_TC位,即SUBSRCPND[9]。這里定義變量:
#define BIT_SUB_TC(0x19)
與之對應的是SRCPND中的INT_ADC位,即SRCPND[31],又定義變量:
#define BIT_ADC(0xl31)
INTMOD與PRIORITY采用默認設置。因此,可以把觸摸屏的中斷過(guò)程寫(xiě)為:本文引用地址:http://dyxdggzs.com/article/195384.htm
3.2 觸摸屏中斷與觸摸屏中斷程序
首先使能ARM芯片的中斷向量。當有IRQ中斷到來(lái),CPU會(huì )自動(dòng)到0x18地址處取指。0x18處的指令是CPU根據中斷源算好的。這里觸摸屏的中斷INT-ADC來(lái)了,那么0x18處的指令就是跳轉到地址0x9c處。然后就執行“l(fā)dr pc,=HandlerINT_ADC”這條指令。這條指令的執行結果就是跳轉到“HandlerINT_ADC”處執行。
那么“HandlerINT_ADC”處又是什么指令呢?從訪(fǎng)問(wèn)絕對地址的內存位置“#define pISR_ADC(*(unsigned*)(ISR_STARTADDRESS+0x9c))”可知,“HandlerINT_ADC”處的地址就是_ISR_STARTADDRESS+0x9C。
上述語(yǔ)句把無(wú)符號整數_ISR_STARTADDRESS+0x9c強制轉換為指針,指向RAM,通過(guò)語(yǔ)句“pISR_ADC=(int)touchscreen;”對它進(jìn)行訪(fǎng)問(wèn),touchscreen即為所定義的觸摸屏中斷程序,該中斷服務(wù)程序必須使用“__irq關(guān)鍵字進(jìn)行聲明。這樣,用戶(hù)在自己的程序中,將中斷服務(wù)程序的地址賦給該指針,從而將觸摸屏的中斷與觸摸屏的中斷程序聯(lián)系起來(lái)。整個(gè)觸摸屏中斷與觸摸屏中斷程序的聯(lián)系如圖2所示。
結語(yǔ)
本文完成了觸摸屏相關(guān)中斷寄存器的設置,并編寫(xiě)了觸摸屏的中斷處理程序,采用編寫(xiě)“__irq”函數的方法實(shí)現了基于中斷的觸摸屏控制。在實(shí)際應用中,該程序設計簡(jiǎn)單可靠,觸摸點(diǎn)坐標值讀取準確,且無(wú)粘滯現象,達到了預期效果。
評論