在單片機(jī)系統(tǒng)中,我們把產(chǎn)生中斷的請求源稱為中斷源,它是指引起中斷發(fā)生的事件、設(shè)備、部件。中斷源可以是外部設(shè)備,如打印機(jī)、鍵盤、鼠標(biāo)等,它們與計算機(jī)進(jìn)行輸入/輸出數(shù)據(jù)交換時需向cpu發(fā)出中斷請求。
一般計算機(jī)系統(tǒng)允許有多個中斷源,當(dāng)幾個中斷源同時向cpu發(fā)出中斷請求,一般情況下cpu會優(yōu)先處理最緊急的中斷請求,計算機(jī)必須根據(jù)中斷源的輕重緩急進(jìn)行排隊(duì),這就必須給每個中斷源的中斷請求賦予一個中斷優(yōu)先級,以反映每個中斷源的中斷請求響應(yīng)的優(yōu)先程度。
單片機(jī)系統(tǒng)通常有多個中斷源,經(jīng)常會出現(xiàn)多個中斷源同時申請中斷的情況。但是cpu在每一個時刻,只能執(zhí)行一個中斷,此時,cpu將會根據(jù)中斷源的重要程度執(zhí)行中斷。程序開發(fā)人員在程序設(shè)計的過程中需要根據(jù)任務(wù)的重要順序安排一個中斷響應(yīng)的優(yōu)先順序,中斷源的這種優(yōu)先順序常被稱為中斷優(yōu)先級別,通常最重要的任務(wù)或者事件的級別最高,然后依次降級排列。
當(dāng)多個中斷源同時申請中斷時,cpu會首先響應(yīng)優(yōu)先級最高的中斷請求,在優(yōu)先級最高的中斷處理完成之后,再響應(yīng)級別較低的中斷。當(dāng)cpu正在處理某個中斷時,若出現(xiàn)了更高級的新的中斷請求,cpu應(yīng)能停止正在進(jìn)行的中斷處理,轉(zhuǎn)去處理更高優(yōu)先級的中斷。這種掛起正在處理的中斷而轉(zhuǎn)去響應(yīng)更高級別的中斷稱中斷嵌套。如果新的中斷請求是相同級別的或更低級別的,則cpu不予理睬,直到正在執(zhí)行的中斷服務(wù)程序運(yùn)行完畢后才去響應(yīng)新的中斷請求。
中斷響應(yīng)可以分為以下幾個步驟進(jìn)行。
(1) 保護(hù)斷點(diǎn)。保存下一條將要執(zhí)行的指令的地址,就是把這個地址送入堆棧。
(2) 尋找中斷入口。中斷入口地址又稱為中斷矢量。根據(jù)8個不同的中斷源所產(chǎn)生的中斷,查找相應(yīng)中斷服務(wù)程序的入口地址,這個時候計算機(jī)的程序計數(shù)器pc就指向中斷服務(wù)程序所在的地址。以上工作是由計算機(jī)自動完成的,與程序的設(shè)計無關(guān)。在這8個入口地址處存放有中斷處理程序(這是程序編寫時放在那兒的,如果沒把中斷程序放在那兒,就錯了,中斷程序就不能被執(zhí)行到)。
(3) 執(zhí)行中斷處理程序。這個時候程序計數(shù)器pc就逐條執(zhí)行中斷服務(wù)程序,直到程序執(zhí)行完成為止。
(4) 中斷返回。執(zhí)行完中斷指令后,需要把原來保存在堆棧里面的地址返回來,這個時候程序計數(shù)器pc就重新指向原來的主程序,繼續(xù)執(zhí)行原來的程序。