|
本帖最后由 yzwzfyz 于 2022-8-23 08:23 編輯
有頭腦,善于思考問題。汝子可教也!
1、中斷是不是響應(yīng),取決于中斷源自己的標(biāo)記:F。(其它的中斷允許、屏蔽不在此討論,并假設(shè)中斷源標(biāo)記是 F)。
對于 F的清除有兩種方式(具體看手冊):
其一、響應(yīng)后CPU硬件自動清除。其二響應(yīng)后需人工清除。
2、在你進(jìn)入中斷程序后(已響應(yīng)),就不會再響應(yīng)本源的中斷。假如你已清除了F,而這時中斷源又動作了,它只能將F置1,無法做任何事,中斷N次,也只是將F置1而矣,一次與N次都一樣。
3、當(dāng)你退出中斷服務(wù)程序后(以RETI為標(biāo)志),CPU硬件會再次識別F是否為1。是1則再次響應(yīng)。CPU并不識別中斷源動作了多少次,而只識別F是否為1。
4、在你進(jìn)入中斷程序后(已響應(yīng)),中斷源又動作了N次,它只能將F置1,而你在退出中斷之前,又做了一個【缺德】的事,清F清0了!這時,你再退出中斷服務(wù)程序后。程序不會再進(jìn)入中斷,因為CPU看不見F了。
CPU響應(yīng)中斷有以下條件:
1、本源F標(biāo)記=1。
2、中斷被允許。
3、無更高級或同級中斷已被響應(yīng)。
4、當(dāng)前指令已執(zhí)行結(jié)束(當(dāng)前指令未執(zhí)行完不響應(yīng))。
5、RETI 的一條指令已被執(zhí)行(看手冊,是否有這一條。一些單片機需要RETI后再執(zhí)行1-2條指令才能識別到F)。
總結(jié):
1、中斷源動作只能使 F=1,并不能讓CPU立即響應(yīng)中斷。
2、中斷源動作N次,在未被CPU響應(yīng)之前,只有最后一個起作用,CPU不識別動作次數(shù)。
3、中斷源動作N次,而中斷已被CPU響應(yīng),是否再次被響應(yīng),取決于本次中斷服務(wù)程序退出時,F(xiàn)是否為1。當(dāng)然如果有更高級的中斷發(fā)生,即使未退出,也被搶了。 |
|