-
中斷嵌套
鎖定
- 中文名
- 中斷嵌套
- 別 名
- 加塞
- 基 礎
- 正在執行一箇中斷服務時
- 所屬分類
- 中斷系統
中斷嵌套簡介
其實就是更高一級的中斷的“加塞”,處理器正在執行着中斷,又接受了更急的另一件“急件”,轉而處理更高一級的中斷的行為!
中斷嵌套優先級
中斷嵌套定義
中斷嵌套查詢
中斷的優先級有兩個:查詢優先級和執行優先級。
查詢優先級是datasheet或書上的默認(IP寄存器不做設置,上電覆位後為00H)的優先級:
外部中斷0> 定時/計數器0> 外部中斷1 > 定時/計數器1 > 串行中斷
其實都是查詢優級。首先查詢優先級是不可以更改和設置的。這是一個中斷優先權排隊的問題,是指多個中斷源同時產生中斷信號時,中斷仲裁器選擇對哪個中斷源優先處理的順序。而這與是否發生中斷服務程序的嵌套毫不相干。當CPU查詢各個中斷標誌位的時候,會依照上述5個查詢優先級順序依次查詢,當數箇中斷同時請求的時候,會優先查詢到高優查詢先級的中斷標誌位,但並不代表高查詢優先級的中斷可以打斷已經並且正在執行的低查詢優先級的中斷服務。
例如:當計數器0中斷和外部中斷1(按查詢優先級,計數器0中斷>外部中斷1)同時到達時,會進入計時器0的中斷服務函數;但是在外部中斷1的中斷服務函數正在服務的情況下,這時候任何中斷都是打斷不了它的,包括邏輯優先級比它高的外部中斷0計數器0中斷。
中斷嵌套執行
中斷的執行優先級就是你對IP寄存器的設置了。在2個優先級的情況下,某位為1,則相應的中斷源為高優先級;為0,則為低優先級。
關於中斷的優先級有三條原則:
1、CPU同時接收到幾個中斷時,首先響應優先級最高的中斷請求;
2、正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷;
3、正在進行的低優先級中斷服務,能被高優先級中斷請求中斷;
若:同一執行優先級中的中斷申請不止一個時,則有一箇中斷優先權排隊問題。同一執行優先級中斷的排隊,由中斷系統硬件確定的自然優先級形成,優先權自高到低的順序即:
外部中斷0>定時/計數0>外部中斷1>定時/計數1>串行接口
例如:設置IP =0x10,即設置串口中斷為最高優先級,則串口中斷可以打斷任何其他的中斷服務函數實現嵌套,且只有串口中斷能打斷其他中斷的服務函數。若串口中斷沒有觸發,則其他幾個中斷之間還是保持邏輯優先級,相互之間無法嵌套。
中斷嵌套執行操作
關於中斷嵌套。可以這樣説,當一箇中斷正在執行的時候,如果事先設置了中斷優先級寄存器IP,那麼當一個更高優先級的中斷到來的時候會發生中斷嵌套,如果沒有設置則不會發生任何嵌套;如果有同一個優先級的中斷觸發,它並不是在“不斷的申請”,而是將它相應的中斷標誌位置即IE寄存器的某位置位,當CPU執行完當前中斷之後,按照查詢優先級重新去查詢各個中斷標誌位,進入相應中斷。
要記住,沒有設置IP時,單片機會按照查詢優先級(或都説邏輯優先級)來排隊進入服務。如果要想讓某個中斷優先響應,則要設置IP,更改執行優先級(或者説物理優先級)。要注意的是,當設置了IP(Interrupt priority即中斷優先級,後同)後,當低執行優先級中斷在運行時,如果有高執行優先級的中斷產生,則會嵌套調用進入高執行優先級的中斷。如果你是用C語言寫的程序,並在中斷服務時 using 了寄存組,要注意,優先級不同的兩個中斷服務程序不要 using 同一組寄存器。
例1
例2
2 如果定時器0發生中斷的時候,進入中斷處理程序,這個時候外部中斷1條件觸發條件滿足了。因為定時器0自然優先級比外部中斷1高,那麼定時器0的中斷處理程序繼續執行。假設定時器中斷處理程序執行的過程中,外部中斷1的觸發。條件消失了,那麼等定時器0的中斷處理完後,程序還是會進入外部中斷1處理程序嗎?
答案2:肯定會進入中斷的;外部中斷1的觸發條件滿足後會置位外部1的中斷標誌,即使後來外部中斷1的觸發條件消失了,也不會清除已置位的中斷標誌,所以等定時器0的中斷處理完後,程序判斷外部中斷的中斷標誌為1後依然會進入外部中斷1處理程序的,只有在外部中斷1處理程序中執行reti指令才會硬件清除外部中斷1的中斷標誌(這也正是為什麼中斷返回使用reti指令而不可以用ret替換的原因)...
中斷嵌套中斷處理
中斷處理分為四個階段:
1、保存被中斷程序的現場,其目的是為了在中斷處理完之後,可以返回到原來被中斷的地方繼續執行;
3、轉去執行相應的處理程序;
4、恢復被中斷程序現場,繼續執行被中斷程序。
中斷嵌套清除方式
MCU清除中斷標誌位有兩種方式
中斷嵌套中斷特點
1、一個系統若有n級中斷,在MCU中就有n個中斷請求觸發器,總稱為中斷請求寄存器;與之對應的有n個中斷屏蔽觸發器,總稱為中斷屏蔽寄存器。與單級中斷不同,在多級中斷中,中斷屏蔽寄存器的內容是一個很重要的程序現場,因此在響應中斷時,需要把中斷屏蔽寄存器的內容保存起來,並設置新的中斷屏蔽狀態。一般在某一級中斷被響應後,要置“1 ”(關閉)本級和優先權低於本級的中斷屏蔽觸發器,置“0”(開放)更高級的中斷屏蔽觸發器,以此來實現正常的中斷嵌套。
2、 多級中斷中的每一級可以只有一箇中斷源,也可以有多箇中斷源。在多級中斷之間可以實現中斷嵌套,但是同一級內有不同中斷源的中斷是不能嵌套的,必須是處理完一箇中斷後再響應和處理同一級內其他中斷源。
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:27次歷史版本
- 最近更新: 笛頔