中斷優(yōu)先級的作用方式是什么?
當多個同級別中斷同時發(fā)出中斷請求時,單片機中斷系統(tǒng)將按照自然優(yōu)先級別進行中斷排序,并首先響應(yīng)其中自然優(yōu)先級別最高的中斷。
當CPU收到中斷請求后,能根據(jù)具體情況決定是否響應(yīng)中斷,如果CPU沒有更急、更重要的工作,則在執(zhí)行完當前指令后響應(yīng)這一中斷請求。CPU中斷響應(yīng)過程如下:首先,將斷點處的PC值(即下一條應(yīng)執(zhí)行指令的地址)推入堆棧保留下來,這稱為保護斷點,由硬件自動執(zhí)行。然后,將有關(guān)的寄存器內(nèi)容和標志位狀態(tài)推入堆棧保留下來,這稱為保護現(xiàn)場,由用戶自己編程完成。保護斷點和現(xiàn)場后即可執(zhí)行中斷服務(wù)程序,執(zhí)行完畢,CPU由中斷服務(wù)程序返回主程序,中斷返回過程如下:首先恢復(fù)原保留寄存器的內(nèi)容和標志位的狀態(tài),這稱為恢復(fù)現(xiàn)場,由用戶編程完成。然后,再加返回指令RETI,RETI指令的功能是恢復(fù)PC值,使CPU返回斷點,這稱為恢復(fù)斷點?;謴?fù)現(xiàn)場和斷點后,CPU將繼續(xù)執(zhí)行原主程序,中斷響應(yīng)過程到此為止。
優(yōu)先權(quán)排隊
通常,系統(tǒng)中有多個中斷源,當有多個中斷源同時發(fā)出中斷請求時,要求計算機能確定哪個中斷更緊迫,以便首先響應(yīng)。為此,計算機給每個中斷源規(guī)定了優(yōu)先級別,稱為優(yōu)先權(quán)。這樣,當多個中斷源同時發(fā)出中斷請求時,優(yōu)先權(quán)高的中斷能先被響應(yīng),只有優(yōu)先權(quán)高的中斷處理結(jié)束后才能響應(yīng)優(yōu)先權(quán)低的中斷。計算機按中斷源優(yōu)先權(quán)高低逐次響應(yīng)的過程稱優(yōu)先權(quán)排隊,這個過程可通過硬件電路來實現(xiàn),亦可通過軟件查詢來實現(xiàn)。
中斷優(yōu)先級的作用方式如下:
1)單片機處理高級別中斷時,無法處理新產(chǎn)生的高級別或低級別中斷請求。高級別中斷的中斷服務(wù)處理程序結(jié)束并通過指令RETI返回時,RETI指令將通知CPU高級別中斷已處理完畢,單片機又可以響應(yīng)新的高級別中斷請求。
2)單片機處理低級別中斷時,無法響應(yīng)和處理新產(chǎn)生的低級別中斷請求。但是,若新產(chǎn)生的是高級別中斷請求,則單片機將暫停當前的低級別中斷服務(wù)處理程序,轉(zhuǎn)而去執(zhí)行新產(chǎn)生的高級別中斷請求的中斷服務(wù)處理程序。該過程就是所謂的中斷嵌套,如圖4-2所示。此后與作用1)中的描述類似,中斷系統(tǒng)不再響應(yīng)其他高級別中斷請求。當嵌套的高級別中斷服務(wù)處理程序結(jié)束返回后,之前被暫時中斷的低級別中斷服務(wù)處理程序?qū)⒗^續(xù)執(zhí)行。最后,該低級別中斷的處理程序結(jié)束并通過RETI返回主程序,同時RETI指令將通知CPU低級別中斷已處理完畢,可以重新開放單片機對低級別中斷請求的響應(yīng)。
圖4-2中斷嵌套圖解
綜上所述,MCS-51單片機有兩個中斷優(yōu)先級別,允許兩級中斷嵌套,其中斷優(yōu)先級別的控制原則為:
1)正在被處理的中斷能夠被新的高級別的中斷請求所中斷。
2)正在被處理的中斷不能被新的同級別的和低級別的中斷請求所中斷。
3)自然優(yōu)先級別僅用于多個同級別中斷請求同時發(fā)生時,其作用是確定這些同級別中斷中,哪一個中斷應(yīng)該被優(yōu)先處理。
為了避免將自然優(yōu)先級別與中斷優(yōu)先級別(僅包含高優(yōu)先級別和低優(yōu)先級別)相混淆,現(xiàn)舉例說明。
【例4-1】中斷自然優(yōu)先級別的使用。請分別回答以下兩個問題。
問題1:假設(shè)單片機當前沒有處理任何中斷,并且所有中斷源均被設(shè)置為高級別中斷(即PX0=1、PT0=1、PX1=1、PT1=1和PS=1),則若外部中斷0和串口同時發(fā)出中斷請求,哪個中斷請求會被單片機優(yōu)先處理?
解:外部中斷0將被單片機優(yōu)先處理。因為所有中斷源都被設(shè)定為高級別中斷,所以當它們同時發(fā)生中斷請求時,單片機將按照表4-5所示的自然優(yōu)先級別對外部中斷0和串口中斷排序,并且外部中斷0因為其自然優(yōu)先級別高于串口中斷而被單片機優(yōu)先處理。
問題2:假設(shè)所有中斷源均被設(shè)置為高級別中斷(即PX0=1、PT0=1、PX1=1、PT1=1和PS=1),并且單片機當前正在處理串口中斷,則若外部中斷0和外部中斷1同時發(fā)出中斷請求,哪個中斷請求會被單片機處理?
解:這兩個中斷都不會被單片機處理。因為,當前正被單片機處理的串口中斷是高級中斷,并且新發(fā)生的中斷請求的外部中斷0和外部中斷1也都是高級別中斷,而一個中斷不能被同級別中斷打斷。