isr_sp.h 807 B

12345678910111213141516171819202122232425262728293031
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-07-27 Emuzit first version
  9. */
  10. #ifndef __ISR_SP_H__
  11. #define __ISR_SP_H__
  12. /* usrstack is no more in use right after rt_system_scheduler_start().
  13. * It is also the time global interrupt is enabled.
  14. */
  15. #define isr_sp_enter() \
  16. asm("la t0, rt_interrupt_nest"); \
  17. asm("bnez t0, 1f"); \
  18. asm("la t0, _eusrstack"); \
  19. asm("sw sp, -4(t0)"); \
  20. asm("addi sp, t0, -4"); \
  21. asm("1:")
  22. #define isr_sp_leave() \
  23. asm("la t0, rt_interrupt_nest"); \
  24. asm("bnez t0, 1f"); \
  25. asm("la t0, _eusrstack"); \
  26. asm("lw sp, -4(t0)"); \
  27. asm("1:")
  28. #endif