打印

请问关于中断IE的问题

[复制链接]
1885|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ttdepend|  楼主 | 2008-5-27 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在《SinoWealth 4bit MCU application guide(200707).pdf》page82我们可以看到:
a) 中断允许位(IE)在系统进入中断服务程序后自动由硬件清零,如果在中
断服务程序中IE 置起过早,可能由于IRQ 在IE 置起前没有清零,或在IE 置起后,
中断服务程序退出前又有中断事件产生,就会导致中断嵌套,当堆栈的层数超过
限制时将导致系统复位,所以最好是在中断返回指令RTNI 前才将IE 置起;
例如:
:
LDI IRQ,0 ;clear the interrupt flag
LDI IE,0FH ;set the interrupt enable control bit for next interrupt
RTNI
沙发
ttdepend|  楼主 | 2008-5-27 20:43 | 只看该作者

re

1.从上面可以看出,如果进入了某一中断,那么IE都会被清0.
2.我现在的应用是需要T0,T2,KEY中断。T0用来控制LED灯闪烁,T2用来计时,KEY做按键。有KEY按键按下,开始计时;判断有异常事件,那么T0开,LED灯闪。
  假如有按键后,我开始计时,这时T2和KEY的中断都会打开,那么这个功能是没问题,但是假如这时有异常情况出现,进入T0中断,那么就会把T2和KEY的中断清掉。
  可以可以说直接LDI IE,0FH,但是有可能在异常情况出现的时候,我是不需要计时显示的,这样就会出现无法解决的。
  请教各位兄弟有什么好的意见。

使用特权

评论回复
板凳
warm_ice| | 2008-5-27 21:51 | 只看该作者

这样

您对于这个的理解不是很透彻.虽然进入任何一个中断后,IC硬件会将IE清零,但此时其它中断还是在运行的,有中断产生时也还会置起相应中断的IRQ.将IE清零只是保证在响应一个中断时不会嵌入另一个中断,防止出现中断嵌套过多造成堆栈溢出的错误,当然,如果您非常清楚各中断的情况,程序中有中断需要实时性特别高时,您也可以在进入中断,清除相应中断的IRQ后,马上打开IE,以最快速度响应另外的中断.

按您的要求,如果没有时序性要求特别高的中断,刚出中断时打开IE,是没有问题的,只是执行中断的时序上因响应其它中断而稍有偏差(一般中断中的程序较短,执行时间也较短),基本上可以忽略不计.

不知道这样讲,您是否理解了.

使用特权

评论回复
地板
ttdepend|  楼主 | 2008-5-28 09:19 | 只看该作者

re

warm_ice,我的理解这样,是不是如果一开始初始化我开了T2和KEY中断,当进入KEY中断后,如果不置T2的IE,也是可以进入T2的中断服务程序,还是这时IE还要自己置一下位?

使用特权

评论回复
5
lixiang69| | 2008-5-28 09:33 | 只看该作者

ttdepend

我想进入中断IE自动清零,出中断是不会自动恢复的,要自己置一下位

使用特权

评论回复
6
warm_ice| | 2008-5-28 11:38 | 只看该作者

这样

像楼上的朋友说的,进入中断后IE会被硬件清零,出来中断之前您需要恢复IE,硬件不会自动恢复IE的值.

中断中的标准流程:
STA      XXX            ;进入中断的第一条指令,保存累加器的值
ANDIM    IRQ     ,XXXX  ;清除相应中断的IRQ,当然也可用其它指令实现
...
...
...
LDA      XXX            ;恢复累加器的值
LDI      IE      ,XXXX  ;恢复IE
RTNI

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

65

帖子

0

粉丝