flash_start_gcc.s 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. .org 0x200
  2. .global Reset_Handler,hard_fault_handler,svc_handler,pendsv_handler,systick,irq0,irq1,irq2,irq3,irq4,irq5,irq6,irq7,irq8,irq9,irq10,irq11,irq12,irq13,irq14,irq15,irq16,irq17,irq18,irq19,irq20,irq21,irq22,irq23,irq24,irq25,irq26,irq27,irq28,irq29,irq30,irq31
  3. .long
  4. Reset_Handler:
  5. ldr r0,=hardware_init
  6. bx r0
  7. .thumb_func
  8. hard_fault_handler:
  9. ldr r0,=HARD_FAULT_IRQHandler
  10. bx r0
  11. nop
  12. .thumb_func
  13. svc_handler:
  14. ldr r0,=SVC_IRQHandler
  15. bx r0
  16. nop
  17. .thumb_func
  18. pendsv_handler:
  19. ldr r0,=PENDSV_IRQHandler
  20. bx r0
  21. nop
  22. .thumb_func
  23. systick:
  24. ldr r0,=SYSTICK_IRQHandler
  25. bx r0
  26. nop
  27. .thumb_func
  28. irq0:
  29. mov r0,#4*0
  30. b isr
  31. .thumb_func
  32. irq1:
  33. mov r0,#4*1
  34. b isr
  35. .thumb_func
  36. irq2:
  37. mov r0,#4*2
  38. b isr
  39. .thumb_func
  40. irq3:
  41. mov r0,#4*3
  42. b isr
  43. .thumb_func
  44. irq4:
  45. mov r0,#4*4
  46. b isr
  47. .thumb_func
  48. irq5:
  49. mov r0,#4*5
  50. b isr
  51. .thumb_func
  52. irq6:
  53. mov r0,#4*6
  54. b isr
  55. .thumb_func
  56. irq7:
  57. mov r0,#4*7
  58. b isr
  59. .thumb_func
  60. irq8:
  61. mov r0,#4*8
  62. b isr
  63. .thumb_func
  64. irq9:
  65. mov r0,#4*9
  66. b isr
  67. .thumb_func
  68. irq10:
  69. mov r0,#4*10
  70. b isr
  71. .thumb_func
  72. irq11:
  73. mov r0,#4*11
  74. b isr
  75. .thumb_func
  76. irq12:
  77. mov r0,#4*12
  78. b isr
  79. .thumb_func
  80. irq13:
  81. mov r0,#4*13
  82. b isr
  83. .thumb_func
  84. irq14:
  85. mov r0,#4*14
  86. b isr
  87. .thumb_func
  88. irq15:
  89. mov r0,#4*15
  90. b isr
  91. .thumb_func
  92. irq16:
  93. mov r0,#4*16
  94. b isr
  95. .thumb_func
  96. irq17:
  97. mov r0,#4*17
  98. b isr
  99. .thumb_func
  100. irq18:
  101. mov r0,#4*18
  102. b isr
  103. .thumb_func
  104. irq19:
  105. mov r0,#4*19
  106. b isr
  107. .thumb_func
  108. irq20:
  109. mov r0,#4*20
  110. b isr
  111. .thumb_func
  112. irq21:
  113. mov r0,#4*21
  114. b isr
  115. .thumb_func
  116. irq22: mov r0,#4*22
  117. b isr
  118. .thumb_func
  119. irq23:
  120. mov r0,#4*23
  121. b isr
  122. .thumb_func
  123. irq24:
  124. mov r0,#4*24
  125. b isr
  126. .thumb_func
  127. irq25: mov r0,#4*25
  128. b isr
  129. .thumb_func
  130. irq26:
  131. mov r0,#4*26
  132. b isr
  133. .thumb_func
  134. irq27:
  135. mov r0,#4*27
  136. b isr
  137. .thumb_func
  138. irq28:
  139. mov r0,#4*28
  140. b isr
  141. .thumb_func
  142. irq29:
  143. mov r0,#4*29
  144. b isr
  145. .thumb_func
  146. irq30:
  147. mov r0,#4*30
  148. b isr
  149. .thumb_func
  150. irq31:
  151. mov r0,#4*31
  152. b isr
  153. .thumb_func
  154. isr:
  155. ldr r1,=isr_table
  156. ldr r0,[r0, r1]
  157. bx r0
  158. .align 4
  159. isr_table:
  160. .long USB_IRQHandler
  161. .long IIC_IRQHandler
  162. .long QSPI_IRQHandler
  163. .long SPI0_IRQHandler
  164. .long SPI1_IRQHandler
  165. .long UART0_IRQHandler
  166. .long UART1_IRQHandler
  167. .long MEMCP_IRQHandler
  168. .long RSA_IRQHandler
  169. .long SCI0_IRQHandler
  170. .long SCI1_IRQHandler
  171. .long BT_IRQHandler
  172. .long GPIO_IRQHandler
  173. .long TIMER0_IRQHandler
  174. .long TIMER1_IRQHandler
  175. .long TIMER2_IRQHandler
  176. .long TIMER3_IRQHandler
  177. .long TIMER4_IRQHandler
  178. .long TIMER5_IRQHandler
  179. .long TIMER6_IRQHandler
  180. .long TIMER7_IRQHandler
  181. .long TIMER8_IRQHandler
  182. .long SM4_IRQHandler
  183. .long SEC_IRQHandler
  184. .long MSR_IRQHandler
  185. .long TRNG_IRQHandler
  186. .long WDT_IRQHandler
  187. .thumb
  188. .thumb_func
  189. hardware_init:
  190. ldr r1, =__exidx_start
  191. ldr r2, =__data_start__
  192. ldr r3, =__data_end__
  193. sub r3, r2
  194. ble .L_loop1_done
  195. .L_loop1:
  196. sub r3, #4
  197. ldr r0, [r1,r3]
  198. str r0, [r2,r3]
  199. bgt .L_loop1
  200. .L_loop1_done:
  201. /* Single BSS section scheme.
  202. *
  203. * The BSS section is specified by following symbols
  204. * _sbss: start of the BSS section.
  205. * _ebss: end of the BSS section.
  206. *
  207. * Both addresses must be aligned to 4 bytes boundary.
  208. */
  209. ldr r1, =__bss_start__
  210. ldr r2, =__bss_end__
  211. mov r0, #0
  212. sub r2, r1
  213. ble .L_loop3_done
  214. .L_loop3:
  215. sub r2, #4
  216. str r0, [r1, r2]
  217. bgt .L_loop3
  218. .L_loop3_done:
  219. ldr r0,=0x12345
  220. ldr r3,=0x1111
  221. bl main
  222. .globl delay
  223. .syntax unified
  224. delay:
  225. subs r0,#1
  226. bne delay
  227. nop
  228. bx lr
  229. .align 1
  230. .thumb_func
  231. .weak Default_Handler
  232. .type Default_Handler, %function
  233. Default_Handler:
  234. b .
  235. .size Default_Handler, . - Default_Handler
  236. /* Macro to define default handlers. Default handler
  237. * will be weak symbol and just dead loops. They can be
  238. * overwritten by other handlers */
  239. .macro def_irq_handler handler_name
  240. .weak \handler_name
  241. .set \handler_name, Default_Handler
  242. .endm
  243. def_irq_handler HARD_FAULT_IRQHandler
  244. def_irq_handler SVC_IRQHandler
  245. def_irq_handler PENDSV_IRQHandler
  246. def_irq_handler SYSTICK_IRQHandler
  247. def_irq_handler USB_IRQHandler
  248. def_irq_handler IIC_IRQHandler
  249. def_irq_handler QSPI_IRQHandler
  250. def_irq_handler SPI0_IRQHandler
  251. def_irq_handler SPI1_IRQHandler
  252. def_irq_handler UART0_IRQHandler
  253. def_irq_handler UART1_IRQHandler
  254. def_irq_handler MEMCP_IRQHandler
  255. def_irq_handler RSA_IRQHandler
  256. def_irq_handler SCI0_IRQHandler
  257. def_irq_handler SCI1_IRQHandler
  258. def_irq_handler BT_IRQHandler
  259. def_irq_handler GPIO_IRQHandler
  260. def_irq_handler EXTI0_IRQHandler
  261. def_irq_handler EXTI1_IRQHandler
  262. def_irq_handler EXTI2_IRQHandler
  263. def_irq_handler TIMER0_IRQHandler
  264. def_irq_handler TIMER1_IRQHandler
  265. def_irq_handler TIMER2_IRQHandler
  266. def_irq_handler TIMER3_IRQHandler
  267. def_irq_handler TIMER4_IRQHandler
  268. def_irq_handler TIMER5_IRQHandler
  269. def_irq_handler TIMER6_IRQHandler
  270. def_irq_handler TIMER7_IRQHandler
  271. def_irq_handler TIMER8_IRQHandler
  272. def_irq_handler SM4_IRQHandler
  273. def_irq_handler SEC_IRQHandler
  274. def_irq_handler MSR_IRQHandler
  275. def_irq_handler TRNG_IRQHandler
  276. def_irq_handler WDT_IRQHandler