?? 44b0
字號:
[分享]44b0中斷的詳解
S3C44B0X的中斷控制器有30個中斷源。
S3C44B0X支持新的中斷處理模式稱為(vectored interrupt mode),在多個中段請求發生時,
由硬件優先級邏輯確定應該有哪個中斷得到服務,同時硬件邏輯使中斷相量表的跳轉指令加載到
(0X18或0X1C)位置,在該位置執行跳轉指令使程序跳到相應的中斷服務線程,因此相對與傳
統的ARM的軟件方法能夠大大減少中斷進入延時。
有兩種類型的中斷模式,FIQ (快速中斷)和IRQ.所有的中斷源在中斷請求時應該確定使用的
中斷模式。在網絡上廣為流傳的44b0開發板例程中,大部分使用的都是IRQ中斷模式(請查閱
寄存器rINTCON)。
一般來講,使用44b0開發板進行調試時,無需更改44b.h,44blib.h,def.h,option.h,44binit.s,
44blib.c,44blib_a.s,memcfg.s,option.s等程序,甚至無需看懂,即可編程使用44b0開發板。
如前所述,硬件邏輯使中斷相量表的跳轉指令加載到(0X18或0X1C)位置,在該位置執行跳轉指令
使程序跳到相應的中斷服務線程,用戶只需定義相應的中斷服務程序即可。中斷向量表的定義如下
(節選,請看44b.h)
/* ISR */
#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c))
.........................................
#define pISR_EINT4567 (*(unsigned *)(_ISR_STARTADDRESS+0x74))
#define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x78))
#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c))
#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80))
#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84))
用戶定義相應的中斷服務程序,可以參考該語句,
pISR_EINT4567=(unsigned)Key_Int;;; /將外部中斷4567產生的中斷,指向函數Key_Init
當然,用戶也可以根據自己的愛好,任意改變函數名,
pISR_EINT4567=(unsigned)MyCat; /函數名由用戶定義
最好在程序開頭聲明一下,
void __irq Mycat(void);;;
顯然,至此可以基本理解44b0的中斷,是如何與程序中的中斷服務子程序聯系起來的了。
中斷的硬件邏輯,將檢測到的中斷,以某種方式指向中斷服務程序的地址,該地址在頭文件
中以宏定義的形式出現。用戶在自己的程序中,將中斷服務子程序的地址付給該指針,從而
將其聯系起來。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -