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