MCU_S3C2410之中斷控制
支持56個(gè)中斷
寄存器分析
SRCPND
INTMOD
INTMSK
INTSUBMSK
EXTINT
EINTPEND
INTPND
代碼分析
__irq的使用
__irq為一個(gè)標識,用來(lái)表示一個(gè)函數是否為中斷函數。對于不同的編譯器,__irq在函數名中的位置不一樣,例如:
ADS編譯器中: void __irq IRQ_Eint0(void);
Keil編譯器中: void IRQ_Eint0(void) __irq;
但是其意義一樣,它所完成的任務(wù)是標識該函數為中斷函數,在編譯器編譯是調用此函數時(shí),先保護函數入口現場(chǎng),然后執行中斷函數,
函數執行完畢,恢復中斷現場(chǎng),這整個(gè)過(guò)程不需要用戶(hù)重新編寫(xiě)代碼來(lái)完成,由編譯器自動(dòng)完成。因而這也給不具備中斷嵌套功能的ARM系統帶來(lái)
了問(wèn)題,若使用 __irq 時(shí)有中斷嵌套產(chǎn)生,這現場(chǎng)保護就會(huì )混亂。在前一篇日志“LPC2000系列中斷嵌套處理”中,自己編寫(xiě)中斷入口現場(chǎng)保護代
碼,并不使用 __irq 標識符號,就是這個(gè)原因。
總結如下:
1、若不想自己編寫(xiě)中斷入口現場(chǎng)保護代碼,而且使用中無(wú)中斷嵌套,在中斷函數中用 __irq 來(lái)標識我們的中斷函數,否則出錯;
2、若程序中要使用中斷嵌套,對于無(wú)中斷嵌套功能的ARM來(lái)說(shuō),一定要自己編寫(xiě)中斷入口現場(chǎng)保護代碼,而且不能用 __irq 標識我們的
中斷函數,否則出錯。
評論