startup.S 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright (c) 2020-2020, BLUETRUM Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "ab32vg1.h"
  7. .global _start
  8. .section .reset, "ax"
  9. _start:
  10. //load comm
  11. la a0, __comm_vma
  12. la a1, __comm_lma
  13. la a2, __comm_size
  14. call 0x84044
  15. //load ram1
  16. la a0, __ram1_vma
  17. la a1, __ram1_lma
  18. la a2, __ram1_size
  19. call 0x84044
  20. la a0, __irq_stack_start //Stack清成0x23
  21. li a1, 0x23
  22. la a2, __irq_stack_size
  23. call memset
  24. la ra, __irq_stack
  25. lui a5, 0x1
  26. sw zero, -1920(a5)
  27. sw zero, -1916(a5)
  28. //clear bss
  29. la a0, __bss_start
  30. li a1, 0
  31. la a2, __bss_size
  32. call memset
  33. la a0, __comm_vma
  34. sw a0, PICADR(zero)
  35. call entry
  36. // la ra, __exception
  37. // jr ra
  38. .section .vector, "ax"
  39. // .org 0x10
  40. //__exception:
  41. // li sp, 0x10600 //出错后,不破坏错误点的堆栈数据
  42. // jal exception_isr
  43. // 1: j 1b
  44. // mret
  45. .org 0x40
  46. jal x0, low_prio_irq
  47. mret
  48. .org 0x80
  49. #define METHOD 1
  50. #if METHOD == 1
  51. addi sp, sp, -6*4
  52. lw a0, PICEN(zero)
  53. lw a1, EPC(zero)
  54. lw a2, EPICCON(zero)
  55. sw a0, 3*4(sp)
  56. sw a1, 4*4(sp)
  57. sw a2, 5*4(sp)
  58. andi a0, a0, 1
  59. sw a0, PICEN(zero)
  60. la a0, 0f
  61. sw a0, EPC(zero)
  62. j 0x84020
  63. 0:
  64. sw a0, 0(sp)
  65. sw a1, 4(sp)
  66. sw a2, 8(sp)
  67. lw a0, 3*4(sp)
  68. lw a1, 4*4(sp)
  69. lw a2, 5*4(sp)
  70. sw a0, PICEN(zero)
  71. sw a1, EPC(zero)
  72. sw a2, EPICCON(zero)
  73. lw a0, 0(sp)
  74. lw a1, 4(sp)
  75. lw a2, 8(sp)
  76. addi sp, sp, 6*4
  77. mret
  78. .align 4
  79. 1: .word 0, 0
  80. j 0x84020
  81. #endif
  82. .global cpu_irq_comm
  83. cpu_irq_comm:
  84. la a5, __irq_stack
  85. mv sp, a5
  86. j cpu_irq_comm_do
  87. ret