arm_startup_nrf52.s 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. ;/* Copyright (c) 2012 ARM LIMITED
  2. ;
  3. ; All rights reserved.
  4. ; Redistribution and use in source and binary forms, with or without
  5. ; modification, are permitted provided that the following conditions are met:
  6. ; - Redistributions of source code must retain the above copyright
  7. ; notice, this list of conditions and the following disclaimer.
  8. ; - Redistributions in binary form must reproduce the above copyright
  9. ; notice, this list of conditions and the following disclaimer in the
  10. ; documentation and/or other materials provided with the distribution.
  11. ; - Neither the name of ARM nor the names of its contributors may be used
  12. ; to endorse or promote products derived from this software without
  13. ; specific prior written permission.
  14. ; *
  15. ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  16. ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. ; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
  19. ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  20. ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  21. ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  22. ; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  23. ; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  24. ; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  25. ; POSSIBILITY OF SUCH DAMAGE.
  26. ; ---------------------------------------------------------------------------*/
  27. IF :DEF: __STACK_SIZE
  28. Stack_Size EQU __STACK_SIZE
  29. ELSE
  30. Stack_Size EQU 8192
  31. ENDIF
  32. AREA STACK, NOINIT, READWRITE, ALIGN=3
  33. Stack_Mem SPACE Stack_Size
  34. __initial_sp
  35. IF :DEF: __HEAP_SIZE
  36. Heap_Size EQU __HEAP_SIZE
  37. ELSE
  38. Heap_Size EQU 8192
  39. ENDIF
  40. AREA HEAP, NOINIT, READWRITE, ALIGN=3
  41. __heap_base
  42. Heap_Mem SPACE Heap_Size
  43. __heap_limit
  44. PRESERVE8
  45. THUMB
  46. ; Vector Table Mapped to Address 0 at Reset
  47. AREA RESET, DATA, READONLY
  48. EXPORT __Vectors
  49. EXPORT __Vectors_End
  50. EXPORT __Vectors_Size
  51. __Vectors DCD __initial_sp ; Top of Stack
  52. DCD Reset_Handler
  53. DCD NMI_Handler
  54. DCD HardFault_Handler
  55. DCD MemoryManagement_Handler
  56. DCD BusFault_Handler
  57. DCD UsageFault_Handler
  58. DCD 0 ; Reserved
  59. DCD 0 ; Reserved
  60. DCD 0 ; Reserved
  61. DCD 0 ; Reserved
  62. DCD SVC_Handler
  63. DCD DebugMonitor_Handler
  64. DCD 0 ; Reserved
  65. DCD PendSV_Handler
  66. DCD SysTick_Handler
  67. ; External Interrupts
  68. DCD POWER_CLOCK_IRQHandler
  69. DCD RADIO_IRQHandler
  70. DCD UARTE0_UART0_IRQHandler
  71. DCD SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
  72. DCD SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
  73. DCD NFCT_IRQHandler
  74. DCD GPIOTE_IRQHandler
  75. DCD SAADC_IRQHandler
  76. DCD TIMER0_IRQHandler
  77. DCD TIMER1_IRQHandler
  78. DCD TIMER2_IRQHandler
  79. DCD RTC0_IRQHandler
  80. DCD TEMP_IRQHandler
  81. DCD RNG_IRQHandler
  82. DCD ECB_IRQHandler
  83. DCD CCM_AAR_IRQHandler
  84. DCD WDT_IRQHandler
  85. DCD RTC1_IRQHandler
  86. DCD QDEC_IRQHandler
  87. DCD COMP_LPCOMP_IRQHandler
  88. DCD SWI0_EGU0_IRQHandler
  89. DCD SWI1_EGU1_IRQHandler
  90. DCD SWI2_EGU2_IRQHandler
  91. DCD SWI3_EGU3_IRQHandler
  92. DCD SWI4_EGU4_IRQHandler
  93. DCD SWI5_EGU5_IRQHandler
  94. DCD TIMER3_IRQHandler
  95. DCD TIMER4_IRQHandler
  96. DCD PWM0_IRQHandler
  97. DCD PDM_IRQHandler
  98. DCD 0 ; Reserved
  99. DCD 0 ; Reserved
  100. DCD MWU_IRQHandler
  101. DCD PWM1_IRQHandler
  102. DCD PWM2_IRQHandler
  103. DCD SPIM2_SPIS2_SPI2_IRQHandler
  104. DCD RTC2_IRQHandler
  105. DCD I2S_IRQHandler
  106. DCD FPU_IRQHandler
  107. DCD 0 ; Reserved
  108. DCD 0 ; Reserved
  109. DCD 0 ; Reserved
  110. DCD 0 ; Reserved
  111. DCD 0 ; Reserved
  112. DCD 0 ; Reserved
  113. DCD 0 ; Reserved
  114. DCD 0 ; Reserved
  115. DCD 0 ; Reserved
  116. DCD 0 ; Reserved
  117. DCD 0 ; Reserved
  118. DCD 0 ; Reserved
  119. DCD 0 ; Reserved
  120. DCD 0 ; Reserved
  121. DCD 0 ; Reserved
  122. DCD 0 ; Reserved
  123. DCD 0 ; Reserved
  124. DCD 0 ; Reserved
  125. DCD 0 ; Reserved
  126. DCD 0 ; Reserved
  127. DCD 0 ; Reserved
  128. DCD 0 ; Reserved
  129. DCD 0 ; Reserved
  130. DCD 0 ; Reserved
  131. DCD 0 ; Reserved
  132. DCD 0 ; Reserved
  133. DCD 0 ; Reserved
  134. DCD 0 ; Reserved
  135. DCD 0 ; Reserved
  136. DCD 0 ; Reserved
  137. DCD 0 ; Reserved
  138. DCD 0 ; Reserved
  139. DCD 0 ; Reserved
  140. DCD 0 ; Reserved
  141. DCD 0 ; Reserved
  142. DCD 0 ; Reserved
  143. DCD 0 ; Reserved
  144. DCD 0 ; Reserved
  145. DCD 0 ; Reserved
  146. DCD 0 ; Reserved
  147. DCD 0 ; Reserved
  148. DCD 0 ; Reserved
  149. DCD 0 ; Reserved
  150. DCD 0 ; Reserved
  151. DCD 0 ; Reserved
  152. DCD 0 ; Reserved
  153. DCD 0 ; Reserved
  154. DCD 0 ; Reserved
  155. DCD 0 ; Reserved
  156. DCD 0 ; Reserved
  157. DCD 0 ; Reserved
  158. DCD 0 ; Reserved
  159. DCD 0 ; Reserved
  160. DCD 0 ; Reserved
  161. DCD 0 ; Reserved
  162. DCD 0 ; Reserved
  163. DCD 0 ; Reserved
  164. DCD 0 ; Reserved
  165. DCD 0 ; Reserved
  166. DCD 0 ; Reserved
  167. DCD 0 ; Reserved
  168. DCD 0 ; Reserved
  169. DCD 0 ; Reserved
  170. DCD 0 ; Reserved
  171. DCD 0 ; Reserved
  172. DCD 0 ; Reserved
  173. DCD 0 ; Reserved
  174. DCD 0 ; Reserved
  175. DCD 0 ; Reserved
  176. DCD 0 ; Reserved
  177. DCD 0 ; Reserved
  178. DCD 0 ; Reserved
  179. DCD 0 ; Reserved
  180. DCD 0 ; Reserved
  181. DCD 0 ; Reserved
  182. DCD 0 ; Reserved
  183. DCD 0 ; Reserved
  184. DCD 0 ; Reserved
  185. DCD 0 ; Reserved
  186. DCD 0 ; Reserved
  187. DCD 0 ; Reserved
  188. DCD 0 ; Reserved
  189. DCD 0 ; Reserved
  190. DCD 0 ; Reserved
  191. DCD 0 ; Reserved
  192. DCD 0 ; Reserved
  193. DCD 0 ; Reserved
  194. DCD 0 ; Reserved
  195. DCD 0 ; Reserved
  196. DCD 0 ; Reserved
  197. DCD 0 ; Reserved
  198. DCD 0 ; Reserved
  199. DCD 0 ; Reserved
  200. DCD 0 ; Reserved
  201. DCD 0 ; Reserved
  202. DCD 0 ; Reserved
  203. DCD 0 ; Reserved
  204. DCD 0 ; Reserved
  205. DCD 0 ; Reserved
  206. DCD 0 ; Reserved
  207. DCD 0 ; Reserved
  208. DCD 0 ; Reserved
  209. DCD 0 ; Reserved
  210. DCD 0 ; Reserved
  211. DCD 0 ; Reserved
  212. DCD 0 ; Reserved
  213. DCD 0 ; Reserved
  214. DCD 0 ; Reserved
  215. DCD 0 ; Reserved
  216. DCD 0 ; Reserved
  217. DCD 0 ; Reserved
  218. DCD 0 ; Reserved
  219. DCD 0 ; Reserved
  220. DCD 0 ; Reserved
  221. DCD 0 ; Reserved
  222. DCD 0 ; Reserved
  223. DCD 0 ; Reserved
  224. DCD 0 ; Reserved
  225. DCD 0 ; Reserved
  226. DCD 0 ; Reserved
  227. DCD 0 ; Reserved
  228. DCD 0 ; Reserved
  229. DCD 0 ; Reserved
  230. DCD 0 ; Reserved
  231. DCD 0 ; Reserved
  232. DCD 0 ; Reserved
  233. DCD 0 ; Reserved
  234. DCD 0 ; Reserved
  235. DCD 0 ; Reserved
  236. DCD 0 ; Reserved
  237. DCD 0 ; Reserved
  238. DCD 0 ; Reserved
  239. DCD 0 ; Reserved
  240. DCD 0 ; Reserved
  241. DCD 0 ; Reserved
  242. DCD 0 ; Reserved
  243. DCD 0 ; Reserved
  244. DCD 0 ; Reserved
  245. DCD 0 ; Reserved
  246. DCD 0 ; Reserved
  247. DCD 0 ; Reserved
  248. DCD 0 ; Reserved
  249. DCD 0 ; Reserved
  250. DCD 0 ; Reserved
  251. DCD 0 ; Reserved
  252. DCD 0 ; Reserved
  253. DCD 0 ; Reserved
  254. DCD 0 ; Reserved
  255. DCD 0 ; Reserved
  256. DCD 0 ; Reserved
  257. DCD 0 ; Reserved
  258. DCD 0 ; Reserved
  259. DCD 0 ; Reserved
  260. DCD 0 ; Reserved
  261. DCD 0 ; Reserved
  262. DCD 0 ; Reserved
  263. DCD 0 ; Reserved
  264. DCD 0 ; Reserved
  265. DCD 0 ; Reserved
  266. DCD 0 ; Reserved
  267. DCD 0 ; Reserved
  268. DCD 0 ; Reserved
  269. DCD 0 ; Reserved
  270. DCD 0 ; Reserved
  271. DCD 0 ; Reserved
  272. DCD 0 ; Reserved
  273. DCD 0 ; Reserved
  274. DCD 0 ; Reserved
  275. DCD 0 ; Reserved
  276. DCD 0 ; Reserved
  277. DCD 0 ; Reserved
  278. DCD 0 ; Reserved
  279. DCD 0 ; Reserved
  280. DCD 0 ; Reserved
  281. DCD 0 ; Reserved
  282. DCD 0 ; Reserved
  283. DCD 0 ; Reserved
  284. DCD 0 ; Reserved
  285. DCD 0 ; Reserved
  286. DCD 0 ; Reserved
  287. DCD 0 ; Reserved
  288. DCD 0 ; Reserved
  289. DCD 0 ; Reserved
  290. DCD 0 ; Reserved
  291. DCD 0 ; Reserved
  292. DCD 0 ; Reserved
  293. DCD 0 ; Reserved
  294. DCD 0 ; Reserved
  295. DCD 0 ; Reserved
  296. DCD 0 ; Reserved
  297. DCD 0 ; Reserved
  298. DCD 0 ; Reserved
  299. DCD 0 ; Reserved
  300. DCD 0 ; Reserved
  301. DCD 0 ; Reserved
  302. DCD 0 ; Reserved
  303. DCD 0 ; Reserved
  304. DCD 0 ; Reserved
  305. DCD 0 ; Reserved
  306. DCD 0 ; Reserved
  307. DCD 0 ; Reserved
  308. __Vectors_End
  309. __Vectors_Size EQU __Vectors_End - __Vectors
  310. AREA |.text|, CODE, READONLY
  311. ; Reset Handler
  312. Reset_Handler PROC
  313. EXPORT Reset_Handler [WEAK]
  314. IMPORT SystemInit
  315. IMPORT __main
  316. LDR R0, =SystemInit
  317. BLX R0
  318. LDR R0, =__main
  319. BX R0
  320. ENDP
  321. ; Dummy Exception Handlers (infinite loops which can be modified)
  322. NMI_Handler PROC
  323. EXPORT NMI_Handler [WEAK]
  324. B .
  325. ENDP
  326. HardFault_Handler\
  327. PROC
  328. EXPORT HardFault_Handler [WEAK]
  329. B .
  330. ENDP
  331. MemoryManagement_Handler\
  332. PROC
  333. EXPORT MemoryManagement_Handler [WEAK]
  334. B .
  335. ENDP
  336. BusFault_Handler\
  337. PROC
  338. EXPORT BusFault_Handler [WEAK]
  339. B .
  340. ENDP
  341. UsageFault_Handler\
  342. PROC
  343. EXPORT UsageFault_Handler [WEAK]
  344. B .
  345. ENDP
  346. SVC_Handler PROC
  347. EXPORT SVC_Handler [WEAK]
  348. B .
  349. ENDP
  350. DebugMonitor_Handler\
  351. PROC
  352. EXPORT DebugMonitor_Handler [WEAK]
  353. B .
  354. ENDP
  355. PendSV_Handler PROC
  356. EXPORT PendSV_Handler [WEAK]
  357. B .
  358. ENDP
  359. SysTick_Handler PROC
  360. EXPORT SysTick_Handler [WEAK]
  361. B .
  362. ENDP
  363. Default_Handler PROC
  364. EXPORT POWER_CLOCK_IRQHandler [WEAK]
  365. EXPORT RADIO_IRQHandler [WEAK]
  366. EXPORT UARTE0_UART0_IRQHandler [WEAK]
  367. EXPORT SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler [WEAK]
  368. EXPORT SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler [WEAK]
  369. EXPORT NFCT_IRQHandler [WEAK]
  370. EXPORT GPIOTE_IRQHandler [WEAK]
  371. EXPORT SAADC_IRQHandler [WEAK]
  372. EXPORT TIMER0_IRQHandler [WEAK]
  373. EXPORT TIMER1_IRQHandler [WEAK]
  374. EXPORT TIMER2_IRQHandler [WEAK]
  375. EXPORT RTC0_IRQHandler [WEAK]
  376. EXPORT TEMP_IRQHandler [WEAK]
  377. EXPORT RNG_IRQHandler [WEAK]
  378. EXPORT ECB_IRQHandler [WEAK]
  379. EXPORT CCM_AAR_IRQHandler [WEAK]
  380. EXPORT WDT_IRQHandler [WEAK]
  381. EXPORT RTC1_IRQHandler [WEAK]
  382. EXPORT QDEC_IRQHandler [WEAK]
  383. EXPORT COMP_LPCOMP_IRQHandler [WEAK]
  384. EXPORT SWI0_EGU0_IRQHandler [WEAK]
  385. EXPORT SWI1_EGU1_IRQHandler [WEAK]
  386. EXPORT SWI2_EGU2_IRQHandler [WEAK]
  387. EXPORT SWI3_EGU3_IRQHandler [WEAK]
  388. EXPORT SWI4_EGU4_IRQHandler [WEAK]
  389. EXPORT SWI5_EGU5_IRQHandler [WEAK]
  390. EXPORT TIMER3_IRQHandler [WEAK]
  391. EXPORT TIMER4_IRQHandler [WEAK]
  392. EXPORT PWM0_IRQHandler [WEAK]
  393. EXPORT PDM_IRQHandler [WEAK]
  394. EXPORT MWU_IRQHandler [WEAK]
  395. EXPORT PWM1_IRQHandler [WEAK]
  396. EXPORT PWM2_IRQHandler [WEAK]
  397. EXPORT SPIM2_SPIS2_SPI2_IRQHandler [WEAK]
  398. EXPORT RTC2_IRQHandler [WEAK]
  399. EXPORT I2S_IRQHandler [WEAK]
  400. EXPORT FPU_IRQHandler [WEAK]
  401. POWER_CLOCK_IRQHandler
  402. RADIO_IRQHandler
  403. UARTE0_UART0_IRQHandler
  404. SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
  405. SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
  406. NFCT_IRQHandler
  407. GPIOTE_IRQHandler
  408. SAADC_IRQHandler
  409. TIMER0_IRQHandler
  410. TIMER1_IRQHandler
  411. TIMER2_IRQHandler
  412. RTC0_IRQHandler
  413. TEMP_IRQHandler
  414. RNG_IRQHandler
  415. ECB_IRQHandler
  416. CCM_AAR_IRQHandler
  417. WDT_IRQHandler
  418. RTC1_IRQHandler
  419. QDEC_IRQHandler
  420. COMP_LPCOMP_IRQHandler
  421. SWI0_EGU0_IRQHandler
  422. SWI1_EGU1_IRQHandler
  423. SWI2_EGU2_IRQHandler
  424. SWI3_EGU3_IRQHandler
  425. SWI4_EGU4_IRQHandler
  426. SWI5_EGU5_IRQHandler
  427. TIMER3_IRQHandler
  428. TIMER4_IRQHandler
  429. PWM0_IRQHandler
  430. PDM_IRQHandler
  431. MWU_IRQHandler
  432. PWM1_IRQHandler
  433. PWM2_IRQHandler
  434. SPIM2_SPIS2_SPI2_IRQHandler
  435. RTC2_IRQHandler
  436. I2S_IRQHandler
  437. FPU_IRQHandler
  438. B .
  439. ENDP
  440. ALIGN
  441. ; User Initial Stack & Heap
  442. IF :DEF:__MICROLIB
  443. EXPORT __initial_sp
  444. EXPORT __heap_base
  445. EXPORT __heap_limit
  446. ELSE
  447. IMPORT __use_two_region_memory
  448. EXPORT __user_initial_stackheap
  449. __user_initial_stackheap PROC
  450. LDR R0, = Heap_Mem
  451. LDR R1, = (Stack_Mem + Stack_Size)
  452. LDR R2, = (Heap_Mem + Heap_Size)
  453. LDR R3, = Stack_Mem
  454. BX LR
  455. ENDP
  456. ALIGN
  457. ENDIF
  458. END