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