xref: /nrf52832-nimble/nordic/nrfx/mdk/arm_startup_nrf52.s (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1; Copyright (c) 2009-2018 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
19                IF :DEF: __STARTUP_CONFIG
20#ifdef  __STARTUP_CONFIG
21#include "startup_config.h"
22#ifndef __STARTUP_CONFIG_STACK_ALIGNEMENT
23#define __STARTUP_CONFIG_STACK_ALIGNEMENT 3
24#endif
25#endif
26                ENDIF
27
28                IF :DEF: __STARTUP_CONFIG
29Stack_Size      EQU __STARTUP_CONFIG_STACK_SIZE
30                ELIF :DEF: __STACK_SIZE
31Stack_Size      EQU __STACK_SIZE
32                ELSE
33Stack_Size      EQU 8192
34                ENDIF
35
36                IF :DEF: __STARTUP_CONFIG
37Stack_Align     EQU __STARTUP_CONFIG_STACK_ALIGNEMENT
38                ELSE
39Stack_Align     EQU 3
40                ENDIF
41
42                AREA    STACK, NOINIT, READWRITE, ALIGN=Stack_Align
43Stack_Mem       SPACE   Stack_Size
44__initial_sp
45
46                IF :DEF: __STARTUP_CONFIG
47Heap_Size       EQU __STARTUP_CONFIG_HEAP_SIZE
48                ELIF :DEF: __HEAP_SIZE
49Heap_Size       EQU __HEAP_SIZE
50                ELSE
51Heap_Size       EQU 8192
52                ENDIF
53
54                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
55__heap_base
56Heap_Mem        SPACE   Heap_Size
57__heap_limit
58
59                PRESERVE8
60                THUMB
61
62; Vector Table Mapped to Address 0 at Reset
63
64                AREA    RESET, DATA, READONLY
65                EXPORT  __Vectors
66                EXPORT  __Vectors_End
67                EXPORT  __Vectors_Size
68
69__Vectors       DCD     __initial_sp              ; Top of Stack
70                DCD     Reset_Handler
71                DCD     NMI_Handler
72                DCD     HardFault_Handler
73                DCD     MemoryManagement_Handler
74                DCD     BusFault_Handler
75                DCD     UsageFault_Handler
76                DCD     0                         ; Reserved
77                DCD     0                         ; Reserved
78                DCD     0                         ; Reserved
79                DCD     0                         ; Reserved
80                DCD     SVC_Handler
81                DCD     DebugMon_Handler
82                DCD     0                         ; Reserved
83                DCD     PendSV_Handler
84                DCD     SysTick_Handler
85
86                ; External Interrupts
87                DCD     POWER_CLOCK_IRQHandler
88                DCD     RADIO_IRQHandler
89                DCD     UARTE0_UART0_IRQHandler
90                DCD     SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
91                DCD     SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
92                DCD     NFCT_IRQHandler
93                DCD     GPIOTE_IRQHandler
94                DCD     SAADC_IRQHandler
95                DCD     TIMER0_IRQHandler
96                DCD     TIMER1_IRQHandler
97                DCD     TIMER2_IRQHandler
98                DCD     RTC0_IRQHandler
99                DCD     TEMP_IRQHandler
100                DCD     RNG_IRQHandler
101                DCD     ECB_IRQHandler
102                DCD     CCM_AAR_IRQHandler
103                DCD     WDT_IRQHandler
104                DCD     RTC1_IRQHandler
105                DCD     QDEC_IRQHandler
106                DCD     COMP_LPCOMP_IRQHandler
107                DCD     SWI0_EGU0_IRQHandler
108                DCD     SWI1_EGU1_IRQHandler
109                DCD     SWI2_EGU2_IRQHandler
110                DCD     SWI3_EGU3_IRQHandler
111                DCD     SWI4_EGU4_IRQHandler
112                DCD     SWI5_EGU5_IRQHandler
113                DCD     TIMER3_IRQHandler
114                DCD     TIMER4_IRQHandler
115                DCD     PWM0_IRQHandler
116                DCD     PDM_IRQHandler
117                DCD     0                         ; Reserved
118                DCD     0                         ; Reserved
119                DCD     MWU_IRQHandler
120                DCD     PWM1_IRQHandler
121                DCD     PWM2_IRQHandler
122                DCD     SPIM2_SPIS2_SPI2_IRQHandler
123                DCD     RTC2_IRQHandler
124                DCD     I2S_IRQHandler
125                DCD     FPU_IRQHandler
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
200__Vectors_End
201
202__Vectors_Size  EQU     __Vectors_End - __Vectors
203
204                AREA    |.text|, CODE, READONLY
205
206; Reset Handler
207
208
209Reset_Handler   PROC
210                EXPORT  Reset_Handler             [WEAK]
211                IMPORT  SystemInit
212                IMPORT  __main
213
214
215                LDR     R0, =SystemInit
216                BLX     R0
217                LDR     R0, =__main
218                BX      R0
219                ENDP
220
221; Dummy Exception Handlers (infinite loops which can be modified)
222
223NMI_Handler     PROC
224                EXPORT  NMI_Handler               [WEAK]
225                B       .
226                ENDP
227HardFault_Handler\
228                PROC
229                EXPORT  HardFault_Handler         [WEAK]
230                B       .
231                ENDP
232MemoryManagement_Handler\
233                PROC
234                EXPORT  MemoryManagement_Handler  [WEAK]
235                B       .
236                ENDP
237BusFault_Handler\
238                PROC
239                EXPORT  BusFault_Handler          [WEAK]
240                B       .
241                ENDP
242UsageFault_Handler\
243                PROC
244                EXPORT  UsageFault_Handler        [WEAK]
245                B       .
246                ENDP
247SVC_Handler     PROC
248                EXPORT  SVC_Handler               [WEAK]
249                B       .
250                ENDP
251DebugMon_Handler\
252                PROC
253                EXPORT  DebugMon_Handler          [WEAK]
254                B       .
255                ENDP
256PendSV_Handler  PROC
257                EXPORT  PendSV_Handler            [WEAK]
258                B       .
259                ENDP
260SysTick_Handler PROC
261                EXPORT  SysTick_Handler           [WEAK]
262                B       .
263                ENDP
264
265Default_Handler PROC
266
267                EXPORT   POWER_CLOCK_IRQHandler [WEAK]
268                EXPORT   RADIO_IRQHandler [WEAK]
269                EXPORT   UARTE0_UART0_IRQHandler [WEAK]
270                EXPORT   SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler [WEAK]
271                EXPORT   SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler [WEAK]
272                EXPORT   NFCT_IRQHandler [WEAK]
273                EXPORT   GPIOTE_IRQHandler [WEAK]
274                EXPORT   SAADC_IRQHandler [WEAK]
275                EXPORT   TIMER0_IRQHandler [WEAK]
276                EXPORT   TIMER1_IRQHandler [WEAK]
277                EXPORT   TIMER2_IRQHandler [WEAK]
278                EXPORT   RTC0_IRQHandler [WEAK]
279                EXPORT   TEMP_IRQHandler [WEAK]
280                EXPORT   RNG_IRQHandler [WEAK]
281                EXPORT   ECB_IRQHandler [WEAK]
282                EXPORT   CCM_AAR_IRQHandler [WEAK]
283                EXPORT   WDT_IRQHandler [WEAK]
284                EXPORT   RTC1_IRQHandler [WEAK]
285                EXPORT   QDEC_IRQHandler [WEAK]
286                EXPORT   COMP_LPCOMP_IRQHandler [WEAK]
287                EXPORT   SWI0_EGU0_IRQHandler [WEAK]
288                EXPORT   SWI1_EGU1_IRQHandler [WEAK]
289                EXPORT   SWI2_EGU2_IRQHandler [WEAK]
290                EXPORT   SWI3_EGU3_IRQHandler [WEAK]
291                EXPORT   SWI4_EGU4_IRQHandler [WEAK]
292                EXPORT   SWI5_EGU5_IRQHandler [WEAK]
293                EXPORT   TIMER3_IRQHandler [WEAK]
294                EXPORT   TIMER4_IRQHandler [WEAK]
295                EXPORT   PWM0_IRQHandler [WEAK]
296                EXPORT   PDM_IRQHandler [WEAK]
297                EXPORT   MWU_IRQHandler [WEAK]
298                EXPORT   PWM1_IRQHandler [WEAK]
299                EXPORT   PWM2_IRQHandler [WEAK]
300                EXPORT   SPIM2_SPIS2_SPI2_IRQHandler [WEAK]
301                EXPORT   RTC2_IRQHandler [WEAK]
302                EXPORT   I2S_IRQHandler [WEAK]
303                EXPORT   FPU_IRQHandler [WEAK]
304POWER_CLOCK_IRQHandler
305RADIO_IRQHandler
306UARTE0_UART0_IRQHandler
307SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
308SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
309NFCT_IRQHandler
310GPIOTE_IRQHandler
311SAADC_IRQHandler
312TIMER0_IRQHandler
313TIMER1_IRQHandler
314TIMER2_IRQHandler
315RTC0_IRQHandler
316TEMP_IRQHandler
317RNG_IRQHandler
318ECB_IRQHandler
319CCM_AAR_IRQHandler
320WDT_IRQHandler
321RTC1_IRQHandler
322QDEC_IRQHandler
323COMP_LPCOMP_IRQHandler
324SWI0_EGU0_IRQHandler
325SWI1_EGU1_IRQHandler
326SWI2_EGU2_IRQHandler
327SWI3_EGU3_IRQHandler
328SWI4_EGU4_IRQHandler
329SWI5_EGU5_IRQHandler
330TIMER3_IRQHandler
331TIMER4_IRQHandler
332PWM0_IRQHandler
333PDM_IRQHandler
334MWU_IRQHandler
335PWM1_IRQHandler
336PWM2_IRQHandler
337SPIM2_SPIS2_SPI2_IRQHandler
338RTC2_IRQHandler
339I2S_IRQHandler
340FPU_IRQHandler
341                B .
342                ENDP
343                ALIGN
344
345; User Initial Stack & Heap
346
347                IF      :DEF:__MICROLIB
348
349                EXPORT  __initial_sp
350                EXPORT  __heap_base
351                EXPORT  __heap_limit
352
353                ELSE
354
355                IMPORT  __use_two_region_memory
356                EXPORT  __user_initial_stackheap
357
358__user_initial_stackheap PROC
359
360                LDR     R0, = Heap_Mem
361                LDR     R1, = (Stack_Mem + Stack_Size)
362                LDR     R2, = (Heap_Mem + Heap_Size)
363                LDR     R3, = Stack_Mem
364                BX      LR
365                ENDP
366
367                ALIGN
368
369                ENDIF
370
371                END
372