原创 保护IE和单级隐身在中断嵌套时是不可靠的

2006-12-30 01:34 4533 9 9 分类: MCU/ 嵌入式
保护IE和单级隐身在中断嵌套时是不可靠的
mood0.gif HotPower 发表于 2004-7-10 19:30:22 侃单片机 ←返回版面 按此给该网友发送邮件 按此察看该网友的资料 按此把文章加入收藏夹



在中断嵌套时,高级别中断可能采取“自毁中断”,即关闭自身的中断允许位。
例:在采用串行中断发送数据时,常在发送最后一个字节后关闭ES.
    若在低级别中断中保护IE,则高级别关闭的ES位会被误打开。
    所以,最好不要惹恼IE,SP等特殊寄存器。
再者,我前面的隐身帖主要是用于低级别中断隐身的,高级别会出现问题的。
    由于采用2次reti,其中第2次认为隐身程序已“降级”。
但在高级别中断隐身时,虽隐身程序已“降级”,但高级别中断嵌套返回低级别中断时,2次reti将会使低级别中断“强行降级”的,使低级别中断失去了中断特权。
所以,全面的隐身应该按以下例子为好。

intprgl:;低级别中断
       push  acc
       push  psw
       push  dpl
       push  dph
       .....
       acall intexitl
       acall subl;低级别隐身程序(允许2次reti)
       pop   dph
       pop   dpl
       pop   psw
       pop   acc
intexitl:
       reti

subl:
       push  30h
       .......
       pop   30h
       ret       

intprgh:;高级别中断
       push  acc
       push  psw
       push  dpl
       push  dph
       .....
       acall intexith
       mov   dptr,#intquith;高级别中断隐身返回地址
       push  dpl;压入返回地址低位
       push  dph;压入返回地址高位
       ljmp  subh;高级别隐身程序(不允许2次reti)
........................
;高级别中断正常返回
       pop   dph
       pop   dpl
       pop   psw
       pop   acc
intexith:
       reti
intquith:;高级别中断隐身返回
       pop   dph
       pop   dpl
       pop   psw
       pop   acc
       ret

subh:
       push  31h
       .......
       pop   31h
       clr   ES;中断自毁(例ET2,ES,ET1.EX1,ET1,EX0)
       ret       


个人意见:中断隐身技术不到万不得已,最好少用为好。。。
          若用,则必须头脑冷静。。。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条