xref: /nrf52832-nimble/nordic/nrfx/mdk/ses_startup_nrf51.s (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1*150812a8SEvalZero/***********************************************************************************
2*150812a8SEvalZero *                           SEGGER Microcontroller GmbH                           *
3*150812a8SEvalZero *                               The Embedded Experts                              *
4*150812a8SEvalZero ***********************************************************************************
5*150812a8SEvalZero *                                                                                 *
6*150812a8SEvalZero *                   (c) 2014 - 2018 SEGGER Microcontroller GmbH                   *
7*150812a8SEvalZero *                                                                                 *
8*150812a8SEvalZero *                  www.segger.com     Support: [email protected]                 *
9*150812a8SEvalZero *                                                                                 *
10*150812a8SEvalZero ***********************************************************************************
11*150812a8SEvalZero *                                                                                 *
12*150812a8SEvalZero *        All rights reserved.                                                     *
13*150812a8SEvalZero *                                                                                 *
14*150812a8SEvalZero *        Redistribution and use in source and binary forms, with or               *
15*150812a8SEvalZero *        without modification, are permitted provided that the following          *
16*150812a8SEvalZero *        conditions are met:                                                      *
17*150812a8SEvalZero *                                                                                 *
18*150812a8SEvalZero *        - Redistributions of source code must retain the above copyright         *
19*150812a8SEvalZero *          notice, this list of conditions and the following disclaimer.          *
20*150812a8SEvalZero *                                                                                 *
21*150812a8SEvalZero *        - Neither the name of SEGGER Microcontroller GmbH                        *
22*150812a8SEvalZero *          nor the names of its contributors may be used to endorse or            *
23*150812a8SEvalZero *          promote products derived from this software without specific           *
24*150812a8SEvalZero *          prior written permission.                                              *
25*150812a8SEvalZero *                                                                                 *
26*150812a8SEvalZero *        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND                   *
27*150812a8SEvalZero *        CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,              *
28*150812a8SEvalZero *        INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF                 *
29*150812a8SEvalZero *        MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE                 *
30*150812a8SEvalZero *        DISCLAIMED.                                                              *
31*150812a8SEvalZero *        IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR              *
32*150812a8SEvalZero *        ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR                 *
33*150812a8SEvalZero *        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT        *
34*150812a8SEvalZero *        OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;          *
35*150812a8SEvalZero *        OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF            *
36*150812a8SEvalZero *        LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT                *
37*150812a8SEvalZero *        (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE        *
38*150812a8SEvalZero *        USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH         *
39*150812a8SEvalZero *        DAMAGE.                                                                  *
40*150812a8SEvalZero *                                                                                 *
41*150812a8SEvalZero ***********************************************************************************/
42*150812a8SEvalZero
43*150812a8SEvalZero/************************************************************************************
44*150812a8SEvalZero *                         Preprocessor Definitions                                 *
45*150812a8SEvalZero *                         ------------------------                                 *
46*150812a8SEvalZero * VECTORS_IN_RAM                                                                   *
47*150812a8SEvalZero *                                                                                  *
48*150812a8SEvalZero *   If defined, an area of RAM will large enough to store the vector table         *
49*150812a8SEvalZero *   will be reserved.                                                              *
50*150812a8SEvalZero *                                                                                  *
51*150812a8SEvalZero ************************************************************************************/
52*150812a8SEvalZero
53*150812a8SEvalZero  .syntax unified
54*150812a8SEvalZero  .code 16
55*150812a8SEvalZero
56*150812a8SEvalZero  .section .init, "ax"
57*150812a8SEvalZero  .align 0
58*150812a8SEvalZero
59*150812a8SEvalZero/************************************************************************************
60*150812a8SEvalZero * Default Exception Handlers                                                       *
61*150812a8SEvalZero ************************************************************************************/
62*150812a8SEvalZero
63*150812a8SEvalZero
64*150812a8SEvalZero  .thumb_func
65*150812a8SEvalZero  .weak   NMI_Handler
66*150812a8SEvalZeroNMI_Handler:
67*150812a8SEvalZero  b     .
68*150812a8SEvalZero
69*150812a8SEvalZero  .thumb_func
70*150812a8SEvalZero  .weak   HardFault_Handler
71*150812a8SEvalZeroHardFault_Handler:
72*150812a8SEvalZero  b     .
73*150812a8SEvalZero
74*150812a8SEvalZero  .thumb_func
75*150812a8SEvalZero  .weak   SVC_Handler
76*150812a8SEvalZeroSVC_Handler:
77*150812a8SEvalZero  b     .
78*150812a8SEvalZero
79*150812a8SEvalZero  .thumb_func
80*150812a8SEvalZero  .weak   PendSV_Handler
81*150812a8SEvalZeroPendSV_Handler:
82*150812a8SEvalZero  b     .
83*150812a8SEvalZero
84*150812a8SEvalZero  .thumb_func
85*150812a8SEvalZero  .weak   SysTick_Handler
86*150812a8SEvalZeroSysTick_Handler:
87*150812a8SEvalZero  b     .
88*150812a8SEvalZero
89*150812a8SEvalZero  .thumb_func
90*150812a8SEvalZero  .weak   Dummy_Handler
91*150812a8SEvalZeroDummy_Handler:
92*150812a8SEvalZero  b     .
93*150812a8SEvalZero
94*150812a8SEvalZero/************************************************************************************
95*150812a8SEvalZero * Default Interrupt Handlers                                                       *
96*150812a8SEvalZero ************************************************************************************/
97*150812a8SEvalZero
98*150812a8SEvalZero.weak POWER_CLOCK_IRQHandler
99*150812a8SEvalZero.thumb_set POWER_CLOCK_IRQHandler, Dummy_Handler
100*150812a8SEvalZero
101*150812a8SEvalZero.weak RADIO_IRQHandler
102*150812a8SEvalZero.thumb_set RADIO_IRQHandler, Dummy_Handler
103*150812a8SEvalZero
104*150812a8SEvalZero.weak UART0_IRQHandler
105*150812a8SEvalZero.thumb_set UART0_IRQHandler, Dummy_Handler
106*150812a8SEvalZero
107*150812a8SEvalZero.weak SPI0_TWI0_IRQHandler
108*150812a8SEvalZero.thumb_set SPI0_TWI0_IRQHandler, Dummy_Handler
109*150812a8SEvalZero
110*150812a8SEvalZero.weak SPI1_TWI1_IRQHandler
111*150812a8SEvalZero.thumb_set SPI1_TWI1_IRQHandler, Dummy_Handler
112*150812a8SEvalZero
113*150812a8SEvalZero.weak GPIOTE_IRQHandler
114*150812a8SEvalZero.thumb_set GPIOTE_IRQHandler, Dummy_Handler
115*150812a8SEvalZero
116*150812a8SEvalZero.weak ADC_IRQHandler
117*150812a8SEvalZero.thumb_set ADC_IRQHandler, Dummy_Handler
118*150812a8SEvalZero
119*150812a8SEvalZero.weak TIMER0_IRQHandler
120*150812a8SEvalZero.thumb_set TIMER0_IRQHandler, Dummy_Handler
121*150812a8SEvalZero
122*150812a8SEvalZero.weak TIMER1_IRQHandler
123*150812a8SEvalZero.thumb_set TIMER1_IRQHandler, Dummy_Handler
124*150812a8SEvalZero
125*150812a8SEvalZero.weak TIMER2_IRQHandler
126*150812a8SEvalZero.thumb_set TIMER2_IRQHandler, Dummy_Handler
127*150812a8SEvalZero
128*150812a8SEvalZero.weak RTC0_IRQHandler
129*150812a8SEvalZero.thumb_set RTC0_IRQHandler, Dummy_Handler
130*150812a8SEvalZero
131*150812a8SEvalZero.weak TEMP_IRQHandler
132*150812a8SEvalZero.thumb_set TEMP_IRQHandler, Dummy_Handler
133*150812a8SEvalZero
134*150812a8SEvalZero.weak RNG_IRQHandler
135*150812a8SEvalZero.thumb_set RNG_IRQHandler, Dummy_Handler
136*150812a8SEvalZero
137*150812a8SEvalZero.weak ECB_IRQHandler
138*150812a8SEvalZero.thumb_set ECB_IRQHandler, Dummy_Handler
139*150812a8SEvalZero
140*150812a8SEvalZero.weak CCM_AAR_IRQHandler
141*150812a8SEvalZero.thumb_set CCM_AAR_IRQHandler, Dummy_Handler
142*150812a8SEvalZero
143*150812a8SEvalZero.weak WDT_IRQHandler
144*150812a8SEvalZero.thumb_set WDT_IRQHandler, Dummy_Handler
145*150812a8SEvalZero
146*150812a8SEvalZero.weak RTC1_IRQHandler
147*150812a8SEvalZero.thumb_set RTC1_IRQHandler, Dummy_Handler
148*150812a8SEvalZero
149*150812a8SEvalZero.weak QDEC_IRQHandler
150*150812a8SEvalZero.thumb_set QDEC_IRQHandler, Dummy_Handler
151*150812a8SEvalZero
152*150812a8SEvalZero.weak LPCOMP_IRQHandler
153*150812a8SEvalZero.thumb_set LPCOMP_IRQHandler, Dummy_Handler
154*150812a8SEvalZero
155*150812a8SEvalZero.weak SWI0_IRQHandler
156*150812a8SEvalZero.thumb_set SWI0_IRQHandler, Dummy_Handler
157*150812a8SEvalZero
158*150812a8SEvalZero.weak SWI1_IRQHandler
159*150812a8SEvalZero.thumb_set SWI1_IRQHandler, Dummy_Handler
160*150812a8SEvalZero
161*150812a8SEvalZero.weak SWI2_IRQHandler
162*150812a8SEvalZero.thumb_set SWI2_IRQHandler, Dummy_Handler
163*150812a8SEvalZero
164*150812a8SEvalZero.weak SWI3_IRQHandler
165*150812a8SEvalZero.thumb_set SWI3_IRQHandler, Dummy_Handler
166*150812a8SEvalZero
167*150812a8SEvalZero.weak SWI4_IRQHandler
168*150812a8SEvalZero.thumb_set SWI4_IRQHandler, Dummy_Handler
169*150812a8SEvalZero
170*150812a8SEvalZero.weak SWI5_IRQHandler
171*150812a8SEvalZero.thumb_set SWI5_IRQHandler, Dummy_Handler
172*150812a8SEvalZero
173*150812a8SEvalZero/************************************************************************************
174*150812a8SEvalZero * Reset Handler Extensions                                                         *
175*150812a8SEvalZero ************************************************************************************/
176*150812a8SEvalZero
177*150812a8SEvalZero  .extern Reset_Handler
178*150812a8SEvalZero  .global nRFInitialize
179*150812a8SEvalZero  .equ    NRF_POWER_RAMON_ADDRESS,             0x40000524
180*150812a8SEvalZero  .equ    NRF_POWER_RAMONB_ADDRESS,            0x40000554
181*150812a8SEvalZero  .equ    NRF_POWER_RAMONx_RAMxON_ONMODE_Msk,  0x3
182*150812a8SEvalZero
183*150812a8SEvalZero  .thumb_func
184*150812a8SEvalZeronRFInitialize:
185*150812a8SEvalZero  MOVS    R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk
186*150812a8SEvalZero
187*150812a8SEvalZero  LDR     R0, =NRF_POWER_RAMON_ADDRESS
188*150812a8SEvalZero  LDR     R2, [R0]
189*150812a8SEvalZero  ORRS    R2, R1
190*150812a8SEvalZero  STR     R2, [R0]
191*150812a8SEvalZero
192*150812a8SEvalZero  LDR     R0, =NRF_POWER_RAMONB_ADDRESS
193*150812a8SEvalZero  LDR     R2, [R0]
194*150812a8SEvalZero  ORRS    R2, R1
195*150812a8SEvalZero  STR     R2, [R0]
196*150812a8SEvalZero  bx lr
197*150812a8SEvalZero
198*150812a8SEvalZero
199*150812a8SEvalZero/************************************************************************************
200*150812a8SEvalZero * Vector Table                                                                     *
201*150812a8SEvalZero ************************************************************************************/
202*150812a8SEvalZero
203*150812a8SEvalZero  .section .vectors, "ax"
204*150812a8SEvalZero  .align 0
205*150812a8SEvalZero  .global _vectors
206*150812a8SEvalZero  .extern __stack_end__
207*150812a8SEvalZero
208*150812a8SEvalZero_vectors:
209*150812a8SEvalZero  .word __stack_end__
210*150812a8SEvalZero  .word Reset_Handler
211*150812a8SEvalZero  .word NMI_Handler
212*150812a8SEvalZero  .word HardFault_Handler
213*150812a8SEvalZero  .word 0                           /*Reserved */
214*150812a8SEvalZero  .word 0                           /*Reserved */
215*150812a8SEvalZero  .word 0                           /*Reserved */
216*150812a8SEvalZero  .word 0                           /*Reserved */
217*150812a8SEvalZero  .word 0                           /*Reserved */
218*150812a8SEvalZero  .word 0                           /*Reserved */
219*150812a8SEvalZero  .word 0                           /*Reserved */
220*150812a8SEvalZero  .word SVC_Handler
221*150812a8SEvalZero  .word 0                           /*Reserved */
222*150812a8SEvalZero  .word 0                           /*Reserved */
223*150812a8SEvalZero  .word PendSV_Handler
224*150812a8SEvalZero  .word SysTick_Handler
225*150812a8SEvalZero
226*150812a8SEvalZero/* External Interrupts */
227*150812a8SEvalZero  .word   POWER_CLOCK_IRQHandler
228*150812a8SEvalZero  .word   RADIO_IRQHandler
229*150812a8SEvalZero  .word   UART0_IRQHandler
230*150812a8SEvalZero  .word   SPI0_TWI0_IRQHandler
231*150812a8SEvalZero  .word   SPI1_TWI1_IRQHandler
232*150812a8SEvalZero  .word   0                           /*Reserved */
233*150812a8SEvalZero  .word   GPIOTE_IRQHandler
234*150812a8SEvalZero  .word   ADC_IRQHandler
235*150812a8SEvalZero  .word   TIMER0_IRQHandler
236*150812a8SEvalZero  .word   TIMER1_IRQHandler
237*150812a8SEvalZero  .word   TIMER2_IRQHandler
238*150812a8SEvalZero  .word   RTC0_IRQHandler
239*150812a8SEvalZero  .word   TEMP_IRQHandler
240*150812a8SEvalZero  .word   RNG_IRQHandler
241*150812a8SEvalZero  .word   ECB_IRQHandler
242*150812a8SEvalZero  .word   CCM_AAR_IRQHandler
243*150812a8SEvalZero  .word   WDT_IRQHandler
244*150812a8SEvalZero  .word   RTC1_IRQHandler
245*150812a8SEvalZero  .word   QDEC_IRQHandler
246*150812a8SEvalZero  .word   LPCOMP_IRQHandler
247*150812a8SEvalZero  .word   SWI0_IRQHandler
248*150812a8SEvalZero  .word   SWI1_IRQHandler
249*150812a8SEvalZero  .word   SWI2_IRQHandler
250*150812a8SEvalZero  .word   SWI3_IRQHandler
251*150812a8SEvalZero  .word   SWI4_IRQHandler
252*150812a8SEvalZero  .word   SWI5_IRQHandler
253*150812a8SEvalZero  .word   0                           /*Reserved */
254*150812a8SEvalZero  .word   0                           /*Reserved */
255*150812a8SEvalZero  .word   0                           /*Reserved */
256*150812a8SEvalZero  .word   0                           /*Reserved */
257*150812a8SEvalZero  .word   0                           /*Reserved */
258*150812a8SEvalZero  .word   0                           /*Reserved */
259*150812a8SEvalZero_vectors_end:
260*150812a8SEvalZero
261*150812a8SEvalZero#ifdef VECTORS_IN_RAM
262*150812a8SEvalZero  .section .vectors_ram, "ax"
263*150812a8SEvalZero  .align 0
264*150812a8SEvalZero  .global _vectors_ram
265*150812a8SEvalZero
266*150812a8SEvalZero_vectors_ram:
267*150812a8SEvalZero  .space _vectors_end - _vectors, 0
268*150812a8SEvalZero#endif
269