1*150812a8SEvalZero; Copyright (c) 2009-2018 ARM Limited. All rights reserved. 2*150812a8SEvalZero; 3*150812a8SEvalZero; SPDX-License-Identifier: Apache-2.0 4*150812a8SEvalZero; 5*150812a8SEvalZero; Licensed under the Apache License, Version 2.0 (the License); you may 6*150812a8SEvalZero; not use this file except in compliance with the License. 7*150812a8SEvalZero; You may obtain a copy of the License at 8*150812a8SEvalZero; 9*150812a8SEvalZero; www.apache.org/licenses/LICENSE-2.0 10*150812a8SEvalZero; 11*150812a8SEvalZero; Unless required by applicable law or agreed to in writing, software 12*150812a8SEvalZero; distributed under the License is distributed on an AS IS BASIS, WITHOUT 13*150812a8SEvalZero; WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*150812a8SEvalZero; See the License for the specific language governing permissions and 15*150812a8SEvalZero; limitations under the License. 16*150812a8SEvalZero; 17*150812a8SEvalZero; NOTICE: This file has been modified by Nordic Semiconductor ASA. 18*150812a8SEvalZero 19*150812a8SEvalZero; The modules in this file are included in the libraries, and may be replaced 20*150812a8SEvalZero; by any user-defined modules that define the PUBLIC symbol _program_start or 21*150812a8SEvalZero; a user defined start symbol. 22*150812a8SEvalZero; To override the cstartup defined in the library, simply add your modified 23*150812a8SEvalZero; version to the workbench project. 24*150812a8SEvalZero; 25*150812a8SEvalZero; The vector table is normally located at address 0. 26*150812a8SEvalZero; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. 27*150812a8SEvalZero; The name "__vector_table" has special meaning for C-SPY: 28*150812a8SEvalZero; it is where the SP start value is found, and the NVIC vector 29*150812a8SEvalZero; table register (VTOR) is initialized to this address if != 0. 30*150812a8SEvalZero 31*150812a8SEvalZero MODULE ?cstartup 32*150812a8SEvalZero 33*150812a8SEvalZero#if defined(__STARTUP_CONFIG) 34*150812a8SEvalZero 35*150812a8SEvalZero #include "startup_config.h" 36*150812a8SEvalZero 37*150812a8SEvalZero #ifndef __STARTUP_CONFIG_STACK_ALIGNEMENT 38*150812a8SEvalZero #define __STARTUP_CONFIG_STACK_ALIGNEMENT 3 39*150812a8SEvalZero #endif 40*150812a8SEvalZero 41*150812a8SEvalZero SECTION CSTACK:DATA:NOROOT(__STARTUP_CONFIG_STACK_ALIGNEMENT) 42*150812a8SEvalZero DS8 __STARTUP_CONFIG_STACK_SIZE 43*150812a8SEvalZero 44*150812a8SEvalZero SECTION HEAP:DATA:NOROOT(3) 45*150812a8SEvalZero DS8 __STARTUP_CONFIG_HEAP_SIZE 46*150812a8SEvalZero 47*150812a8SEvalZero#else 48*150812a8SEvalZero 49*150812a8SEvalZero ;; Stack size default : Defined in *.icf (linker file). Can be modified inside EW. 50*150812a8SEvalZero ;; Heap size default : Defined in *.icf (linker file). Can be modified inside EW. 51*150812a8SEvalZero 52*150812a8SEvalZero ;; Forward declaration of sections. 53*150812a8SEvalZero SECTION CSTACK:DATA:NOROOT(3) 54*150812a8SEvalZero 55*150812a8SEvalZero#endif 56*150812a8SEvalZero 57*150812a8SEvalZero 58*150812a8SEvalZero SECTION .intvec:CODE:NOROOT(2) 59*150812a8SEvalZero 60*150812a8SEvalZero EXTERN __iar_program_start 61*150812a8SEvalZero EXTERN SystemInit 62*150812a8SEvalZero PUBLIC __vector_table 63*150812a8SEvalZero PUBLIC __Vectors 64*150812a8SEvalZero PUBLIC __Vectors_End 65*150812a8SEvalZero PUBLIC __Vectors_Size 66*150812a8SEvalZero 67*150812a8SEvalZero DATA 68*150812a8SEvalZero 69*150812a8SEvalZero__vector_table 70*150812a8SEvalZero DCD sfe(CSTACK) 71*150812a8SEvalZero DCD Reset_Handler 72*150812a8SEvalZero DCD NMI_Handler 73*150812a8SEvalZero DCD HardFault_Handler 74*150812a8SEvalZero DCD 0 ; Reserved 75*150812a8SEvalZero DCD 0 ; Reserved 76*150812a8SEvalZero DCD 0 ; Reserved 77*150812a8SEvalZero DCD 0 ; Reserved 78*150812a8SEvalZero DCD 0 ; Reserved 79*150812a8SEvalZero DCD 0 ; Reserved 80*150812a8SEvalZero DCD 0 ; Reserved 81*150812a8SEvalZero DCD SVC_Handler 82*150812a8SEvalZero DCD 0 ; Reserved 83*150812a8SEvalZero DCD 0 ; Reserved 84*150812a8SEvalZero DCD PendSV_Handler 85*150812a8SEvalZero DCD SysTick_Handler 86*150812a8SEvalZero 87*150812a8SEvalZero ; External Interrupts 88*150812a8SEvalZero DCD POWER_CLOCK_IRQHandler 89*150812a8SEvalZero DCD RADIO_IRQHandler 90*150812a8SEvalZero DCD UART0_IRQHandler 91*150812a8SEvalZero DCD SPI0_TWI0_IRQHandler 92*150812a8SEvalZero DCD SPI1_TWI1_IRQHandler 93*150812a8SEvalZero DCD 0 ; Reserved 94*150812a8SEvalZero DCD GPIOTE_IRQHandler 95*150812a8SEvalZero DCD ADC_IRQHandler 96*150812a8SEvalZero DCD TIMER0_IRQHandler 97*150812a8SEvalZero DCD TIMER1_IRQHandler 98*150812a8SEvalZero DCD TIMER2_IRQHandler 99*150812a8SEvalZero DCD RTC0_IRQHandler 100*150812a8SEvalZero DCD TEMP_IRQHandler 101*150812a8SEvalZero DCD RNG_IRQHandler 102*150812a8SEvalZero DCD ECB_IRQHandler 103*150812a8SEvalZero DCD CCM_AAR_IRQHandler 104*150812a8SEvalZero DCD WDT_IRQHandler 105*150812a8SEvalZero DCD RTC1_IRQHandler 106*150812a8SEvalZero DCD QDEC_IRQHandler 107*150812a8SEvalZero DCD LPCOMP_IRQHandler 108*150812a8SEvalZero DCD SWI0_IRQHandler 109*150812a8SEvalZero DCD SWI1_IRQHandler 110*150812a8SEvalZero DCD SWI2_IRQHandler 111*150812a8SEvalZero DCD SWI3_IRQHandler 112*150812a8SEvalZero DCD SWI4_IRQHandler 113*150812a8SEvalZero DCD SWI5_IRQHandler 114*150812a8SEvalZero DCD 0 ; Reserved 115*150812a8SEvalZero DCD 0 ; Reserved 116*150812a8SEvalZero DCD 0 ; Reserved 117*150812a8SEvalZero DCD 0 ; Reserved 118*150812a8SEvalZero DCD 0 ; Reserved 119*150812a8SEvalZero DCD 0 ; Reserved 120*150812a8SEvalZero 121*150812a8SEvalZero__Vectors_End 122*150812a8SEvalZero__Vectors EQU __vector_table 123*150812a8SEvalZero__Vectors_Size EQU __Vectors_End - __Vectors 124*150812a8SEvalZero 125*150812a8SEvalZeroNRF_POWER_RAMON_ADDRESS EQU 0x40000524 ; NRF_POWER->RAMON address 126*150812a8SEvalZeroNRF_POWER_RAMONB_ADDRESS EQU 0x40000554 ; NRF_POWER->RAMONB address 127*150812a8SEvalZeroNRF_POWER_RAMONx_RAMxON_ONMODE_Msk EQU 0x3 ; All RAM blocks on in onmode bit mask 128*150812a8SEvalZero 129*150812a8SEvalZero; Default handlers. 130*150812a8SEvalZero THUMB 131*150812a8SEvalZero 132*150812a8SEvalZero PUBWEAK Reset_Handler 133*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(2) 134*150812a8SEvalZeroReset_Handler 135*150812a8SEvalZero MOVS R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk 136*150812a8SEvalZero 137*150812a8SEvalZero LDR R0, =NRF_POWER_RAMON_ADDRESS 138*150812a8SEvalZero LDR R2, [R0] 139*150812a8SEvalZero ORRS R2, R2, R1 140*150812a8SEvalZero STR R2, [R0] 141*150812a8SEvalZero 142*150812a8SEvalZero LDR R0, =NRF_POWER_RAMONB_ADDRESS 143*150812a8SEvalZero LDR R2, [R0] 144*150812a8SEvalZero ORRS R2, R2, R1 145*150812a8SEvalZero STR R2, [R0] 146*150812a8SEvalZero 147*150812a8SEvalZero LDR R0, =SystemInit 148*150812a8SEvalZero BLX R0 149*150812a8SEvalZero LDR R0, =__iar_program_start 150*150812a8SEvalZero BX R0 151*150812a8SEvalZero 152*150812a8SEvalZero ; Dummy exception handlers 153*150812a8SEvalZero 154*150812a8SEvalZero 155*150812a8SEvalZero PUBWEAK NMI_Handler 156*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 157*150812a8SEvalZeroNMI_Handler 158*150812a8SEvalZero B . 159*150812a8SEvalZero 160*150812a8SEvalZero PUBWEAK HardFault_Handler 161*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 162*150812a8SEvalZeroHardFault_Handler 163*150812a8SEvalZero B . 164*150812a8SEvalZero 165*150812a8SEvalZero PUBWEAK SVC_Handler 166*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 167*150812a8SEvalZeroSVC_Handler 168*150812a8SEvalZero B . 169*150812a8SEvalZero 170*150812a8SEvalZero PUBWEAK PendSV_Handler 171*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 172*150812a8SEvalZeroPendSV_Handler 173*150812a8SEvalZero B . 174*150812a8SEvalZero 175*150812a8SEvalZero PUBWEAK SysTick_Handler 176*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 177*150812a8SEvalZeroSysTick_Handler 178*150812a8SEvalZero B . 179*150812a8SEvalZero 180*150812a8SEvalZero 181*150812a8SEvalZero ; Dummy interrupt handlers 182*150812a8SEvalZero 183*150812a8SEvalZero PUBWEAK POWER_CLOCK_IRQHandler 184*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 185*150812a8SEvalZeroPOWER_CLOCK_IRQHandler 186*150812a8SEvalZero B . 187*150812a8SEvalZero 188*150812a8SEvalZero PUBWEAK RADIO_IRQHandler 189*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 190*150812a8SEvalZeroRADIO_IRQHandler 191*150812a8SEvalZero B . 192*150812a8SEvalZero 193*150812a8SEvalZero PUBWEAK UART0_IRQHandler 194*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 195*150812a8SEvalZeroUART0_IRQHandler 196*150812a8SEvalZero B . 197*150812a8SEvalZero 198*150812a8SEvalZero PUBWEAK SPI0_TWI0_IRQHandler 199*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 200*150812a8SEvalZeroSPI0_TWI0_IRQHandler 201*150812a8SEvalZero B . 202*150812a8SEvalZero 203*150812a8SEvalZero PUBWEAK SPI1_TWI1_IRQHandler 204*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 205*150812a8SEvalZeroSPI1_TWI1_IRQHandler 206*150812a8SEvalZero B . 207*150812a8SEvalZero 208*150812a8SEvalZero PUBWEAK GPIOTE_IRQHandler 209*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 210*150812a8SEvalZeroGPIOTE_IRQHandler 211*150812a8SEvalZero B . 212*150812a8SEvalZero 213*150812a8SEvalZero PUBWEAK ADC_IRQHandler 214*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 215*150812a8SEvalZeroADC_IRQHandler 216*150812a8SEvalZero B . 217*150812a8SEvalZero 218*150812a8SEvalZero PUBWEAK TIMER0_IRQHandler 219*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 220*150812a8SEvalZeroTIMER0_IRQHandler 221*150812a8SEvalZero B . 222*150812a8SEvalZero 223*150812a8SEvalZero PUBWEAK TIMER1_IRQHandler 224*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 225*150812a8SEvalZeroTIMER1_IRQHandler 226*150812a8SEvalZero B . 227*150812a8SEvalZero 228*150812a8SEvalZero PUBWEAK TIMER2_IRQHandler 229*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 230*150812a8SEvalZeroTIMER2_IRQHandler 231*150812a8SEvalZero B . 232*150812a8SEvalZero 233*150812a8SEvalZero PUBWEAK RTC0_IRQHandler 234*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 235*150812a8SEvalZeroRTC0_IRQHandler 236*150812a8SEvalZero B . 237*150812a8SEvalZero 238*150812a8SEvalZero PUBWEAK TEMP_IRQHandler 239*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 240*150812a8SEvalZeroTEMP_IRQHandler 241*150812a8SEvalZero B . 242*150812a8SEvalZero 243*150812a8SEvalZero PUBWEAK RNG_IRQHandler 244*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 245*150812a8SEvalZeroRNG_IRQHandler 246*150812a8SEvalZero B . 247*150812a8SEvalZero 248*150812a8SEvalZero PUBWEAK ECB_IRQHandler 249*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 250*150812a8SEvalZeroECB_IRQHandler 251*150812a8SEvalZero B . 252*150812a8SEvalZero 253*150812a8SEvalZero PUBWEAK CCM_AAR_IRQHandler 254*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 255*150812a8SEvalZeroCCM_AAR_IRQHandler 256*150812a8SEvalZero B . 257*150812a8SEvalZero 258*150812a8SEvalZero PUBWEAK WDT_IRQHandler 259*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 260*150812a8SEvalZeroWDT_IRQHandler 261*150812a8SEvalZero B . 262*150812a8SEvalZero 263*150812a8SEvalZero PUBWEAK RTC1_IRQHandler 264*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 265*150812a8SEvalZeroRTC1_IRQHandler 266*150812a8SEvalZero B . 267*150812a8SEvalZero 268*150812a8SEvalZero PUBWEAK QDEC_IRQHandler 269*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 270*150812a8SEvalZeroQDEC_IRQHandler 271*150812a8SEvalZero B . 272*150812a8SEvalZero 273*150812a8SEvalZero PUBWEAK LPCOMP_IRQHandler 274*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 275*150812a8SEvalZeroLPCOMP_IRQHandler 276*150812a8SEvalZero B . 277*150812a8SEvalZero 278*150812a8SEvalZero PUBWEAK SWI0_IRQHandler 279*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 280*150812a8SEvalZeroSWI0_IRQHandler 281*150812a8SEvalZero B . 282*150812a8SEvalZero 283*150812a8SEvalZero PUBWEAK SWI1_IRQHandler 284*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 285*150812a8SEvalZeroSWI1_IRQHandler 286*150812a8SEvalZero B . 287*150812a8SEvalZero 288*150812a8SEvalZero PUBWEAK SWI2_IRQHandler 289*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 290*150812a8SEvalZeroSWI2_IRQHandler 291*150812a8SEvalZero B . 292*150812a8SEvalZero 293*150812a8SEvalZero PUBWEAK SWI3_IRQHandler 294*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 295*150812a8SEvalZeroSWI3_IRQHandler 296*150812a8SEvalZero B . 297*150812a8SEvalZero 298*150812a8SEvalZero PUBWEAK SWI4_IRQHandler 299*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 300*150812a8SEvalZeroSWI4_IRQHandler 301*150812a8SEvalZero B . 302*150812a8SEvalZero 303*150812a8SEvalZero PUBWEAK SWI5_IRQHandler 304*150812a8SEvalZero SECTION .text:CODE:REORDER:NOROOT(1) 305*150812a8SEvalZeroSWI5_IRQHandler 306*150812a8SEvalZero B . 307*150812a8SEvalZero 308*150812a8SEvalZero END 309*150812a8SEvalZero 310*150812a8SEvalZero 311