LoRaMac-node icon indicating copy to clipboard operation
LoRaMac-node copied to clipboard

sysIrqHandlers.c for cortex-m0

Open dudmuck opened this issue 4 years ago • 0 comments

for users of cortex-m0 devices (ie stm32L0), might be useful to have correct hardfault handler, for example for gcc-arm:

void HardFault_Handler(void)
{
    /*
    __asm volatile( "TST LR, #4" );
    __asm volatile( "ITE EQ" );
    __asm volatile( "MRSEQ R0, MSP" );
    __asm volatile( "MRSNE R0, PSP" );
    __asm volatile( "B HardFault_Handler_C" );
    */

    // This version is for Cortex M0
    __asm volatile("movs R0, #4");
    __asm volatile("mov R1, LR");
    __asm volatile("tst R0, R1"); // Check EXC_RETURN in Link register bit 2.
    __asm volatile("bne Uses_PSP");
    __asm volatile("mrs R0, MSP");// Stacking was using MSP.
    __asm volatile("b Pass_StackPtr");
    __asm volatile("Uses_PSP:");
    __asm volatile("mrs R0, PSP");  // Stacking was using PSP
    __asm volatile("Pass_StackPtr:");
    __asm volatile("ldr R2,=HardFault_Handler_C");
    __asm volatile("bx  R2");
    __asm volatile("");
}

see at https://www.segger.com/downloads/application-notes/AN00016 its because Cortex-M0 doesnt have "TST LR, #4" and "ITE EQ".

Could be useful for debugging hard fault on cortex-m0.

dudmuck avatar Apr 21 '21 23:04 dudmuck