|
今天學(xué)到HCS12單片機(jī)的中斷,看到可屏蔽中斷請(qǐng)求和不可屏蔽中斷請(qǐng)求有點(diǎn)費(fèi)解,在網(wǎng)上查了一下:
中斷由異步的外部事件引起。外部事件及中斷響應(yīng)與正在執(zhí)行的指令不存在關(guān)系。80386有兩根引腳INTR和NMI接受外部中斷請(qǐng)求信號(hào),INTR接受可屏蔽中斷請(qǐng)求。在80386中,標(biāo)志寄存器EFLAGS中的IF標(biāo)志決定是否屏蔽可屏蔽中斷請(qǐng)求。
處理器必須接受和處理來(lái)自NMI的中斷請(qǐng)求。在80386系統(tǒng)中,處理器在響應(yīng)NMI的中斷向量號(hào)固定為2。為了避免不可屏蔽中斷的嵌套,當(dāng)接受到一個(gè)NMI中斷請(qǐng)求時(shí),處理器自動(dòng)屏蔽所有的NMI的中斷請(qǐng)求,直到執(zhí)行中斷指令I(lǐng)RET后才重新開放NMI中斷請(qǐng)求,所以,NMI處理程序應(yīng)以IRET指令結(jié)束。
什么叫屏蔽中斷?允許中斷?怎樣實(shí)現(xiàn)?
按照是否可以被屏蔽,可將中斷分為兩大類:不可屏蔽中斷(又叫非屏蔽中斷)和可屏蔽中斷。不可屏蔽中斷源一旦提出請(qǐng)求,CPU必須無(wú)條件響應(yīng),而對(duì)可屏蔽中斷源的請(qǐng)求,CPU可以響應(yīng),也可以不響應(yīng)。CPU一般設(shè)置兩根中斷請(qǐng)求輸入線:可屏蔽中斷請(qǐng)求INTR(InterruptRequire)和不可屏蔽中斷請(qǐng)求NMI(NonMaskableInterrupt)。對(duì)于可屏蔽中斷,除了受本身的屏蔽位控制外,還都要受一個(gè)總的控制,即CPU標(biāo)志寄存器中的中斷允許標(biāo)志位IF(IinterruptFlag)的控制,IF位為1,可以得到CPU的響應(yīng),否則,得不到響應(yīng)。IF位可以由用戶控制,指令STI或Turboc的Enable()函數(shù),將IF位置1(開中斷),指令CLI或Turbo_c的Disable()函數(shù),將IF位清0(關(guān)中斷)。
典型的非屏蔽中斷源的例子是電源掉電,一旦出現(xiàn),必須立即無(wú)條件地響應(yīng),否則進(jìn)行其他任何工作都是沒有意義的。典型的可屏蔽中斷源的例子是打印機(jī)中斷,CPU對(duì)打印機(jī)中斷請(qǐng)求的響應(yīng)可以快一些,也可以慢一些,因?yàn)樽尨蛴C(jī)等待兒是完全可以的。
對(duì)于軟中斷,它不受IF位的影響,所以屬于非屏蔽中斷范疇。還有一點(diǎn),細(xì)心的讀者會(huì)想到:CPU只有兩根中斷請(qǐng)求輸入線,有多個(gè)中斷源怎么辦?一般借助于外部電路。
雖然說(shuō)的是80386,但原理是一樣的
一句話:可屏蔽中斷是由總中斷和自己中斷使能位控制執(zhí)行的,而不可屏蔽中斷請(qǐng)求是無(wú)條件執(zhí)行的。
|
|