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