xref: /nrf52832-nimble/nordic/nrfx/mdk/gcc_startup_nrf9160.S (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1/*
2
3Copyright (c) 2009-2018 ARM Limited. All rights reserved.
4
5    SPDX-License-Identifier: Apache-2.0
6
7Licensed under the Apache License, Version 2.0 (the License); you may
8not use this file except in compliance with the License.
9You may obtain a copy of the License at
10
11    www.apache.org/licenses/LICENSE-2.0
12
13Unless required by applicable law or agreed to in writing, software
14distributed under the License is distributed on an AS IS BASIS, WITHOUT
15WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16See the License for the specific language governing permissions and
17limitations under the License.
18
19NOTICE: This file has been modified by Nordic Semiconductor ASA.
20
21*/
22
23    .syntax unified
24    .arch armv8-m.main
25
26#ifdef __STARTUP_CONFIG
27#include "startup_config.h"
28#ifndef __STARTUP_CONFIG_STACK_ALIGNEMENT
29#define __STARTUP_CONFIG_STACK_ALIGNEMENT 3
30#endif
31#endif
32
33    .section .stack
34#if defined(__STARTUP_CONFIG)
35    .align __STARTUP_CONFIG_STACK_ALIGNEMENT
36    .equ    Stack_Size, __STARTUP_CONFIG_STACK_SIZE
37#elif defined(__STACK_SIZE)
38    .align 3
39    .equ    Stack_Size, __STACK_SIZE
40#else
41    .align 3
42    .equ    Stack_Size, 8192
43#endif
44    .globl __StackTop
45    .globl __StackLimit
46__StackLimit:
47    .space Stack_Size
48    .size __StackLimit, . - __StackLimit
49__StackTop:
50    .size __StackTop, . - __StackTop
51
52    .section .heap
53    .align 3
54#if defined(__STARTUP_CONFIG)
55    .equ Heap_Size, __STARTUP_CONFIG_HEAP_SIZE
56#elif defined(__HEAP_SIZE)
57    .equ Heap_Size, __HEAP_SIZE
58#else
59    .equ Heap_Size, 8192
60#endif
61    .globl __HeapBase
62    .globl __HeapLimit
63__HeapBase:
64    .if Heap_Size
65    .space Heap_Size
66    .endif
67    .size __HeapBase, . - __HeapBase
68__HeapLimit:
69    .size __HeapLimit, . - __HeapLimit
70
71    .section .isr_vector
72    .align 2
73    .globl __isr_vector
74__isr_vector:
75    .long   __StackTop                  /* Top of Stack */
76    .long   Reset_Handler
77    .long   NMI_Handler
78    .long   HardFault_Handler
79    .long   MemoryManagement_Handler
80    .long   BusFault_Handler
81    .long   UsageFault_Handler
82    .long   SecureFault_Handler
83    .long   0                           /*Reserved */
84    .long   0                           /*Reserved */
85    .long   0                           /*Reserved */
86    .long   SVC_Handler
87    .long   DebugMon_Handler
88    .long   0                           /*Reserved */
89    .long   PendSV_Handler
90    .long   SysTick_Handler
91
92  /* External Interrupts */
93    .long   0                           /*Reserved */
94    .long   0                           /*Reserved */
95    .long   0                           /*Reserved */
96    .long   SPU_IRQHandler
97    .long   0                           /*Reserved */
98    .long   CLOCK_POWER_IRQHandler
99    .long   0                           /*Reserved */
100    .long   0                           /*Reserved */
101    .long   UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler
102    .long   UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler
103    .long   UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler
104    .long   UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler
105    .long   0                           /*Reserved */
106    .long   GPIOTE0_IRQHandler
107    .long   SAADC_IRQHandler
108    .long   TIMER0_IRQHandler
109    .long   TIMER1_IRQHandler
110    .long   TIMER2_IRQHandler
111    .long   0                           /*Reserved */
112    .long   0                           /*Reserved */
113    .long   RTC0_IRQHandler
114    .long   RTC1_IRQHandler
115    .long   0                           /*Reserved */
116    .long   0                           /*Reserved */
117    .long   WDT_IRQHandler
118    .long   0                           /*Reserved */
119    .long   0                           /*Reserved */
120    .long   EGU0_IRQHandler
121    .long   EGU1_IRQHandler
122    .long   EGU2_IRQHandler
123    .long   EGU3_IRQHandler
124    .long   EGU4_IRQHandler
125    .long   EGU5_IRQHandler
126    .long   PWM0_IRQHandler
127    .long   PWM1_IRQHandler
128    .long   PWM2_IRQHandler
129    .long   PWM3_IRQHandler
130    .long   0                           /*Reserved */
131    .long   PDM_IRQHandler
132    .long   0                           /*Reserved */
133    .long   I2S_IRQHandler
134    .long   0                           /*Reserved */
135    .long   IPC_IRQHandler
136    .long   0                           /*Reserved */
137    .long   FPU_IRQHandler
138    .long   0                           /*Reserved */
139    .long   0                           /*Reserved */
140    .long   0                           /*Reserved */
141    .long   0                           /*Reserved */
142    .long   GPIOTE1_IRQHandler
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   KMU_IRQHandler
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   CRYPTOCELL_IRQHandler
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    .long   0                           /*Reserved */
319    .long   0                           /*Reserved */
320    .long   0                           /*Reserved */
321    .long   0                           /*Reserved */
322    .long   0                           /*Reserved */
323    .long   0                           /*Reserved */
324    .long   0                           /*Reserved */
325    .long   0                           /*Reserved */
326    .long   0                           /*Reserved */
327    .long   0                           /*Reserved */
328    .long   0                           /*Reserved */
329    .long   0                           /*Reserved */
330    .long   0                           /*Reserved */
331    .long   0                           /*Reserved */
332    .long   0                           /*Reserved */
333
334    .size __isr_vector, . - __isr_vector
335
336/* Reset Handler */
337
338
339    .text
340    .thumb
341    .thumb_func
342    .align 1
343    .globl Reset_Handler
344    .type Reset_Handler, %function
345Reset_Handler:
346
347
348/* Loop to copy data from read only memory to RAM.
349 * The ranges of copy from/to are specified by following symbols:
350 *      __etext: LMA of start of the section to copy from. Usually end of text
351 *      __data_start__: VMA of start of the section to copy to.
352 *      __bss_start__: VMA of end of the section to copy to. Normally __data_end__ is used, but by using __bss_start__
353 *                    the user can add their own initialized data section before BSS section with the INTERT AFTER command.
354 *
355 * All addresses must be aligned to 4 bytes boundary.
356 */
357    ldr r1, =__etext
358    ldr r2, =__data_start__
359    ldr r3, =__bss_start__
360
361    subs r3, r3, r2
362    ble .L_loop1_done
363
364.L_loop1:
365    subs r3, r3, #4
366    ldr r0, [r1,r3]
367    str r0, [r2,r3]
368    bgt .L_loop1
369
370.L_loop1_done:
371
372/* This part of work usually is done in C library startup code. Otherwise,
373 * define __STARTUP_CLEAR_BSS to enable it in this startup. This section
374 * clears the RAM where BSS data is located.
375 *
376 * The BSS section is specified by following symbols
377 *    __bss_start__: start of the BSS section.
378 *    __bss_end__: end of the BSS section.
379 *
380 * All addresses must be aligned to 4 bytes boundary.
381 */
382#ifdef __STARTUP_CLEAR_BSS
383    ldr r1, =__bss_start__
384    ldr r2, =__bss_end__
385
386    movs r0, 0
387
388    subs r2, r2, r1
389    ble .L_loop3_done
390
391.L_loop3:
392    subs r2, r2, #4
393    str r0, [r1, r2]
394    bgt .L_loop3
395
396.L_loop3_done:
397#endif /* __STARTUP_CLEAR_BSS */
398
399/* Execute SystemInit function. */
400    bl SystemInit
401
402/* Call _start function provided by libraries.
403 * If those libraries are not accessible, define __START as your entry point.
404 */
405#ifndef __START
406#define __START _start
407#endif
408    bl __START
409
410    .pool
411    .size   Reset_Handler,.-Reset_Handler
412
413    .section ".text"
414
415
416/* Dummy Exception Handlers (infinite loops which can be modified) */
417
418    .weak   NMI_Handler
419    .type   NMI_Handler, %function
420NMI_Handler:
421    b       .
422    .size   NMI_Handler, . - NMI_Handler
423
424
425    .weak   HardFault_Handler
426    .type   HardFault_Handler, %function
427HardFault_Handler:
428    b       .
429    .size   HardFault_Handler, . - HardFault_Handler
430
431
432    .weak   MemoryManagement_Handler
433    .type   MemoryManagement_Handler, %function
434MemoryManagement_Handler:
435    b       .
436    .size   MemoryManagement_Handler, . - MemoryManagement_Handler
437
438
439    .weak   BusFault_Handler
440    .type   BusFault_Handler, %function
441BusFault_Handler:
442    b       .
443    .size   BusFault_Handler, . - BusFault_Handler
444
445
446    .weak   UsageFault_Handler
447    .type   UsageFault_Handler, %function
448UsageFault_Handler:
449    b       .
450    .size   UsageFault_Handler, . - UsageFault_Handler
451
452
453    .weak   SecureFault_Handler
454    .type   SecureFault_Handler, %function
455SecureFault_Handler:
456    b       .
457    .size   SecureFault_Handler, . - SecureFault_Handler
458
459
460    .weak   SVC_Handler
461    .type   SVC_Handler, %function
462SVC_Handler:
463    b       .
464    .size   SVC_Handler, . - SVC_Handler
465
466
467    .weak   DebugMon_Handler
468    .type   DebugMon_Handler, %function
469DebugMon_Handler:
470    b       .
471    .size   DebugMon_Handler, . - DebugMon_Handler
472
473
474    .weak   PendSV_Handler
475    .type   PendSV_Handler, %function
476PendSV_Handler:
477    b       .
478    .size   PendSV_Handler, . - PendSV_Handler
479
480
481    .weak   SysTick_Handler
482    .type   SysTick_Handler, %function
483SysTick_Handler:
484    b       .
485    .size   SysTick_Handler, . - SysTick_Handler
486
487
488/* IRQ Handlers */
489
490    .globl  Default_Handler
491    .type   Default_Handler, %function
492Default_Handler:
493    b       .
494    .size   Default_Handler, . - Default_Handler
495
496    .macro  IRQ handler
497    .weak   \handler
498    .set    \handler, Default_Handler
499    .endm
500
501    IRQ  SPU_IRQHandler
502    IRQ  CLOCK_POWER_IRQHandler
503    IRQ  UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler
504    IRQ  UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler
505    IRQ  UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler
506    IRQ  UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler
507    IRQ  GPIOTE0_IRQHandler
508    IRQ  SAADC_IRQHandler
509    IRQ  TIMER0_IRQHandler
510    IRQ  TIMER1_IRQHandler
511    IRQ  TIMER2_IRQHandler
512    IRQ  RTC0_IRQHandler
513    IRQ  RTC1_IRQHandler
514    IRQ  WDT_IRQHandler
515    IRQ  EGU0_IRQHandler
516    IRQ  EGU1_IRQHandler
517    IRQ  EGU2_IRQHandler
518    IRQ  EGU3_IRQHandler
519    IRQ  EGU4_IRQHandler
520    IRQ  EGU5_IRQHandler
521    IRQ  PWM0_IRQHandler
522    IRQ  PWM1_IRQHandler
523    IRQ  PWM2_IRQHandler
524    IRQ  PWM3_IRQHandler
525    IRQ  PDM_IRQHandler
526    IRQ  I2S_IRQHandler
527    IRQ  IPC_IRQHandler
528    IRQ  FPU_IRQHandler
529    IRQ  GPIOTE1_IRQHandler
530    IRQ  KMU_IRQHandler
531    IRQ  CRYPTOCELL_IRQHandler
532
533  .end
534