打印
[ZLG-ARM]

该如何理解:ARM7不可中断嵌套?

[复制链接]
3904|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
berger008|  楼主 | 2007-1-4 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《ARM与嵌入式基础教程》3.9.3写道“ARM7TDMI内核在中断异常时置位中断禁止标志,这样可防止不受控制的异常嵌套。”
这句话该如何理解,若系统中出现以下情况,结果如何?
1.若仅选用了三个优先级的IRQ,中等优先级的ISR在执行的过程中来了一个高优先级的IRQ,结果如何?若来的是较低优先级的IRQ,这个IRQ会丢吗?若在执行中等优先级ISR的过程中,先后来了低和高优先级的中断,结果又如何?
2.若选用了一个FIQ和IRQ,在执行FIQ中断过程中,来了IRQ,结果如何?或是在执行IRQ过程中来了FIQ,结果又如何?
请大家赐教!

相关帖子

沙发
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

   IRQ本身可以中断嵌套.当发生IRQ中断时, 进入中断服务程序后,再重新打开IRQ中断,就能实现允许中断嵌套.
  FIQ中断可以打断IRQ中断,FIQ和IRQ有自己的中断堆栈(LPC200模板默认设置FIQ堆栈为0
   一般外设都有中断标志,在未清除中断标志时,中断会不断发生,所以不会发生中断丢失.

使用特权

评论回复
5
berger008|  楼主 | 2007-1-5 16:10 | 只看该作者

能否再详细解答?

进入中断服务程序后,再重新打开IRQ中断,有时会导致程序中止;
是否还要哪里添加保护现场的代码?

使用特权

评论回复
6
shkliu| | 2007-2-28 10:12 | 只看该作者

顶一下!

如果有一个10ms的定时器中断,当uart中断产生,中断服务程序里面的处理时间应该不大于多少? 如何防止死机?

使用特权

评论回复
7
zlgARM| | 2007-2-28 14:28 | 只看该作者

RE

答复berger008。
进入IRQ ISR后,再允许IRQ中断后,原本记录中断返回位置的LR_IRQ,值被修改了。这样的话,很可能会导致程序出错了。
事实上,中断嵌套有一定的复杂度,一般不推荐使用中断嵌套。

如果一定要使用中断嵌套,推荐采取以下措施。
1:不允许同一设备中断嵌套;
2:进入IRQ模式后,立即不被打断地将IRQ的SPSR、LR、SP等重要寄存器复制到SYS模式里的寄存器,然后再切换到SYS模式执行中断服务代码,以免下一个中断发生时无法正确返回。




答复shkliu:
请把ISR里能够放到ISR外做的都挪到外面做,尽量减少中断的时间。

使用特权

评论回复
8
eleven11| | 2007-2-28 19:01 | 只看该作者

其实你要是用zlg的模块

不需要考虑fiq,因为他的ucos2的移植好像不支持

使用特权

评论回复
9
computer00| | 2007-3-2 09:17 | 只看该作者

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

使用特权

评论回复
10
roophoon| | 2007-3-2 09:34 | 只看该作者

其实也不难理解

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

使用特权

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

本版积分规则

37

主题

64

帖子

2

粉丝