gcc_startup_nrf52.s 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. /* Copyright (c) 2013 ARM LIMITED
  2. All rights reserved.
  3. Redistribution and use in source and binary forms, with or without
  4. modification, are permitted provided that the following conditions are met:
  5. - Redistributions of source code must retain the above copyright
  6. notice, this list of conditions and the following disclaimer.
  7. - Redistributions in binary form must reproduce the above copyright
  8. notice, this list of conditions and the following disclaimer in the
  9. documentation and/or other materials provided with the distribution.
  10. - Neither the name of ARM nor the names of its contributors may be used
  11. to endorse or promote products derived from this software without
  12. specific prior written permission.
  13. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  14. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  16. ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
  17. LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  23. POSSIBILITY OF SUCH DAMAGE.
  24. ---------------------------------------------------------------------------*/
  25. .syntax unified
  26. .arch armv7e-m
  27. .section .stack
  28. .align 3
  29. #ifdef __STACK_SIZE
  30. .equ Stack_Size, __STACK_SIZE
  31. #else
  32. .equ Stack_Size, 8192
  33. #endif
  34. .globl __StackTop
  35. .globl __StackLimit
  36. __StackLimit:
  37. .space Stack_Size
  38. .size __StackLimit, . - __StackLimit
  39. __StackTop:
  40. .size __StackTop, . - __StackTop
  41. .section .heap
  42. .align 3
  43. #ifdef __HEAP_SIZE
  44. .equ Heap_Size, __HEAP_SIZE
  45. #else
  46. .equ Heap_Size, 8192
  47. #endif
  48. .globl __HeapBase
  49. .globl __HeapLimit
  50. __HeapBase:
  51. .if Heap_Size
  52. .space Heap_Size
  53. .endif
  54. .size __HeapBase, . - __HeapBase
  55. __HeapLimit:
  56. .size __HeapLimit, . - __HeapLimit
  57. .section .isr_vector
  58. .align 2
  59. .globl __isr_vector
  60. __isr_vector:
  61. .long __StackTop /* Top of Stack */
  62. .long Reset_Handler
  63. .long NMI_Handler
  64. .long HardFault_Handler
  65. .long MemoryManagement_Handler
  66. .long BusFault_Handler
  67. .long UsageFault_Handler
  68. .long 0 /*Reserved */
  69. .long 0 /*Reserved */
  70. .long 0 /*Reserved */
  71. .long 0 /*Reserved */
  72. .long SVC_Handler
  73. .long DebugMonitor_Handler
  74. .long 0 /*Reserved */
  75. .long PendSV_Handler
  76. .long SysTick_Handler
  77. /* External Interrupts */
  78. .long POWER_CLOCK_IRQHandler
  79. .long RADIO_IRQHandler
  80. .long UARTE0_UART0_IRQHandler
  81. .long SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
  82. .long SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
  83. .long NFCT_IRQHandler
  84. .long GPIOTE_IRQHandler
  85. .long SAADC_IRQHandler
  86. .long TIMER0_IRQHandler
  87. .long TIMER1_IRQHandler
  88. .long TIMER2_IRQHandler
  89. .long RTC0_IRQHandler
  90. .long TEMP_IRQHandler
  91. .long RNG_IRQHandler
  92. .long ECB_IRQHandler
  93. .long CCM_AAR_IRQHandler
  94. .long WDT_IRQHandler
  95. .long RTC1_IRQHandler
  96. .long QDEC_IRQHandler
  97. .long COMP_LPCOMP_IRQHandler
  98. .long SWI0_EGU0_IRQHandler
  99. .long SWI1_EGU1_IRQHandler
  100. .long SWI2_EGU2_IRQHandler
  101. .long SWI3_EGU3_IRQHandler
  102. .long SWI4_EGU4_IRQHandler
  103. .long SWI5_EGU5_IRQHandler
  104. .long TIMER3_IRQHandler
  105. .long TIMER4_IRQHandler
  106. .long PWM0_IRQHandler
  107. .long PDM_IRQHandler
  108. .long 0 /*Reserved */
  109. .long 0 /*Reserved */
  110. .long MWU_IRQHandler
  111. .long PWM1_IRQHandler
  112. .long PWM2_IRQHandler
  113. .long SPIM2_SPIS2_SPI2_IRQHandler
  114. .long RTC2_IRQHandler
  115. .long I2S_IRQHandler
  116. .long FPU_IRQHandler
  117. .long 0 /*Reserved */
  118. .long 0 /*Reserved */
  119. .long 0 /*Reserved */
  120. .long 0 /*Reserved */
  121. .long 0 /*Reserved */
  122. .long 0 /*Reserved */
  123. .long 0 /*Reserved */
  124. .long 0 /*Reserved */
  125. .long 0 /*Reserved */
  126. .long 0 /*Reserved */
  127. .long 0 /*Reserved */
  128. .long 0 /*Reserved */
  129. .long 0 /*Reserved */
  130. .long 0 /*Reserved */
  131. .long 0 /*Reserved */
  132. .long 0 /*Reserved */
  133. .long 0 /*Reserved */
  134. .long 0 /*Reserved */
  135. .long 0 /*Reserved */
  136. .long 0 /*Reserved */
  137. .long 0 /*Reserved */
  138. .long 0 /*Reserved */
  139. .long 0 /*Reserved */
  140. .long 0 /*Reserved */
  141. .long 0 /*Reserved */
  142. .long 0 /*Reserved */
  143. .long 0 /*Reserved */
  144. .long 0 /*Reserved */
  145. .long 0 /*Reserved */
  146. .long 0 /*Reserved */
  147. .long 0 /*Reserved */
  148. .long 0 /*Reserved */
  149. .long 0 /*Reserved */
  150. .long 0 /*Reserved */
  151. .long 0 /*Reserved */
  152. .long 0 /*Reserved */
  153. .long 0 /*Reserved */
  154. .long 0 /*Reserved */
  155. .long 0 /*Reserved */
  156. .long 0 /*Reserved */
  157. .long 0 /*Reserved */
  158. .long 0 /*Reserved */
  159. .long 0 /*Reserved */
  160. .long 0 /*Reserved */
  161. .long 0 /*Reserved */
  162. .long 0 /*Reserved */
  163. .long 0 /*Reserved */
  164. .long 0 /*Reserved */
  165. .long 0 /*Reserved */
  166. .long 0 /*Reserved */
  167. .long 0 /*Reserved */
  168. .long 0 /*Reserved */
  169. .long 0 /*Reserved */
  170. .long 0 /*Reserved */
  171. .long 0 /*Reserved */
  172. .long 0 /*Reserved */
  173. .long 0 /*Reserved */
  174. .long 0 /*Reserved */
  175. .long 0 /*Reserved */
  176. .long 0 /*Reserved */
  177. .long 0 /*Reserved */
  178. .long 0 /*Reserved */
  179. .long 0 /*Reserved */
  180. .long 0 /*Reserved */
  181. .long 0 /*Reserved */
  182. .long 0 /*Reserved */
  183. .long 0 /*Reserved */
  184. .long 0 /*Reserved */
  185. .long 0 /*Reserved */
  186. .long 0 /*Reserved */
  187. .long 0 /*Reserved */
  188. .long 0 /*Reserved */
  189. .long 0 /*Reserved */
  190. .long 0 /*Reserved */
  191. .long 0 /*Reserved */
  192. .long 0 /*Reserved */
  193. .long 0 /*Reserved */
  194. .long 0 /*Reserved */
  195. .long 0 /*Reserved */
  196. .long 0 /*Reserved */
  197. .long 0 /*Reserved */
  198. .long 0 /*Reserved */
  199. .long 0 /*Reserved */
  200. .long 0 /*Reserved */
  201. .long 0 /*Reserved */
  202. .long 0 /*Reserved */
  203. .long 0 /*Reserved */
  204. .long 0 /*Reserved */
  205. .long 0 /*Reserved */
  206. .long 0 /*Reserved */
  207. .long 0 /*Reserved */
  208. .long 0 /*Reserved */
  209. .long 0 /*Reserved */
  210. .long 0 /*Reserved */
  211. .long 0 /*Reserved */
  212. .long 0 /*Reserved */
  213. .long 0 /*Reserved */
  214. .long 0 /*Reserved */
  215. .long 0 /*Reserved */
  216. .long 0 /*Reserved */
  217. .long 0 /*Reserved */
  218. .long 0 /*Reserved */
  219. .long 0 /*Reserved */
  220. .long 0 /*Reserved */
  221. .long 0 /*Reserved */
  222. .long 0 /*Reserved */
  223. .long 0 /*Reserved */
  224. .long 0 /*Reserved */
  225. .long 0 /*Reserved */
  226. .long 0 /*Reserved */
  227. .long 0 /*Reserved */
  228. .long 0 /*Reserved */
  229. .long 0 /*Reserved */
  230. .long 0 /*Reserved */
  231. .long 0 /*Reserved */
  232. .long 0 /*Reserved */
  233. .long 0 /*Reserved */
  234. .long 0 /*Reserved */
  235. .long 0 /*Reserved */
  236. .long 0 /*Reserved */
  237. .long 0 /*Reserved */
  238. .long 0 /*Reserved */
  239. .long 0 /*Reserved */
  240. .long 0 /*Reserved */
  241. .long 0 /*Reserved */
  242. .long 0 /*Reserved */
  243. .long 0 /*Reserved */
  244. .long 0 /*Reserved */
  245. .long 0 /*Reserved */
  246. .long 0 /*Reserved */
  247. .long 0 /*Reserved */
  248. .long 0 /*Reserved */
  249. .long 0 /*Reserved */
  250. .long 0 /*Reserved */
  251. .long 0 /*Reserved */
  252. .long 0 /*Reserved */
  253. .long 0 /*Reserved */
  254. .long 0 /*Reserved */
  255. .long 0 /*Reserved */
  256. .long 0 /*Reserved */
  257. .long 0 /*Reserved */
  258. .long 0 /*Reserved */
  259. .long 0 /*Reserved */
  260. .long 0 /*Reserved */
  261. .long 0 /*Reserved */
  262. .long 0 /*Reserved */
  263. .long 0 /*Reserved */
  264. .long 0 /*Reserved */
  265. .long 0 /*Reserved */
  266. .long 0 /*Reserved */
  267. .long 0 /*Reserved */
  268. .long 0 /*Reserved */
  269. .long 0 /*Reserved */
  270. .long 0 /*Reserved */
  271. .long 0 /*Reserved */
  272. .long 0 /*Reserved */
  273. .long 0 /*Reserved */
  274. .long 0 /*Reserved */
  275. .long 0 /*Reserved */
  276. .long 0 /*Reserved */
  277. .long 0 /*Reserved */
  278. .long 0 /*Reserved */
  279. .long 0 /*Reserved */
  280. .long 0 /*Reserved */
  281. .long 0 /*Reserved */
  282. .long 0 /*Reserved */
  283. .long 0 /*Reserved */
  284. .long 0 /*Reserved */
  285. .long 0 /*Reserved */
  286. .long 0 /*Reserved */
  287. .long 0 /*Reserved */
  288. .long 0 /*Reserved */
  289. .long 0 /*Reserved */
  290. .long 0 /*Reserved */
  291. .long 0 /*Reserved */
  292. .long 0 /*Reserved */
  293. .long 0 /*Reserved */
  294. .long 0 /*Reserved */
  295. .long 0 /*Reserved */
  296. .long 0 /*Reserved */
  297. .long 0 /*Reserved */
  298. .long 0 /*Reserved */
  299. .long 0 /*Reserved */
  300. .long 0 /*Reserved */
  301. .long 0 /*Reserved */
  302. .long 0 /*Reserved */
  303. .long 0 /*Reserved */
  304. .long 0 /*Reserved */
  305. .long 0 /*Reserved */
  306. .long 0 /*Reserved */
  307. .long 0 /*Reserved */
  308. .long 0 /*Reserved */
  309. .long 0 /*Reserved */
  310. .long 0 /*Reserved */
  311. .long 0 /*Reserved */
  312. .long 0 /*Reserved */
  313. .long 0 /*Reserved */
  314. .long 0 /*Reserved */
  315. .long 0 /*Reserved */
  316. .long 0 /*Reserved */
  317. .long 0 /*Reserved */
  318. .size __isr_vector, . - __isr_vector
  319. /* Reset Handler */
  320. .text
  321. .thumb
  322. .thumb_func
  323. .align 1
  324. .globl Reset_Handler
  325. .type Reset_Handler, %function
  326. Reset_Handler:
  327. /* Loop to copy data from read only memory to RAM.
  328. * The ranges of copy from/to are specified by following symbols:
  329. * __etext: LMA of start of the section to copy from. Usually end of text
  330. * __data_start__: VMA of start of the section to copy to.
  331. * __bss_start__: VMA of end of the section to copy to. Normally __data_end__ is used, but by using __bss_start__
  332. * the user can add their own initialized data section before BSS section with the INTERT AFTER command.
  333. *
  334. * All addresses must be aligned to 4 bytes boundary.
  335. */
  336. ldr r1, =__etext
  337. ldr r2, =__data_start__
  338. ldr r3, =__bss_start__
  339. subs r3, r2
  340. ble .L_loop1_done
  341. .L_loop1:
  342. subs r3, #4
  343. ldr r0, [r1,r3]
  344. str r0, [r2,r3]
  345. bgt .L_loop1
  346. .L_loop1_done:
  347. /* This part of work usually is done in C library startup code. Otherwise,
  348. * define __STARTUP_CLEAR_BSS to enable it in this startup. This section
  349. * clears the RAM where BSS data is located.
  350. *
  351. * The BSS section is specified by following symbols
  352. * __bss_start__: start of the BSS section.
  353. * __bss_end__: end of the BSS section.
  354. *
  355. * All addresses must be aligned to 4 bytes boundary.
  356. */
  357. #ifdef __STARTUP_CLEAR_BSS
  358. ldr r1, =__bss_start__
  359. ldr r2, =__bss_end__
  360. movs r0, 0
  361. subs r2, r1
  362. ble .L_loop3_done
  363. .L_loop3:
  364. subs r2, #4
  365. str r0, [r1, r2]
  366. bgt .L_loop3
  367. .L_loop3_done:
  368. #endif /* __STARTUP_CLEAR_BSS */
  369. /* Execute SystemInit function. */
  370. bl SystemInit
  371. /* Call _start function provided by libraries.
  372. * If those libraries are not accessible, define __START as your entry point.
  373. */
  374. #ifndef __START
  375. #define __START _start
  376. #endif
  377. bl __START
  378. .pool
  379. .size Reset_Handler,.-Reset_Handler
  380. .section ".text"
  381. /* Dummy Exception Handlers (infinite loops which can be modified) */
  382. .weak NMI_Handler
  383. .type NMI_Handler, %function
  384. NMI_Handler:
  385. b .
  386. .size NMI_Handler, . - NMI_Handler
  387. .weak HardFault_Handler
  388. .type HardFault_Handler, %function
  389. HardFault_Handler:
  390. b .
  391. .size HardFault_Handler, . - HardFault_Handler
  392. .weak MemoryManagement_Handler
  393. .type MemoryManagement_Handler, %function
  394. MemoryManagement_Handler:
  395. b .
  396. .size MemoryManagement_Handler, . - MemoryManagement_Handler
  397. .weak BusFault_Handler
  398. .type BusFault_Handler, %function
  399. BusFault_Handler:
  400. b .
  401. .size BusFault_Handler, . - BusFault_Handler
  402. .weak UsageFault_Handler
  403. .type UsageFault_Handler, %function
  404. UsageFault_Handler:
  405. b .
  406. .size UsageFault_Handler, . - UsageFault_Handler
  407. .weak SVC_Handler
  408. .type SVC_Handler, %function
  409. SVC_Handler:
  410. b .
  411. .size SVC_Handler, . - SVC_Handler
  412. .weak DebugMonitor_Handler
  413. .type DebugMonitor_Handler, %function
  414. DebugMonitor_Handler:
  415. b .
  416. .size DebugMonitor_Handler, . - DebugMonitor_Handler
  417. .weak PendSV_Handler
  418. .type PendSV_Handler, %function
  419. PendSV_Handler:
  420. b .
  421. .size PendSV_Handler, . - PendSV_Handler
  422. .weak SysTick_Handler
  423. .type SysTick_Handler, %function
  424. SysTick_Handler:
  425. b .
  426. .size SysTick_Handler, . - SysTick_Handler
  427. /* IRQ Handlers */
  428. .globl Default_Handler
  429. .type Default_Handler, %function
  430. Default_Handler:
  431. b .
  432. .size Default_Handler, . - Default_Handler
  433. .macro IRQ handler
  434. .weak \handler
  435. .set \handler, Default_Handler
  436. .endm
  437. IRQ POWER_CLOCK_IRQHandler
  438. IRQ RADIO_IRQHandler
  439. IRQ UARTE0_UART0_IRQHandler
  440. IRQ SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
  441. IRQ SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
  442. IRQ NFCT_IRQHandler
  443. IRQ GPIOTE_IRQHandler
  444. IRQ SAADC_IRQHandler
  445. IRQ TIMER0_IRQHandler
  446. IRQ TIMER1_IRQHandler
  447. IRQ TIMER2_IRQHandler
  448. IRQ RTC0_IRQHandler
  449. IRQ TEMP_IRQHandler
  450. IRQ RNG_IRQHandler
  451. IRQ ECB_IRQHandler
  452. IRQ CCM_AAR_IRQHandler
  453. IRQ WDT_IRQHandler
  454. IRQ RTC1_IRQHandler
  455. IRQ QDEC_IRQHandler
  456. IRQ COMP_LPCOMP_IRQHandler
  457. IRQ SWI0_EGU0_IRQHandler
  458. IRQ SWI1_EGU1_IRQHandler
  459. IRQ SWI2_EGU2_IRQHandler
  460. IRQ SWI3_EGU3_IRQHandler
  461. IRQ SWI4_EGU4_IRQHandler
  462. IRQ SWI5_EGU5_IRQHandler
  463. IRQ TIMER3_IRQHandler
  464. IRQ TIMER4_IRQHandler
  465. IRQ PWM0_IRQHandler
  466. IRQ PDM_IRQHandler
  467. IRQ MWU_IRQHandler
  468. IRQ PWM1_IRQHandler
  469. IRQ PWM2_IRQHandler
  470. IRQ SPIM2_SPIS2_SPI2_IRQHandler
  471. IRQ RTC2_IRQHandler
  472. IRQ I2S_IRQHandler
  473. IRQ FPU_IRQHandler
  474. .end