以s3c2440arm9核為例:
1、s3c2440支援60個中斷源,含子中斷源;
2、arm9採用五級流水線方式;
3、支援外部中斷和內部中斷;
24個外部中斷占用gpf0-gpf7(eint0-eint7),gpg0-gpg15(eint8-eint23)。用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體可參考datesheet資料手冊。
暫存器:
extint0-extint2:分別設定eint0—eint7、eint8—eint15、eint16—eint23的觸發方式(高電平觸發、低電平觸發、下降沿觸發、上公升沿觸發)。
eintflt0-eintflt3:控制濾波時鐘和濾波寬度。
eintpend:這個是中斷掛起暫存器,清除時要寫1,後面還有幾個是寫1清除。當乙個外部中斷(eint4-eint23)發生後,那麼相應的位會被置1。為什麼沒有eint0-eint3,因為它們分別由srcpnd暫存器的後4位控制。
eintmask:這個簡單,是遮蔽中斷用的,也就是說位為1時,此次中斷無效。
內部中斷有8個暫存器。
暫存器:
subsrcpnd:當乙個中斷發生後,那麼相應的位會被置1,表示乙個中斷發生了。
intsubmsk:與上乙個是一樣的,中斷遮蔽暫存器。
srcpnd:當乙個中斷發生後,那麼相應的位會被置1,表示乙個或一類中斷發生了。
intmsk:用來遮蔽srcpnd暫存器所標識的中斷。但只能遮蔽irq中斷,不能遮蔽fiq中斷。
intmod:當intmod中某位被設定為1時,它對應的中斷被設為fiq,cpu將進入快速中斷模式。
priority:用於設定irq中斷的優先順序。具體使用方法可參考晶元手冊。
intpnd:中斷優先順序仲裁器選出優先順序最高中斷後,這個中斷在intpnd暫存器中的相應位被置1,隨後,cpu進入中斷模式處理它。同一時間內,此暫存器只有一位被置1。
intoffset:用來表示intpnd暫存器中哪位被置1了,即記錄intpnd中位[x]為1的位x的值。清除intpnd、srcpnd時自動清除。
1、中斷控制器匯集各類外設發出的中斷訊號,然後通知cpu。
2、cpu儲存當前程式的執行環境,然後呼叫中斷服務程式(isr),來處理中斷。
3、在isr中通過讀取外設的相關的暫存器來識別中斷的型別,並進行相應的處理。
5、恢復被中斷程式的執行環境,繼續執行被中斷的程式。
main.c
1intmain()
2
interrupt.c
1/*interrupt registes*/2
#define srcpnd (volatile unsigned long *)0x4a000000
3#define intmod (volatile unsigned long *)0x4a000004
4#define intmsk (volatile unsigned long *)0x4a000008
5#define priority (volatile unsigned long *)0x4a00000c
6#define intpnd (volatile unsigned long *)0x4a000010
7#define intoffset (volatile unsigned long *)0x4a000014
8#define subsrcpnd (volatile unsigned long *)0x4a000018
9#define intsubmsk (volatile unsigned long *)0x4a00001c
1011
#define eintmask (volatile unsigned long *)0x560000a4
12#define eintpend (volatile unsigned long *)0x560000a8
1314
void
init_irq()
1533
34void
handle_int()
3560
61/*
中斷清除
*/62
if(value == 4
)63 *(eintpend) = (1
<< 4
);64 *(srcpnd) = 1
<65 *(intpnd) = 1
<66 }
start.s
1irq:
2sub lr, lr, #4
3stmfd sp!, /* 保護現場 */
4bl handle_int
5 ldmfd sp!, ^ /* 恢復現場,^表示把spsr恢復到cpsr */
sub lr, lr, #4
可參考部落格:
ARM的中斷處理過程
1.首先就是知道 arm狀態下的通用暫存器和程式計數器,綠顏色的就是相應模式下的私有暫存器。就是說程式一般執行在系統和使用者模式下,使用的是系統和使用者模式下的通用暫存器,當有異常發生時,比如 fiq,那麼系統將切換到 fiq模式下,相應的就會採用 fiq模式下的暫存器,其中綠顏色的就是只在 fiq...
中斷處理過程
部分摘自 中斷 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式...
中斷及中斷處理過程
1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...