The project I am working on uses a GPIO interrupt (Bank 6) for the OMAP L138.
We have noticed this problem. When an interrupt is generated (triggered on the rising edge) on the GPIO Bank 6 pin, the interrupt service routine is called properly in most instances. However, the GPIO Bank 6 ISR software is responsible for clearing the GPIO Bank 6 signal that generates the interrupt. Therefore, it is possible that another interrupt might be generated while the GPIO Bank 6 ISR is still executing. Note: The rising edge trigger of this GPIO signal is generated by an external hardware peripheral (TL16C752C). When the rising edge is generated while the ISR servicing the previous rising edge is still in progress, the ISR is never invoked again because the ISR is responsible for clearing the signal. The time between the falling edge and the rising edge in this failure scenario is approximately 2 microseconds.
I have tried disabling the Bank 6 interrupt at the beginning of the ISR and re-enabling at the end of the ISR, but to no avail. This disable/enable of interrupts includes both the OMAP as well as the external peripheral (TL16C752C).
The project uses Micrium’s OS (MicroC – OS ) for the OMAP, I also noticed, via the IAR debugger, that the ISR is 5 calls deep on the call stack. This might be part or all of the problem. There isn’t any way that I know of in preventing the TL16C752C from creating another rising edge interrupt while the current interrupt is being serviced. Also, I stopped the debugger and discovered that the Bank 6 IRQ signal is active, but it seems the AINTC is not invoking the ISR.
Any help or suggestions would be appreciated. I realize I was brief with the above description and will post additional details and/or code snippets if requested.