什么是中斷響應(yīng)過(guò)程?什么是中斷服務(wù)處理程序結(jié)構(gòu)?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
大多數(shù)中斷系統(tǒng)都具有如下幾方面的操作,這些操作是按照中斷的執(zhí)行先后次序排列的。
①接收中斷請(qǐng)求。
②查看本級(jí)中斷屏蔽位,若該位為1則本級(jí)中斷源參加優(yōu)先權(quán)排隊(duì)。
③中斷優(yōu)先權(quán)選擇。
④處理機(jī)執(zhí)行完一條指令后或者這條指令已無(wú)法執(zhí)行完,則立即中止現(xiàn)行程序。接著,中斷部件根據(jù)中斷級(jí)去指定相應(yīng)的主存單元,并把被中斷的指令地址和處理機(jī)當(dāng)前的主要狀態(tài)信息存放在此單元中。
⑤中斷部件根據(jù)中斷級(jí)又指定另外的主存單元,從這些單元中取出處理機(jī)新的狀態(tài)信息和該級(jí)中斷控制程序的起始地址。
⑥執(zhí)行中斷控制程序和相應(yīng)的中斷服務(wù)程序。
⑦執(zhí)行完中斷服務(wù)程序后,利用專(zhuān)用指令使處理機(jī)返回被中斷的程序或轉(zhuǎn)向其他程序。
按照時(shí)間順序,單片機(jī)中斷處理可分為以下幾個(gè)階段:中斷請(qǐng)求、中斷響應(yīng)、中斷服務(wù)、中斷返回。
(1)中斷請(qǐng)求
單片機(jī)通過(guò)查詢(xún)的方式發(fā)現(xiàn)中斷請(qǐng)求,對(duì)中斷的查詢(xún)發(fā)生在每個(gè)機(jī)器周期的S5P2階段(見(jiàn)圖2-12)。有中斷請(qǐng)求發(fā)生時(shí),對(duì)應(yīng)的中斷請(qǐng)求標(biāo)志位被置1。對(duì)于MCS-51單片機(jī),只要中斷請(qǐng)求標(biāo)志位為1,單片機(jī)就認(rèn)為發(fā)生了對(duì)應(yīng)的中斷請(qǐng)求。
另外,除了真實(shí)有效的中斷請(qǐng)求可以使中斷請(qǐng)求標(biāo)志位置1外,還可通過(guò)軟件指令將中斷請(qǐng)求標(biāo)志位置1,如:指令“SETB TF1”可將TF1置1。并且單片機(jī)無(wú)法判斷出中斷請(qǐng)求標(biāo)志位是因?qū)嶋H發(fā)生的中斷請(qǐng)求而被置1,還是被程序指令置1。因此,通過(guò)指令將中斷請(qǐng)求標(biāo)志位置1,也可以產(chǎn)生有效的中斷請(qǐng)求。
(2)中斷響應(yīng)條件
單片機(jī)響應(yīng)中斷時(shí)必須符合以下中斷響應(yīng)條件:
1)中斷源沒(méi)有被屏蔽。
2)中斷請(qǐng)求符合中斷優(yōu)先級(jí)控制原則被確定。
3)不打斷正在執(zhí)行的指令。若正在執(zhí)行的是RET、RETI指令或指令正在訪問(wèn)IE或IP寄存器,則單片機(jī)要在該指令結(jié)束后至少再執(zhí)行一條指令,才能響應(yīng)中斷。這樣處理的目的
是不干擾單片機(jī)的中斷邏輯,因?yàn)橹噶頡ET、RETI和寄存器IE、IP都會(huì)直接影響當(dāng)前單片機(jī)的中斷邏輯和處理過(guò)程。
(3)中斷響應(yīng)過(guò)程
單片機(jī)的程序存放在程序存儲(chǔ)器ROM中。在ROM中有一些存儲(chǔ)單元的地址具有特殊意義,見(jiàn)表4-6,這些地址被稱(chēng)為中斷入口地址,這些地址所對(duì)應(yīng)的ROM存儲(chǔ)單元用于存放中斷服務(wù)處理程序。
由表4-6可知,相鄰程序入口地址之差為8H。這意味著單片機(jī)系統(tǒng)中斷服務(wù)處理程序的長(zhǎng)度不能超過(guò)8B。但是通常單片機(jī)程序不會(huì)如此之短,所以在實(shí)際應(yīng)用中總是將中斷服務(wù)處理程序放在地址較大的其他存儲(chǔ)單元,而僅在程序入口地址所對(duì)應(yīng)的ROM單元中放一條可使程序跳轉(zhuǎn)至中斷服務(wù)處理程序的跳轉(zhuǎn)指令,如:在圖4-3所示程序中,指令“LJMP INT_0”用于控制程序跳轉(zhuǎn)至外部中斷0的中斷服務(wù)處理程序“INT_0”。
圖4-3典型中斷服務(wù)處理程序結(jié)構(gòu)
圖4-3是一個(gè)包含中斷服務(wù)處理程序的典型程序結(jié)構(gòu)框架。該圖中的箭頭展示了從主程序執(zhí)行、單片機(jī)暫停主程序、跳轉(zhuǎn)至外部中斷0中斷服務(wù)程序直至返回主程序的全過(guò)程。其中,實(shí)線箭頭是主程序執(zhí)行過(guò)程;虛線箭頭是中斷服務(wù)處理程序的執(zhí)行過(guò)程;空心圓圈代表中斷發(fā)生的位置,即斷點(diǎn)的位置。
在上述過(guò)程中,以下兩個(gè)步驟非常關(guān)鍵:
1)中斷請(qǐng)求被響應(yīng)后,使程序跳轉(zhuǎn)至正確的中斷入口。
2)中斷服務(wù)處理程序結(jié)束后,繼續(xù)執(zhí)行之前被中斷的主程序。
單片機(jī)完成這兩個(gè)關(guān)鍵步驟的方法或過(guò)程如下:
(1)跳轉(zhuǎn)至中斷服務(wù)處理程序
單片機(jī)硬件能夠識(shí)別出被響應(yīng)的中斷源。當(dāng)中斷被響應(yīng)后,單片機(jī)通過(guò)硬件LCALL指令實(shí)現(xiàn)向中斷入口的跳轉(zhuǎn)。該硬件LCALL指令首先將斷點(diǎn)地址壓入堆棧中(為中斷返回做準(zhǔn)備);然后將中斷源的中斷入口地址送入程序計(jì)數(shù)器(PC),以使程序跳轉(zhuǎn)至中斷入口去執(zhí)行中斷服務(wù)處理程序。
(2)從中斷服務(wù)處理程序返回
中斷服務(wù)處理程序通過(guò)指令RETI返回。RETI指令實(shí)際完成如下兩個(gè)操作中:1)將被硬件LCALL指令壓入堆棧的斷點(diǎn)地址彈出并送入PC,以使程序返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行;2)通知CPU中斷已處理完畢,可以開(kāi)放與該中斷同級(jí)別的中斷。這里再次強(qiáng)調(diào),RETI指令與RET指令不能互換使用,因?yàn)镽ET不具備清0中不進(jìn)行RETI的操作2)。