interrupts_iar.asm 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2010-04-20 fify the first version
  9. *
  10. * For : Renesas M16C
  11. * Toolchain : IAR's EW for M16C v3.401
  12. */
  13. PUBLIC rt_hw_timer_handler
  14. PUBLIC rt_hw_uart0_receive_handler
  15. EXTERN rt_thread_switch_interrupt_flag
  16. EXTERN rt_interrupt_from_thread
  17. EXTERN rt_interrupt_to_thread
  18. EXTERN rt_interrupt_enter
  19. EXTERN rt_interrupt_leave
  20. EXTERN rt_tick_increase
  21. EXTERN u0rec_handler
  22. RSEG CSTACK
  23. RSEG ISTACK
  24. RSEG CODE:CODE:NOROOT(2)
  25. rt_hw_context_switch_interrupt_do
  26. MOV.B #0, rt_thread_switch_interrupt_flag
  27. MOV.W rt_interrupt_from_thread, A0
  28. STC ISP, [A0]
  29. MOV.W rt_interrupt_to_thread, A0
  30. LDC [A0], ISP
  31. POPM R0,R1,R2,R3,A0,A1,SB,FB ; Restore all processor registers from the new task's stack
  32. REIT
  33. .EVEN
  34. rt_hw_timer_handler:
  35. PUSHM R0,R1,R2,R3,A0,A1,SB,FB ; Save current task's registers
  36. JSR rt_interrupt_enter
  37. JSR rt_tick_increase
  38. JSR rt_interrupt_leave
  39. CMP.B #1, rt_thread_switch_interrupt_flag
  40. JEQ rt_hw_context_switch_interrupt_do
  41. POPM R0,R1,R2,R3,A0,A1,SB,FB ; Restore current task's registers
  42. REIT ; Return from interrup
  43. .EVEN
  44. rt_hw_uart0_receive_handler:
  45. PUSHM R0,R1,R2,R3,A0,A1,SB,FB ; Save current task's registers
  46. JSR rt_interrupt_enter
  47. JSR u0rec_handler
  48. JSR rt_interrupt_leave
  49. CMP.B #1, rt_thread_switch_interrupt_flag
  50. JEQ rt_hw_context_switch_interrupt_do
  51. POPM R0,R1,R2,R3,A0,A1,SB,FB ; Restore current task's registers
  52. REIT ; Return from interrup
  53. END