diff --git a/src/ch32v30x_it.c b/src/ch32v30x_it.c index 389c795..34734b1 100644 --- a/src/ch32v30x_it.c +++ b/src/ch32v30x_it.c @@ -69,8 +69,12 @@ __IRQ_WEAK void NMI_Handler(void) { __IRQ_NAKED void SysTick_Handler(void) { /* Use naked function to generate a short call, without causing stack unbalance. */ asm volatile( - "li t0, 0xE000F004\n" /* Clear SysTick->SR */ - "sw zero, 0(t0)\n" + "addi sp, sp, -4\n" /* Push */ + "sw t0, 4(sp)\n" /* Save t0 on stack */ + "li t0, 0xE000F004\n" /* SysTick->SR */ + "sw zero, 0(t0)\n" /* Write 0 to clear */ + "lw t0, 4(sp)\n" /* Restore t0 from stack */ + "addi sp, sp, 4\n" /* Pop */ "j freertos_risc_v_mtimer_interrupt_handler" ); }