2440之中斷管理

2021-04-20 16:51:38 字數 2573 閱讀 5874

中斷處理:

中斷是嵌入式裡最重要的乙個概念。一般乙個系統對於乙個裝置要麼採用中斷方式,要麼採用輪詢方式 。中斷方式可以有效地減少處理器負荷 ,但是如果大量採用中斷則有可能降低處理速度 ,因為中斷處理破壞了處理器的流水機制。複習下微機原理中中斷處理過程和中斷機制。   

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來處理那個中斷呢?這就需要用到中斷控制器了。如下圖所...