arm_startup_nrf52810.s 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. ; Copyright (c) 2009-2020 ARM Limited. All rights reserved.
  2. ;
  3. ; SPDX-License-Identifier: Apache-2.0
  4. ;
  5. ; Licensed under the Apache License, Version 2.0 (the License); you may
  6. ; not use this file except in compliance with the License.
  7. ; You may obtain a copy of the License at
  8. ;
  9. ; www.apache.org/licenses/LICENSE-2.0
  10. ;
  11. ; Unless required by applicable law or agreed to in writing, software
  12. ; distributed under the License is distributed on an AS IS BASIS, WITHOUT
  13. ; WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. ; See the License for the specific language governing permissions and
  15. ; limitations under the License.
  16. ;
  17. ; NOTICE: This file has been modified by Nordic Semiconductor ASA.
  18. IF :DEF: __STARTUP_CONFIG
  19. #ifdef __STARTUP_CONFIG
  20. #include "startup_config.h"
  21. #ifndef __STARTUP_CONFIG_STACK_ALIGNEMENT
  22. #define __STARTUP_CONFIG_STACK_ALIGNEMENT 3
  23. #endif
  24. #endif
  25. ENDIF
  26. IF :DEF: __STARTUP_CONFIG
  27. Stack_Size EQU __STARTUP_CONFIG_STACK_SIZE
  28. ELIF :DEF: __STACK_SIZE
  29. Stack_Size EQU __STACK_SIZE
  30. ELSE
  31. Stack_Size EQU 2048
  32. ENDIF
  33. IF :DEF: __STARTUP_CONFIG
  34. Stack_Align EQU __STARTUP_CONFIG_STACK_ALIGNEMENT
  35. ELSE
  36. Stack_Align EQU 3
  37. ENDIF
  38. AREA STACK, NOINIT, READWRITE, ALIGN=Stack_Align
  39. Stack_Mem SPACE Stack_Size
  40. __initial_sp
  41. IF :DEF: __STARTUP_CONFIG
  42. Heap_Size EQU __STARTUP_CONFIG_HEAP_SIZE
  43. ELIF :DEF: __HEAP_SIZE
  44. Heap_Size EQU __HEAP_SIZE
  45. ELSE
  46. Heap_Size EQU 2048
  47. ENDIF
  48. AREA HEAP, NOINIT, READWRITE, ALIGN=3
  49. __heap_base
  50. Heap_Mem SPACE Heap_Size
  51. __heap_limit
  52. PRESERVE8
  53. THUMB
  54. ; Vector Table Mapped to Address 0 at Reset
  55. AREA RESET, DATA, READONLY
  56. EXPORT __Vectors
  57. EXPORT __Vectors_End
  58. EXPORT __Vectors_Size
  59. __Vectors DCD __initial_sp ; Top of Stack
  60. DCD Reset_Handler
  61. DCD NMI_Handler
  62. DCD HardFault_Handler
  63. DCD MemoryManagement_Handler
  64. DCD BusFault_Handler
  65. DCD UsageFault_Handler
  66. DCD 0 ; Reserved
  67. DCD 0 ; Reserved
  68. DCD 0 ; Reserved
  69. DCD 0 ; Reserved
  70. DCD SVC_Handler
  71. DCD DebugMon_Handler
  72. DCD 0 ; Reserved
  73. DCD PendSV_Handler
  74. DCD SysTick_Handler
  75. ; External Interrupts
  76. DCD POWER_CLOCK_IRQHandler
  77. DCD RADIO_IRQHandler
  78. DCD UARTE0_UART0_IRQHandler
  79. DCD TWIM0_TWIS0_TWI0_IRQHandler
  80. DCD SPIM0_SPIS0_SPI0_IRQHandler
  81. DCD 0 ; Reserved
  82. DCD GPIOTE_IRQHandler
  83. DCD SAADC_IRQHandler
  84. DCD TIMER0_IRQHandler
  85. DCD TIMER1_IRQHandler
  86. DCD TIMER2_IRQHandler
  87. DCD RTC0_IRQHandler
  88. DCD TEMP_IRQHandler
  89. DCD RNG_IRQHandler
  90. DCD ECB_IRQHandler
  91. DCD CCM_AAR_IRQHandler
  92. DCD WDT_IRQHandler
  93. DCD RTC1_IRQHandler
  94. DCD QDEC_IRQHandler
  95. DCD COMP_IRQHandler
  96. DCD SWI0_EGU0_IRQHandler
  97. DCD SWI1_EGU1_IRQHandler
  98. DCD SWI2_IRQHandler
  99. DCD SWI3_IRQHandler
  100. DCD SWI4_IRQHandler
  101. DCD SWI5_IRQHandler
  102. DCD 0 ; Reserved
  103. DCD 0 ; Reserved
  104. DCD PWM0_IRQHandler
  105. DCD PDM_IRQHandler
  106. DCD 0 ; Reserved
  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. __Vectors_End
  189. __Vectors_Size EQU __Vectors_End - __Vectors
  190. AREA |.text|, CODE, READONLY
  191. ; Reset Handler
  192. Reset_Handler PROC
  193. EXPORT Reset_Handler [WEAK]
  194. IMPORT SystemInit
  195. IMPORT __main
  196. ; Workaround for Errata 185 RAM: RAM corruption at extreme corners
  197. ; found at the Errata document for your device located
  198. ; at https://infocenter.nordicsemi.com/index.jsp
  199. LDR R0, =0x10000130
  200. LDR R0, [R0]
  201. LDR R1, =0x10000134
  202. LDR R1, [R1]
  203. CMP R0, #0xA
  204. BNE skip
  205. CMP R1, #0x0
  206. BNE skip
  207. LDR R0, =0x40000EE4
  208. LDR R2, [R0]
  209. LDR R3, =0xFFFFFF8F
  210. ANDS R2, R2, R3
  211. LDR R3, =0x00000040
  212. ORRS R2, R2, R3
  213. STR R2, [R0]
  214. skip
  215. LDR R0, =SystemInit
  216. BLX R0
  217. LDR R0, =__main
  218. BX R0
  219. ENDP
  220. ; Dummy Exception Handlers (infinite loops which can be modified)
  221. NMI_Handler PROC
  222. EXPORT NMI_Handler [WEAK]
  223. B .
  224. ENDP
  225. HardFault_Handler\
  226. PROC
  227. EXPORT HardFault_Handler [WEAK]
  228. B .
  229. ENDP
  230. MemoryManagement_Handler\
  231. PROC
  232. EXPORT MemoryManagement_Handler [WEAK]
  233. B .
  234. ENDP
  235. BusFault_Handler\
  236. PROC
  237. EXPORT BusFault_Handler [WEAK]
  238. B .
  239. ENDP
  240. UsageFault_Handler\
  241. PROC
  242. EXPORT UsageFault_Handler [WEAK]
  243. B .
  244. ENDP
  245. SVC_Handler PROC
  246. EXPORT SVC_Handler [WEAK]
  247. B .
  248. ENDP
  249. DebugMon_Handler\
  250. PROC
  251. EXPORT DebugMon_Handler [WEAK]
  252. B .
  253. ENDP
  254. PendSV_Handler PROC
  255. EXPORT PendSV_Handler [WEAK]
  256. B .
  257. ENDP
  258. SysTick_Handler PROC
  259. EXPORT SysTick_Handler [WEAK]
  260. B .
  261. ENDP
  262. Default_Handler PROC
  263. EXPORT POWER_CLOCK_IRQHandler [WEAK]
  264. EXPORT RADIO_IRQHandler [WEAK]
  265. EXPORT UARTE0_UART0_IRQHandler [WEAK]
  266. EXPORT TWIM0_TWIS0_TWI0_IRQHandler [WEAK]
  267. EXPORT SPIM0_SPIS0_SPI0_IRQHandler [WEAK]
  268. EXPORT GPIOTE_IRQHandler [WEAK]
  269. EXPORT SAADC_IRQHandler [WEAK]
  270. EXPORT TIMER0_IRQHandler [WEAK]
  271. EXPORT TIMER1_IRQHandler [WEAK]
  272. EXPORT TIMER2_IRQHandler [WEAK]
  273. EXPORT RTC0_IRQHandler [WEAK]
  274. EXPORT TEMP_IRQHandler [WEAK]
  275. EXPORT RNG_IRQHandler [WEAK]
  276. EXPORT ECB_IRQHandler [WEAK]
  277. EXPORT CCM_AAR_IRQHandler [WEAK]
  278. EXPORT WDT_IRQHandler [WEAK]
  279. EXPORT RTC1_IRQHandler [WEAK]
  280. EXPORT QDEC_IRQHandler [WEAK]
  281. EXPORT COMP_IRQHandler [WEAK]
  282. EXPORT SWI0_EGU0_IRQHandler [WEAK]
  283. EXPORT SWI1_EGU1_IRQHandler [WEAK]
  284. EXPORT SWI2_IRQHandler [WEAK]
  285. EXPORT SWI3_IRQHandler [WEAK]
  286. EXPORT SWI4_IRQHandler [WEAK]
  287. EXPORT SWI5_IRQHandler [WEAK]
  288. EXPORT PWM0_IRQHandler [WEAK]
  289. EXPORT PDM_IRQHandler [WEAK]
  290. POWER_CLOCK_IRQHandler
  291. RADIO_IRQHandler
  292. UARTE0_UART0_IRQHandler
  293. TWIM0_TWIS0_TWI0_IRQHandler
  294. SPIM0_SPIS0_SPI0_IRQHandler
  295. GPIOTE_IRQHandler
  296. SAADC_IRQHandler
  297. TIMER0_IRQHandler
  298. TIMER1_IRQHandler
  299. TIMER2_IRQHandler
  300. RTC0_IRQHandler
  301. TEMP_IRQHandler
  302. RNG_IRQHandler
  303. ECB_IRQHandler
  304. CCM_AAR_IRQHandler
  305. WDT_IRQHandler
  306. RTC1_IRQHandler
  307. QDEC_IRQHandler
  308. COMP_IRQHandler
  309. SWI0_EGU0_IRQHandler
  310. SWI1_EGU1_IRQHandler
  311. SWI2_IRQHandler
  312. SWI3_IRQHandler
  313. SWI4_IRQHandler
  314. SWI5_IRQHandler
  315. PWM0_IRQHandler
  316. PDM_IRQHandler
  317. B .
  318. ENDP
  319. ALIGN
  320. ; User Initial Stack & Heap
  321. IF :DEF:__MICROLIB
  322. EXPORT __initial_sp
  323. EXPORT __heap_base
  324. EXPORT __heap_limit
  325. ELSE
  326. IMPORT __use_two_region_memory
  327. EXPORT __user_initial_stackheap
  328. __user_initial_stackheap PROC
  329. LDR R0, = Heap_Mem
  330. LDR R1, = (Stack_Mem + Stack_Size)
  331. LDR R2, = (Heap_Mem + Heap_Size)
  332. LDR R3, = Stack_Mem
  333. BX LR
  334. ENDP
  335. ALIGN
  336. ENDIF
  337. END