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: http://www.freertos.org/Embedded-RTOS-Queues.html).
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).
for the full explanation.