FIQ interrupts on LP23xx

torginus wrote on Saturday, April 25, 2009:


I’d like to ask a techincal a question.

I’m using a Philips LPC2378 microcontroller, which has a separate register set for handling FIQ interrupts.

Does it mean, that this makes context saving upon entry unnecessary, so I needn’t (and shouldn’t) use portSAVE_CONTEXT(), and portRESTORE_CONTEXT() upon entry, and exit from the interrupt handler?
Or are there parts of the context that still need to be saved?
Is it safe to call FreeRTOS functions from such a ‘plain’ FIQ interrupt?

Btw, what’s the difference between the portSAVE/RESTORE combo and using GCC’s builtin __attribute(“IRQ”/“FIQ”)__  function attributes?

rtel wrote on Saturday, April 25, 2009:

Best not to call API function from the FIQ, and use the standard GCC method of entering the function, not the portSAVE/RESTORE_CONTEXT macros.

You might like to check the implementation of the portENTER_CRITICAL() and portEXIT_CRITICAL() macros to ensure they don’t disable and enable FIQ interrupts - unless you want them to.

The __attribute__ method does not save the entire context, often contains bugs (depending on the GCC version) and does not save the context in the form expected by the kernel.