ARM中斷機制學習記錄

檢查中斷的兩種方法: 

1.查詢方式:程序不斷地查詢各設備的狀態,並做出相慶的反應,該方式實現比較簡單。常用在一些比較單一的系統中。比如一個溫控系統中就可以使用查詢方不斷檢測溫度的變化。

查詢方式的特點是:實現簡單,但是CPU得用率很低,不適用於多任務的系統。

2.中斷方式:當事件發生時,硬件會設置某個寄存器;CPU在執行完一個指令時,查看這個寄存器,如果關注的事件發生了,則中斷當前程序。跳轉到一個固定的地址來處理這個事件,處理完後返回到中斷的程序中繼續運行。

中斷方式特點:實現相對複雜,但是效率較高,是常用方法。

 

中斷的處理流程:

1.中斷控制器彙集各類外發出的中斷信號,然後通知CPU。

2.CPU保存當前程序的運行環境(包括狀態),然後調用中斷服務(IRS)來處理中斷。

3.在ISR中通過讀取外設的相關寄存器來識別中斷的類型,並進行相應的處理。

4.清除中斷:通過讀寫相關中斷控制寄存器和外設相關寄存器來實現。

5.恢復被中斷程序的執行環境,繼續執行被中斷的程序。

中斷的產生過程

SUBSRCPND寄存器:用於標明子中斷(如:INT_RXD0)是否發生。S3C2440有15個子中斷,SUBSRCPND中的每一位對應一個子中斷,當這些子中斷髮生時,相應的位會被標記爲1,清除子中斷只需向SUBSRCPND寄存器相應的位寫入1就可以了。

INTSUBMSK寄存器:用於屏蔽SUBSRCPND寄存器所標示的中斷,INTSUBMSK寄存器中的某一位被設爲1時,剛相應的子中斷也會被屏蔽掉,設爲0時,表示子中斷被允許。

SRCPND寄存器:中的每一位用來標明一個(或者一類)中斷是否發生。例如:SUBSRCPND寄存器中的子中斷INT_RXD0發生了,且沒有給INTSUBMSK屏蔽,則SRCPND的INT_UART0位被置1.SRCPNG寄存器的清除與SUBSRCPND寄存器相似,若想清除某一位,就往對應的位寫入1.

INTMSK寄存器:是用來屏蔽SRCPND所標示的中斷。INMSK的某位被設置爲1時,對應的中斷會被屏蔽,設置爲0時,相應中斷被充許。INTMSK只能屏蔽設爲IRQ的中斷,不屏蔽設爲FIQ的中斷。

INTMOD寄存器中的某位被設置爲1時,他所對應的中斷源會被設置爲FIQ模式,即此中斷髮生時,CPU將進入快速中斷模式,這通常用來處理特別緊急的中斷。當該位被置爲0時,表示爲IRQ模式。

INTPND寄存器經過中斷優先級促栽器選出優先級高的中斷後,這個中斷在INTPND寄器上的某位會被置1,隨後,CPU將進入中斷模式處理它。同一時間內,此寄存器只有一位被置1;在ISR中可以根據這個確定中斷類型,清除中斷是要往此寄存器中寫入0.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章