中斷嵌套

是指中斷系統正在執行一個中斷服務時,有另一個優先權更高的中斷提出中斷請求,這時會暫時終止當前正在執行的級別較低的中斷源的服務程式,去處理級別更高的中斷源,待處理完畢,再返回到被中斷了的中斷服務程式繼續執行,這個過程就是中斷嵌套。

基本介紹

  • 中文名:中斷嵌套
  • 所屬中斷系統
  • 基礎:正在執行一個中斷服務時
  • 別稱:加塞
簡介,中斷優先權,定義,查詢優先權,執行優先權,中斷嵌套,例1,例2,中斷處理,清除中斷標誌位,多級中斷特點,

簡介

是指中斷系統正在執行一個中斷服務時,有另一個優先權更高的中斷提出中斷請求,這時會暫時終止當前正在執行的級別較低的中斷源的服務程式,去處理級別更高的中斷源,待處理完畢,再返回到被中斷了的中斷服務程式繼續執行,這個過程就是中斷嵌套。
其實就是更高一級的中斷的“加塞”,處理器正在執行著中斷,又接受了更急的另一件“急件”,轉而處理更高一級的中斷的行為!

中斷優先權

定義

優先權高的中斷源可以中斷優先權低的中斷服務程式,這就形成了中斷服務程式中套著中斷服務程式的情況,即形成了所謂的中斷嵌套。
MCU暫停現行程式而轉去回響中斷請求的過程稱為中斷回響;為使系統能及時回響並處理髮生的所有中斷,系統根據引起中斷事件的重要性和緊迫程式,硬體將中斷源分為若干個級別,稱作中斷優先權。

查詢優先權

中斷的優先權有兩個:查詢優先權和執行優先權。
查詢優先權是datasheet或書上的默認(IP暫存器不做設定,上電復位後為00H)的優先權:
外部中斷0> 定時/計數器0 > 外部中斷1 > 定時/計數器1 > 串列中斷
或int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART
或PX0>PT0>PX1>PT1>PS>......
其實都是查詢優級。首先查詢優先權是不可以更改和設定的。這是一個中斷優先權排隊的問題,是指多個中斷源同時產生中斷信號時,中斷仲裁器選擇對哪箇中斷源優先處理的順序。而這與是否發生中斷服務程式的嵌套毫不相干。當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

1 在各箇中斷都是低優先權的時候,如果定時器0的溢出進入中斷。在這個中斷處理的過程中,外部中斷0也被觸發了,那么是不是要發生中斷嵌套?
答案1:在IP事先設定了外部中斷0的優先權的情況下,CPU會中止定時器0的中斷服務,進入外部中斷0服務程式,執行完以後再回到定時器0中斷服務程式。否則不會。

例2

2 如果定時器0發生中斷的時候,進入中斷處理程式,這個時候外部中斷1條件觸發條件滿足了。因為定時器0自然優先權比外部中斷1高,那么定時器0的中斷處理程式繼續執行。假設定時器中斷處理程式執行的過程中,外部中斷1的觸發。條件消失了,那么等定時器0的中斷處理完後,程式還是會進入外部中斷1處理程式嗎?
答案2:肯定會進入中斷的;外部中斷1的觸發條件滿足後會置位外部1的中斷標誌,即使後來外部中斷1的觸發條件消失了,也不會清除已置位的中斷標誌,所以等定時器0的中斷處理完後,程式判斷外部中斷的中斷標誌為1後依然會進入外部中斷1處理程式的,只有在外部中斷1處理程式中執行reti指令才會硬體清除外部中斷1的中斷標誌(這也正是為什麼中斷返回使用reti指令而不可以用ret替換的原因)...

中斷處理

中斷處理分為四個階段:
1、保存被中斷程式的現場,其目的是為了在中斷處理完之後,可以返回到原來被中斷的地方繼續執行;
2、分析中斷源,判斷中斷原因,當同時有多箇中斷同時請求的時候還要考慮中斷的優先權;
3、轉去執行相應的處理程式;
4、恢復被中斷程式現場,繼續執行被中斷程式。

清除中斷標誌位

MCU清除中斷標誌位有兩種方式
一種是通過軟體代碼往這箇中斷標誌位的暫存器裡面寫“1”來完成標誌位的清零操作
第二種是當MCU回響中斷,執行中斷服務程式的時候(也就是程式計數器指針跳轉到了中斷服務程式代碼區),由硬體自動執行清零操作。

多級中斷特點

1、一個系統若有n級中斷,在MCU中就有n個中斷請求觸發器,總稱為中斷請求暫存器;與之對應的有n個中斷禁止觸發器,總稱為中斷禁止暫存器。與單級中斷不同,在多級中斷中,中斷禁止暫存器的內容是一個很重要的程式現場,因此在回響中斷時,需要把中斷禁止暫存器的內容保存起來,並設定新的中斷禁止狀態。一般在某一級中斷被回響後,要置“1 ”(關閉)本級和優先權低於本級的中斷禁止觸發器,置“0”(開放)更高級的中斷禁止觸發器,以此來實現正常的中斷嵌套。
2、 多級中斷中的每一級可以只有一個中斷源,也可以有多箇中斷源。在多級中斷之間可以實現中斷嵌套,但是同一級內有不同中斷源的中斷是不能嵌套的,必須是處理完一個中斷後再回響和處理同一級內其他中斷源。

相關詞條

熱門詞條

聯絡我們