S3C6410——同一时刻来两个外部中断会怎么样?
发现一个很奇怪的问题:
S3C6410+WinCE6.0的系统,两个中断同一时刻来的时候,就出现丢数的现象。
详细情况是这样:做磁卡的驱动,有两个磁道:每个磁道有一个时钟线、一个数据线。
磁卡驱动原理很简单,当时钟线下降沿触发中断时,就去读数据线上的电平就行。
现在是:当只有一个磁道(禁止另一个时钟中断信号)时:读数正确;
当两个磁道同时打开时,两个磁道读数都错,出现丢数现象,偶尔有读对的时候,用示波器量,发
现有两个中断信号有统一时刻来的——很明显,这时候丢数了,只进入了一个ISR,另一个根本
没理。
请问,遇到这种情况S3C6410是怎么处理的?它干嘛要丢掉一个中断?另外,它俩在中断向量表VIC0里属于同一个中断源PHYIRQ_EINT1——我用的中断号是EINT10、EINT11.
[解决办法]
我觉得读取电平确实应该放在ISR中,但是读取电平速度很快的,理论上不会影响ISR的效率。并且你不应该让ISR响应N个中断之后才通知ISR,而是响应一个ISR之后立刻通知IST处理。或者引入DMA来读取数据。