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