I’m running an app that uses some high priority interrupts (I2C slave, and external GPIO interrupt)
I’m finding that sometimes the interrupts get missed. The interrupt doesn’t fire for the event.
Usually FreeRTOS critical sections on Cortex M3 are done by configuring interrupt base priority to configMAX_SYSCALL_INTERRUPT_PRIORITY.
This leaves higher priority interrupts (that don’t use FreeRTOS) to still execute.
I can see the Ameba SDK uses this:
portDISABLE_INTERRUPTS() __asm volatile ( " cpsid i " ::: “memory” )
portENABLE_INTERRUPTS() __asm volatile ( " cpsie i " ::: “memory” )
This looks to be a global interrupt disable?
So what happens if another interrupt fires during a FreeRTOS critical section?
Is it queued to run afterwards, or is it missed?