默许状况:
在进入中止服务程序时,I位主动置1,制止其他可屏蔽中止
即便有优先级更高的中止恳求,也有必要等当时中止服务程序履行完今后才干呼应
优先级的效果只要在多个中止源一起恳求中止时在能表现
无法完成中止嵌套
如果在进入中止服务程序时,手动对I位清零:
任何其他可屏蔽中止都能够被呼应,不管其优先级有多高
中止呼应由时刻操控,能够完成中止嵌套
对中止履行无法猜测
HPRIO寄存器
写入HPRIO中的中止向量的后八位,能够改动该中止的优先级
相同,优先级的效果只要在多个中止源一起恳求中止时在能表现
1:在中止服务程序中,首要对I为清零,即EnableInterrupts
2:挑选优先级更高的中止源能够进入呼应中止
3:设置优先等级
一个中止源为低优先级,其他为高优先级
在低优先级中止服务程序中,对I位清零
在高优先级中止服务程序中,不清零
(二)多级
使用部分的中止屏蔽位
比方Timer Channel0 的中止屏蔽位
例如:
–中止向量地址 $FFF0 – FFF1 为低优先级
–其他的中止为高优先级
–在$FFF0 – FFF1 中止服务程序中,EnableInterrupts(I位清零)
–其他的中止包含自己都能够在中止服务程序履行时,被呼应
–在其他的中止服务程序中,I位不清零(默许)
–只要当时中止服务程序履行完后,才干呼应其他的中止恳求
自定义优先级
|
中止向量地址
|
中止源
|
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
|
状况 1:
每个中止都独自产生,在一个中止程序履行时,没有其他中止
状况 2:
在履行ECT1的中止服务程序时,ECT0恳求中止
ECT0中止服务程序将被履行
状况 3:
在履行ECT2的中止服务程序时,ECT0恳求中止
ECT2的中止服务程序履行完毕后,履行ECT0的中止服务程序
状况 4:
ECT1,ECT2一起恳求中止
履行ECT2的中止服务程序
ECT2的中止服务程序履行完毕后,回来履行ECT1的中止服务程序
TIE_C1I = 0; //封闭ECT1部分中止
TIE_C2I = 1; //敞开ECT2部分中止
EnableInterrupts; //敞开大局中止
…
TIE_C1I = 1; //敞开ECT1部分中止
TIE_C2I = 1; //敞开ECT2部分中止
在ECT1中止服务程序中(自定义优先级最低):
TIE_C0I = 1;
TIE_C2I = 1;
EnableInterrupts; //敞开大局中止
…
TIE_C0I = 1;
TIE_C2I = 1;
在ECT2中止服务程序中(自定义优先级最高):
用户程序