ATMEL at91arm中断嵌套的问题

[复制链接]
4027|7
 楼主| yoqsh 发表于 2007-6-2 19:16 | 显示全部楼层 |阅读模式
我用的是7S64,使用P28作为PIO中断优先级2,使用P30作为IRQ1中断优先级5,按S64产品介绍产品,在执行pio中断时如果又来了IRQ1中断,应该马上响应IRQ1中断的。可是我的试验要等PIO中断完成才相应IRQ1中断。为什么?<br />难道它的数据手册上面写的有误吗?<br /><br />调试中看到CPSR的I位始终是“1”,应该是不响应此时的中断了,可是S64的数据手册上写的(P136页):<br /><br />中断嵌套:优先级控制器使用中断嵌套以使得在较低优先级中断服务期间可处理高优先级中断服务。这就需要较低优先级中断服务程序可在处理器级重新使能中断处理。当处理中断服务期间出现一个中断优先级更高的中断,nIRQ&nbsp;线重新出现。若中断在内核级使能,打断当前中断执行,新的中断服务应读取AIC_IVR。此时,当前中断序号及其优先级推入内置硬件堆栈,这样它们得以保存并在高优先级中断服务结束并对AIC_EOICR&nbsp;写入后重新加载。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AIC&nbsp;有8&nbsp;级硬件堆栈以便支持有8&nbsp;级优先级的中断嵌套。<br />
mr.king 发表于 2007-6-3 08:31 | 显示全部楼层

我理解是同时来的中断就按优先级,除FIQ外,同时只能处理

IRQ没结束就不执行新的IRQ
mr.king 发表于 2007-6-5 18:41 | 显示全部楼层

重新想了下,上面说错了,收回

  
high 发表于 2007-6-5 18:59 | 显示全部楼层

切换回用户模式,重新使能中断。

  
 楼主| yoqsh 发表于 2007-6-5 20:54 | 显示全部楼层

又看了看书,应该不支持嵌套。

看来必须是处理完一个再处理另外的了。
ww4u 发表于 2007-6-6 20:19 | 显示全部楼层

我也遇到过

我在程序中通过外部中断读取键值,但键值的读取需要引发I2C中断,而且两个中断都是IRQ,在调试时程序不会响应I2C中断导致程序陷在键值中断处理中。看了看书,应该不支持嵌套中断,因为在异常时,SPSR存储CPSR,如果出现嵌套,怎么能够保留第一次IRQ的现场?不知这样理解对不对。
nj手术刀 发表于 2007-6-8 09:10 | 显示全部楼层

AT91SAM7S64的中文PDF说可以嵌套

中断嵌套优先级控制器使用中断嵌套以使得在较低优先级中断服务期间可处理高优先级中断服务。这就需要较低优先级中断服务程序可在处理器级重新使能中断处理。当处理中断服务期间出现一个中断优先级更高的中断,nIRQ&nbsp;线重新出现。若中断在内核级使能,打断当前中断执行,新的中断服务应读取AIC_IVR。此时,当前中断序号及其优先级推入内置硬件堆栈,这样它们得以保存并在高优先级中断服务结束并对AIC_EOICR&nbsp;写入后重新加载。<br />AIC&nbsp;有8&nbsp;级硬件堆栈以便支持有8&nbsp;级优先级的中断嵌套。
llf021421 发表于 2011-11-13 22:28 | 显示全部楼层
支持中断嵌套
只是在你的中断处理函数中没有打开中断,即CPSR中的"I"位清零。但是CPSR"I"位清零之前的中断服务程序中,你应该保存中断前的所有寄存器。
有疑问可以QQ交流:717046727
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

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