FreeRTOS Interrupt with Arduino Due Cortex-M3

arduino2012 wrote on Monday, March 18, 2013:

I want to learn about how to implement interrupt in freeRTOS. I am using the Arduino Due SAM3X8E Cortex-M3 microcontroller. Have somebody used an interrupt in freeRTOS which you could share with me. Is there any guide of how to implement interrupt in freeRTOS. I have read alot in the freeRTOS website but I have not found any guide.

rtel wrote on Monday, March 18, 2013:

Writing FreeRTOS aware interrupts on a Cortex-M chip is actually very simple as, unlike when doing the same on their ARM7 predecessors, there are not special requirements other than ensuring you have the priorities set correctly.  Basically, just write a standard C function and install it in the vector table.

See the “Interrupt Service Routines” section of the following page.  Most (if not all) official demos have examples included too.

The important bits: 

1) If an interrupt is going to use a FreeRTOS API function then, as with all the FreeRTOS ports, only the API functions that end in FromISR can be used (see the last bullet point at the top of the following page for the rationale:

2) FreeRTOS Cortex-M ports implement a full interrupt nesting model, the behaviour of which is configured using two FreeRTOSConfig.h constants:  configMAX_SYSCALL_INTERRUPT_PRIORITY and configKERNEL_INTERRUPT_PRIORITY.  Interrupt safe FreeRTOS functions can only be called from interrupts that have a priority at or below that set by configMAX_SYSCALL_INTERRUPT_PRIORITY (if CMSIS priority functions are being used then configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY). 

See for the full explanation.