[ZLG-ARM] 该如何理解:ARM7不可中断嵌套?

[复制链接]
 楼主| berger008 发表于 2007-1-4 17:04 | 显示全部楼层 |阅读模式
《ARM与嵌入式基础教程》3.9.3写道“ARM7TDMI内核在中断异常时置位中断禁止标志,这样可防止不受控制的异常嵌套。”<br />这句话该如何理解,若系统中出现以下情况,结果如何?<br />1.若仅选用了三个优先级的IRQ,中等优先级的ISR在执行的过程中来了一个高优先级的IRQ,结果如何?若来的是较低优先级的IRQ,这个IRQ会丢吗?若在执行中等优先级ISR的过程中,先后来了低和高优先级的中断,结果又如何?<br />2.若选用了一个FIQ和IRQ,在执行FIQ中断过程中,来了IRQ,结果如何?或是在执行IRQ过程中来了FIQ,结果又如何?<br />请大家赐教!
TRUE_ARM 发表于 2007-1-4 18:19 | 显示全部楼层

FIQ、IRQ是两种不同的模式

FIQ有更高的优先级。
foyyof 发表于 2007-1-4 18:48 | 显示全部楼层

FIQ可以中断IRQ

IRQ之间需要用汇编嵌套
zlgarm 发表于 2007-1-5 15:16 | 显示全部楼层

re

&nbsp;&nbsp;&nbsp;IRQ本身可以中断嵌套.当发生IRQ中断时,&nbsp;进入中断服务程序后,再重新打开IRQ中断,就能实现允许中断嵌套.<br /> &nbsp;FIQ中断可以打断IRQ中断,FIQ和IRQ有自己的中断堆栈(LPC200模板默认设置FIQ堆栈为0<br />&nbsp;&nbsp;&nbsp;一般外设都有中断标志,在未清除中断标志时,中断会不断发生,所以不会发生中断丢失.
 楼主| berger008 发表于 2007-1-5 16:10 | 显示全部楼层

能否再详细解答?

进入中断服务程序后,再重新打开IRQ中断,有时会导致程序中止;<br />是否还要哪里添加保护现场的代码?
shkliu 发表于 2007-2-28 10:12 | 显示全部楼层

顶一下!

如果有一个10ms的定时器中断,当uart中断产生,中断服务程序里面的处理时间应该不大于多少?&nbsp;如何防止死机?
zlgARM 发表于 2007-2-28 14:28 | 显示全部楼层

RE

答复berger008。<br />进入IRQ ISR后,再允许IRQ中断后,原本记录中断返回位置的LR_IRQ,值被修改了。这样的话,很可能会导致程序出错了。<br />事实上,中断嵌套有一定的复杂度,一般不推荐使用中断嵌套。<br /><br />如果一定要使用中断嵌套,推荐采取以下措施。<br />1:不允许同一设备中断嵌套;<br />2:进入IRQ模式后,立即不被打断地将IRQ的SPSR、LR、SP等重要寄存器复制到SYS模式里的寄存器,然后再切换到SYS模式执行中断服务代码,以免下一个中断发生时无法正确返回。<br /><br /><br /><br /><br />答复shkliu:<br />请把ISR里能够放到ISR外做的都挪到外面做,尽量减少中断的时间。
eleven11 发表于 2007-2-28 19:01 | 显示全部楼层

其实你要是用zlg的模块

不需要考虑fiq,因为他的ucos2的移植好像不支持
computer00 发表于 2007-3-2 09:17 | 显示全部楼层

尽量不要用中断嵌套。实时性要求高的,可以放到FIQ去

  
roophoon 发表于 2007-3-2 09:34 | 显示全部楼层

其实也不难理解

也就是说在中断处理程序中要开中断的话,最好是在进入中断后开始中断服务程序前切换处理器到系统模式下,这样LR就分别保存在两种模式下,不会发生后一个中断压栈的内容冲掉上一个压栈内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

64

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

37

主题

64

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部