论坛风格切换切换到宽版
  • 2885阅读
  • 7回复

再问中断问题 [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2006-09-18
前几天,问过大家一个问题,就是当某个中断源产生的中断正在执行时,这个中断源又连续产生了好几个中断,当第一个中断执行完后,是否还会执行后面的中断,答案是不会执行。
今天我用keil验证了一下这种情况,我是通过定时器的计数功能来产生中断的。程序运行后,我就从.p3.4不断地输入脉冲使定时器溢出进入第一个中断,在第一个中断还未执行完时,我又用同样的方法使程序产生了好几个中断,结果我发现不管后面曾经产生过几个中断,执行完第一个中断后,程序还会执行一次中断。请问各位:在程序实际运行中,是不是也是这种情况?
离线BG6AGB
发帖
915
只看该作者 1楼 发表于: 2006-09-18
响应中断,进入isr的时候,会硬件清中断标志。这时如果同一个中断再次发生的话,中断标志又会置位,所以当isr结束后,执行一条指令,然后又会响应一次中断。
离线BG7IGJ
发帖
1998
只看该作者 2楼 发表于: 2006-09-23
还是同一个问题,只能响应一次中断
离线BG4ABM
发帖
1139
只看该作者 3楼 发表于: 2006-09-23
'
还是同一个问题,只能响应一次中断
'
是响应了2次中断啊!
离线ba1ka
发帖
1044
只看该作者 4楼 发表于: 2006-10-07
在中断服务执行完后要运行一条返回指令例如reti,只有这条指令mcu内硬件才会撤消中断标志.也就是说在进入中断后至执行reti 之前mcu不会再响应同级或低级的中断,但会响应更高级的中断申请.
离线Sullivan
发帖
4817
只看该作者 5楼 发表于: 2006-10-07
'
在中断服务执行完后要运行一条返回指令例如reti,只有这条指令mcu内硬件才会撤消中断标志.也就是说在进入中断后至执行reti 之前mcu不会再响应同级或低级的中断,但会响应更高级的中断申请.
'

比如不可屏蔽中断----把电源拔了.....
离线BG6AGB
发帖
915
只看该作者 6楼 发表于: 2006-10-08
51好像没有nmi吧?
离线BG6AGB
发帖
915
只看该作者 7楼 发表于: 2006-10-08
'
在中断服务执行完后要运行一条返回指令例如reti,只有这条指令mcu内硬件才会撤消中断标志.也就是说在进入中断后至执行reti 之前mcu不会再响应同级或低级的中断,但会响应更高级的中断申请.
'


个人觉得说法不完全正确,欢迎拍砖.

对于51单片机,除串口是软件清中断请求标志位,其它的都是在响应的同时清中断请求标志位,如果是52系列,则t2中断请求标志也是软件清的.
但是,进入isr的同时,会封闭中断优先级触发器(除非有高级中断进来),这样就不会在isr里被打断,在执行reti的同时,解除封闭,这样同级或低级的中断才能再次触发.

lz的情况我前面说过,中断响应的同时,中断请求寄存器被硬件清零,所以中断执行过程中,再有中断源信号进来,只会置相应的中断请求寄存器.在当前isr执行完毕后,才会再次检查中断请求,因此无论在执行isr的过程中中断源触发多少次,结果都只会造成中断请求标志置位,而不会累计.isr结束后再次相应这个中断,造成了多个中断只被执行一次~~~