中斷處理:
中斷是嵌入式裡最重要的乙個概念。一般乙個系統對於乙個裝置要麼採用中斷方式,要麼採用輪詢方式 。中斷方式可以有效地減少處理器負荷 ,但是如果大量採用中斷則有可能降低處理速度 ,因為中斷處理破壞了處理器的流水機制。複習下微機原理中中斷處理過程和中斷機制。
2440中支援fiq(快速中斷)和irq(普通中斷)2種中斷方式,一般只採用irq中斷。2440有60個中斷源,不支援中斷巢狀。具體的參考使用者手冊第14章。下圖是2440中斷產生過程。
具體的講解一下,關於暫存器請查閱使用者手冊。
中斷源分為2種,子中斷中斷源和中斷源,當乙個子中斷產生乙個中斷訊號,子中斷源掛起暫存器(subrcpnd)相應位自動置1,察看子中斷遮蔽暫存器(submask)該子中斷是否被遮蔽(人工設定),如果沒遮蔽,則中斷源暫存器(srcpnd)置1,察看該中斷源是否被遮蔽和採用那種模式,如果沒被遮蔽,採用irq模式,進行優先順序判斷後,高優先順序的執行,中斷掛起暫存器置1,產生irq訊號。同時cpsr暫存器的i位置1,表明當前有乙個irq中斷產生。記得以前讓大家注意該暫存器中的i和q位了吧,他的作用就在這 。
中斷處理過程:
cpu每執行一條指令都會檢查cpsr暫存器,當發現i和f位被置1時,就進行中斷處理。第一步跳入異常向量表:
b resethandler
b handlerundef ;handler for undefined mode
b handlerswi ;handler for swi interrupt
b handlerpabort ;handler for pabort
b handlerdabort ;handler for dabort
b . ;reserved
b handlerirq ;handler for irq interrupt
b handlerfiq ;handler for fiq interrupt
handlerfiq handler handlefiq
handlerirq handler handleirq
handlerundef handler handleundef
handlerswi handler handleswi
handlerdabort handler handledabort
handlerpabort handler handlepabort
^ _isr_startaddress ; _isr_startaddress=0x33ff_ff00
handlereset # 4
handleundef # 4
handleswi # 4
handlepabort # 4
handledabort # 4
handlereserved # 4
handleirq # 4
handlefiq # 4
如果是irq 則跳到handlerirq,此過程由硬體來完成。接下來
ldr r0,=handleirq ;this routine is needed
ldr r1,=isrirq ;if there is not 'subs pc,lr,#4' at 0x18, 0x1c
str r1,[r0]
進行第2次跳轉,跳轉到2級中斷向量表
isrirq
sub sp,sp,#4 ;reserved for pc
stmfd sp!,
ldr r9,=intoffset
ldr r9,[r9]
ldr r8,=handleeint0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,
handleeint0 # 4
handleeint1 # 4
handleeint2 # 4
handleeint3 # 4
次**完成了建立2級中斷向量表,在我們中斷程式中我們先對中斷進行註冊
例 eint0 = isr_func();這樣就完成了中斷向量和中斷服務程式的關聯。跳到2級中斷向量表後就進入了中斷處理程式。中斷處理完成了cpu返回繼續執行中斷處理前的下一條程式,關於處理現場的保護部分參考微原部分。
下邊是乙個關於中斷處理函式的測試題:明白中斷處理函式的使用
中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴充套件—讓標準c支援中斷。具代表事實是,產生了乙個新的關鍵字
__interrupt double compute_area (double radius)
上邊就是2440的中斷產生及處理過程,這些是最基本的知識要牢牢掌握。對於arm這些都是一樣的,只不過是暫存器有可能不一樣,但處理過程是一樣的,有些處理器支援中斷可重入,如710處理器。閱讀下使用者手冊14章中關於優先順序部分,注意下有些暫存器的清0方法。
ucos iii學習之中斷管理
1.關於中斷管理 中斷響應時間定義為 接收到中斷到開始處理 isr 中 的這段時間。通常,中斷時使用者 的上文 cpu 暫存器 會被放入堆疊。中斷恢復時間定義為 執行完 isr 中最後一句 後到恢復到任務級 的這段時間。任務延遲時間定義為 中斷發生到恢復到任務級 的這段時間。2.cpu的中斷處理 在...
2440外部中斷
一 外部中斷主要暫存器 extintn register address r w description reset value extint0 0x56000088 r w external interrupt control register 0 0x000000 extint1 0x56000...
6410之中斷處理
中斷 在6410 arm體系中,有很多模組可以產生中斷,比如gpio,uart,ts等都可以產生。在這些模組和cpu之間還有乙個中斷控制器。這個中斷控制器就是用於協調這些模組和cpu之間的互動的。比如 gpio和uart同時發出中斷請求,那麼cpu來處理那個中斷呢?這就需要用到中斷控制器了。如下圖所...