simointe wrote on Monday, September 12, 2016:
(TMS570LC4, C++)
I have a fully functionnal FreeRtos implementation on TMS570.
My high frequency interrupt is on FIQ though, and now I want to change it on IRQ.
FreeRtos is on IRQ, are interrupts could be nested and how ?
I have already some assembler code to handle this in « usual C++ function » but I don’t know how to merge it within the vPortPreemptiveTick and vPortYeildWithinAPI interrupts.
You could refer to a previous post I’ve done.
https://sourceforge.net/p/freertos/discussion/382005/thread/0caeaa55/#45db
For others interrupt than FreeRtos, nesting seems to work (no crash at least) puting this 2 little codes before and after:
BEFORE
/// Copy SPSR_irq to LR
/// Save SPSR_irq
/// Enable IRQ and set System Mode
/// Save LR
//-----------------------------------------------------------------------------
{
asm( " ADD SP, SP, #8 " );
asm( " SUB LR, LR, #4 " );
asm( " SRSFD #0x12 ! " );
asm( " CPS #0x13 " );
asm( " PUSH {R0-R12} " );
asm( " FMRX R5,FPEXC " );
asm( " PUSH {R5} " );
asm( " FMRX R5,FPSCR " );
asm( " PUSH {R5} " );
asm( " FSTMDBD SP!, {D0-D7} " );
asm( " MOV R1, SP " );
asm( " AND R1, R1, #4 " );
asm( " SUB SP, SP, R1 " );
asm( " PUSH {R1, R14} " ); \
AFTER
/// Restore LR
/// Disable IRQ (IRQ Mode)
/// Restore SPSR_irq to LR
/// Copy LR to SPSR_irq
//-----------------------------------------------------------------------------
asm( " POP {R1, LR} " );
asm( " ADD SP, SP, r1 " );
asm( " FLDMIAD SP!, {D0-D7} " );
asm( " POP {R5} " );
asm( " FMXR FPSCR, R5 " );
asm( " POP {R5} " );
asm( " FMXR FPEXC, R5 " );
asm( " POP {R0-R12} " );
asm( " CPS #0x12 " );
asm( " RFEFD SP! " ); \