飛思卡爾HCS12中斷
在進(jìn)入中斷服務(wù)程序時(shí),I位自動(dòng)置1,禁止其他可屏蔽中斷
即使有優(yōu)先級(jí)更高的中斷請(qǐng)求,也必須等當(dāng)前中斷服務(wù)程序執(zhí)行完以后才能響應(yīng)
優(yōu)先級(jí)的作用只有在多個(gè)中斷源同時(shí)請(qǐng)求中斷時(shí)在能體現(xiàn)
無(wú)法實(shí)現(xiàn)中斷嵌套
如果在進(jìn)入中斷服務(wù)程序時(shí),手動(dòng)對(duì)I位清零:
任何其他可屏蔽中斷都可以被響應(yīng),無(wú)論其優(yōu)先級(jí)有多高
中斷響應(yīng)由時(shí)間控制,可以實(shí)現(xiàn)中斷嵌套
對(duì)中斷執(zhí)行無(wú)法預(yù)測(cè)
HPRIO寄存器
寫入HPRIO中的中斷向量的后八位,可以改變?cè)撝袛嗟膬?yōu)先級(jí)
同樣,優(yōu)先級(jí)的作用只有在多個(gè)中斷源同時(shí)請(qǐng)求中斷時(shí)在能體現(xiàn)
1:在中斷服務(wù)程序中,首先對(duì)I為清零,即EnableInterrupts
2:選擇優(yōu)先級(jí)更高的中斷源可以進(jìn)入響應(yīng)中斷
3:設(shè)置優(yōu)先等級(jí)
一個(gè)中斷源為低優(yōu)先級(jí),其他為高優(yōu)先級(jí)
在低優(yōu)先級(jí)中斷服務(wù)程序中,對(duì)I位清零
在高優(yōu)先級(jí)中斷服務(wù)程序中,不清零
(二)多級(jí)
利用局部的中斷屏蔽位
比如Timer Channel0 的中斷屏蔽位
例如:
--中斷向量地址 $FFF0 – FFF1 為低優(yōu)先級(jí)
--其他的中斷為高優(yōu)先級(jí)
--在$FFF0 – FFF1 中斷服務(wù)程序中,EnableInterrupts(I位清零)
--其他的中斷包括自己都可以在中斷服務(wù)程序執(zhí)行時(shí),被響應(yīng)
--在其他的中斷服務(wù)程序中,I位不清零(默認(rèn))
--只有當(dāng)前中斷服務(wù)程序執(zhí)行完后,才能響應(yīng)其他的中斷請(qǐng)求
自定義優(yōu)先級(jí) | 中斷向量地址 | 中斷源 | CCR屏蔽位 | 局部屏蔽位 | HPRIO |
1 中 | $FFEE,$FFEF | ECT通道0 | I | TIE_C0I | $EE |
0 低 | $FFEC,$FFED | ECT通道1 | I | TIE_C1I | $EC |
2 高 | $FFEA,$FFEB | ECT通道2 | I | TIE_C2I | $EA |
要求: 在低優(yōu)先級(jí)的中斷服務(wù)程序中,高優(yōu)先級(jí)的中斷請(qǐng)求可以被響應(yīng)
HPRIO = 0xEA:ECT0,1,2同時(shí)請(qǐng)求中斷時(shí),CPU將會(huì)首先響應(yīng)通道2
默認(rèn)時(shí),CPU將會(huì)首先響應(yīng)通道0
優(yōu)先機(jī)制-多級(jí)
情況 1:
每個(gè)中斷都單獨(dú)發(fā)生,在一個(gè)中斷程序執(zhí)行時(shí),沒(méi)有其他中斷
情況 2:
在執(zhí)行ECT1的中斷服務(wù)程序時(shí),ECT0請(qǐng)求中斷
ECT0中斷服務(wù)程序?qū)⒈粓?zhí)行
情況 3:
在執(zhí)行ECT2的中斷服務(wù)程序時(shí),ECT0請(qǐng)求中斷
ECT2的中斷服務(wù)程序執(zhí)行結(jié)束后,執(zhí)行ECT0的中斷服務(wù)程序
情況 4:
ECT1,ECT2同時(shí)請(qǐng)求中斷
情況 1:
每個(gè)中斷都單獨(dú)發(fā)生,在一個(gè)中斷程序執(zhí)行時(shí),沒(méi)有其他中斷
情況 2:
在執(zhí)行ECT1的中斷服務(wù)程序時(shí),ECT0請(qǐng)求中斷
ECT0中斷服務(wù)程序?qū)⒈粓?zhí)行
情況 3:
在執(zhí)行ECT2的中斷服務(wù)程序時(shí),ECT0請(qǐng)求中斷
ECT2的中斷服務(wù)程序執(zhí)行結(jié)束后,執(zhí)行ECT0的中斷服務(wù)程序
情況 4:
ECT1,ECT2同時(shí)請(qǐng)求中斷
ECT1的中斷服務(wù)程序先執(zhí)行,當(dāng)EnableInterrupts后
執(zhí)行ECT2的中斷服務(wù)程序
ECT2的中斷服務(wù)程序執(zhí)行結(jié)束后,返回執(zhí)行ECT1的中斷服務(wù)程序
在ECT0中斷服務(wù)程序中:
TIE_C1I = 0; //關(guān)閉ECT1局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
EnableInterrupts; //開放全局中斷
…
TIE_C1I = 1; //開放ECT1局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
在ECT1中斷服務(wù)程序中(自定義優(yōu)先級(jí)最低):
TIE_C0I = 1; //開放ECT0局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
EnableInterrupts; //開放全局中斷
…
TIE_C0I = 1; //開放ECT0局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
在ECT2中斷服務(wù)程序中(自定義優(yōu)先級(jí)最高):
用戶程序
執(zhí)行ECT2的中斷服務(wù)程序
ECT2的中斷服務(wù)程序執(zhí)行結(jié)束后,返回執(zhí)行ECT1的中斷服務(wù)程序
TIE_C1I = 0; //關(guān)閉ECT1局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
EnableInterrupts; //開放全局中斷
…
TIE_C1I = 1; //開放ECT1局部中斷
TIE_C2I = 1; //開放ECT2局部中斷
在ECT1中斷服務(wù)程序中(自定義優(yōu)先級(jí)最低):
TIE_C0I = 1;
TIE_C2I = 1;
EnableInterrupts; //開放全局中斷
…
TIE_C0I = 1;
TIE_C2I = 1;
在ECT2中斷服務(wù)程序中(自定義優(yōu)先級(jí)最高):
用戶程序
評(píng)論