startup.s 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. Stack_Size EQU 0x0000100
  2. AREA STACK, NOINIT, READWRITE, ALIGN=4
  3. Stack_Mem SPACE Stack_Size
  4. __initial_sp EQU 0x30000
  5. ; <h> Heap Configuration
  6. ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
  7. ; </h>
  8. Heap_Size EQU 0x00000000
  9. AREA HEAP, NOINIT, READWRITE, ALIGN=4
  10. __heap_base
  11. Heap_Mem SPACE Heap_Size
  12. __heap_limit
  13. PRESERVE8
  14. THUMB
  15. ; Vector Table Mapped to Address 0 at Reset
  16. AREA RESET, DATA, READONLY
  17. IMPORT systick
  18. IMPORT irq0
  19. IMPORT irq1
  20. IMPORT irq2
  21. IMPORT irq3
  22. IMPORT irq4
  23. IMPORT irq5
  24. IMPORT irq6
  25. IMPORT irq7
  26. IMPORT irq8
  27. IMPORT irq9
  28. IMPORT irq10
  29. IMPORT irq11
  30. IMPORT irq12
  31. IMPORT irq13
  32. IMPORT irq14
  33. IMPORT irq15
  34. IMPORT irq16
  35. IMPORT irq17
  36. IMPORT irq18
  37. IMPORT irq19
  38. IMPORT irq20
  39. IMPORT irq21
  40. IMPORT irq22
  41. IMPORT irq23
  42. IMPORT irq24
  43. IMPORT irq25
  44. IMPORT irq26
  45. IMPORT irq27
  46. IMPORT irq28
  47. IMPORT irq29
  48. IMPORT irq30
  49. IMPORT irq31
  50. IMPORT hard_fault_handler
  51. EXPORT __Vectors
  52. EXPORT __Vectors_End
  53. EXPORT __Vectors_Size
  54. __Vectors DCD __initial_sp ; Top of Stack
  55. DCD reset_handler ; Reset Handler
  56. DCD nmi_handler ; NMI Handler
  57. DCD hard_fault_handler ; Hard Fault Handler
  58. DCD 0 ;
  59. DCD 0 ;
  60. DCD 0 ;
  61. DCD 0 ;
  62. DCD 0 ;
  63. DCD 0 ;
  64. DCD 0 ;
  65. DCD 0 ;
  66. DCD 0 ;
  67. DCD 0 ;
  68. DCD 0 ;
  69. DCD systick ;
  70. DCD irq0 ;
  71. DCD irq1 ;
  72. DCD irq2 ;
  73. DCD irq3 ;
  74. DCD irq4 ;
  75. DCD irq5 ;
  76. DCD irq6 ;
  77. DCD irq7 ;
  78. DCD irq8 ;
  79. DCD irq9 ;
  80. DCD irq10 ;
  81. DCD irq11 ;
  82. DCD irq12 ;
  83. DCD irq13 ;
  84. DCD irq14 ;
  85. DCD irq15 ;
  86. DCD irq16 ;
  87. DCD irq17 ;
  88. DCD irq18 ;
  89. DCD irq19 ;
  90. DCD irq20 ;
  91. DCD irq21 ;
  92. DCD irq22 ;
  93. DCD irq23 ;
  94. DCD irq24 ;
  95. DCD irq25 ;
  96. DCD irq26 ;
  97. DCD irq27 ;
  98. DCD irq28 ;
  99. DCD irq29 ;
  100. DCD irq30 ;
  101. DCD irq31 ;
  102. __Vectors_End
  103. __Vectors_Size EQU __Vectors_End - __Vectors
  104. AREA |.text|, CODE, READONLY ,ALIGN=4
  105. ; Reset Handler
  106. reset_handler PROC
  107. EXPORT reset_handler [WEAK]
  108. IMPORT Reset_Handler
  109. ; bl Reset_Handler
  110. ; movs r0,#0x3
  111. LDR R0, =Reset_Handler
  112. BX R0
  113. nop
  114. ENDP
  115. delay PROC
  116. EXPORT delay
  117. subs r0,#1
  118. bne delay
  119. nop
  120. bx lr
  121. ENDP
  122. nmi_handler PROC
  123. EXPORT nmi_handler [WEAK]
  124. b nmi_handler
  125. ENDP
  126. ALIGN
  127. AREA |.INIT_STACK_HEAP|, CODE,READONLY,ALIGN=4
  128. ; User Initial Stack & Heap
  129. IF :DEF:__MICROLIB
  130. EXPORT __initial_sp
  131. EXPORT __heap_base
  132. EXPORT __heap_limit
  133. ELSE
  134. IMPORT __use_two_region_memory
  135. EXPORT __user_initial_stackheap
  136. __user_initial_stackheap PROC
  137. LDR R0, = Heap_Mem
  138. LDR R1, = __initial_sp
  139. LDR R2, = (Heap_Mem + Heap_Size)
  140. LDR R3, = Stack_Mem
  141. BX LR
  142. ENDP
  143. ALIGN
  144. ENDIF
  145. END