I'm using an STM32F4 Discovery board with ST's standard peripheral library (SPL). I have a situation with a circular buffer: timer interrupt is polling buttons and filling a circular buffer every millisecond if a button is pressed, with an index of that button. The main loop then takes it out of the circular buffer and executes the appropriate command. Both of these actions require multiple steps (checking and changing indices to circular buffer, ...).
When this is happening in the main loop, the timer interrupt has to be disabled for that short while (so that the indices don't get messed up), but I don't want to disable all interrupts just for that. Also, it is preferable for an interrupt to still be serviced if it happened while it was disabled.
I tried to do this by disabling the timer interrupt for that specific timer (TIM6 in my case) in the NVIC (but left it enabled on the timer itself). But then I found out that there is no way for me to check if interrupts were disabled in the first place - before disabling them (I can't enable interrupts again if they weren't enabled before, as it can mess things up).
So my questions are:
How do I check if a specific peripheral interrupt is enabled in the NVIC? (There are only
EnableIRQ
andDisableIRQ
functions.)I tried checking value at
NVIC->ICER[((uint32_t)(IRQn) >> 5)];
and
NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5];
but they come out 0 even if the interrupt is enabled.
Will the interrupt still be served (if it occurred when it was disabled on NVIC side only) when enabled again?