mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_NUVOTON/TARGET_NANO100/device/startup_Nano100Series.c@174:b96e65c34a4d, 2017-10-02 (annotated)
- Committer:
- AnnaBridge
- Date:
- Mon Oct 02 15:33:19 2017 +0100
- Revision:
- 174:b96e65c34a4d
- Child:
- 188:bcfe06ba3d64
This updates the lib to the mbed lib v 152
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 174:b96e65c34a4d | 1 | /****************************************************************************** |
AnnaBridge | 174:b96e65c34a4d | 2 | * @file startup_Nano100Series.c |
AnnaBridge | 174:b96e65c34a4d | 3 | * @version V1.00 |
AnnaBridge | 174:b96e65c34a4d | 4 | * $Revision: 4 $ |
AnnaBridge | 174:b96e65c34a4d | 5 | * $Date: 15/06/08 5:12p $ |
AnnaBridge | 174:b96e65c34a4d | 6 | * @brief CMSIS ARM Cortex-M0 Core Device Startup File |
AnnaBridge | 174:b96e65c34a4d | 7 | * |
AnnaBridge | 174:b96e65c34a4d | 8 | * @note |
AnnaBridge | 174:b96e65c34a4d | 9 | * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved. |
AnnaBridge | 174:b96e65c34a4d | 10 | *****************************************************************************/ |
AnnaBridge | 174:b96e65c34a4d | 11 | |
AnnaBridge | 174:b96e65c34a4d | 12 | #include "Nano100Series.h" |
AnnaBridge | 174:b96e65c34a4d | 13 | |
AnnaBridge | 174:b96e65c34a4d | 14 | /* Suppress warning messages */ |
AnnaBridge | 174:b96e65c34a4d | 15 | #if defined(__CC_ARM) |
AnnaBridge | 174:b96e65c34a4d | 16 | // Suppress warning message: extended constant initialiser used |
AnnaBridge | 174:b96e65c34a4d | 17 | #pragma diag_suppress 1296 |
AnnaBridge | 174:b96e65c34a4d | 18 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 19 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 20 | #endif |
AnnaBridge | 174:b96e65c34a4d | 21 | |
AnnaBridge | 174:b96e65c34a4d | 22 | /* Macro Definitions */ |
AnnaBridge | 174:b96e65c34a4d | 23 | #if defined(__CC_ARM) |
AnnaBridge | 174:b96e65c34a4d | 24 | #define WEAK __attribute__ ((weak)) |
AnnaBridge | 174:b96e65c34a4d | 25 | #define ALIAS(f) __attribute__ ((weak, alias(#f))) |
AnnaBridge | 174:b96e65c34a4d | 26 | |
AnnaBridge | 174:b96e65c34a4d | 27 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 174:b96e65c34a4d | 28 | void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); |
AnnaBridge | 174:b96e65c34a4d | 29 | |
AnnaBridge | 174:b96e65c34a4d | 30 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 31 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 174:b96e65c34a4d | 32 | void FUN(void); \ |
AnnaBridge | 174:b96e65c34a4d | 33 | _Pragma(_STRINGIFY(_WEAK_ALIAS_FUNC(FUN, FUN_ALIAS))) |
AnnaBridge | 174:b96e65c34a4d | 34 | #define _WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) weak __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) |
AnnaBridge | 174:b96e65c34a4d | 35 | #define __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) FUN##=##FUN_ALIAS |
AnnaBridge | 174:b96e65c34a4d | 36 | |
AnnaBridge | 174:b96e65c34a4d | 37 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 38 | #define WEAK __attribute__ ((weak)) |
AnnaBridge | 174:b96e65c34a4d | 39 | #define ALIAS(f) __attribute__ ((weak, alias(#f))) |
AnnaBridge | 174:b96e65c34a4d | 40 | |
AnnaBridge | 174:b96e65c34a4d | 41 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 174:b96e65c34a4d | 42 | void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); |
AnnaBridge | 174:b96e65c34a4d | 43 | |
AnnaBridge | 174:b96e65c34a4d | 44 | #endif |
AnnaBridge | 174:b96e65c34a4d | 45 | |
AnnaBridge | 174:b96e65c34a4d | 46 | |
AnnaBridge | 174:b96e65c34a4d | 47 | /* Initialize segments */ |
AnnaBridge | 174:b96e65c34a4d | 48 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 174:b96e65c34a4d | 49 | extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Limit; |
AnnaBridge | 174:b96e65c34a4d | 50 | extern void __main(void); |
AnnaBridge | 174:b96e65c34a4d | 51 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 52 | void __iar_program_start(void); |
AnnaBridge | 174:b96e65c34a4d | 53 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 54 | extern uint32_t __StackTop; |
AnnaBridge | 174:b96e65c34a4d | 55 | extern uint32_t __etext; |
AnnaBridge | 174:b96e65c34a4d | 56 | extern uint32_t __data_start__; |
AnnaBridge | 174:b96e65c34a4d | 57 | extern uint32_t __data_end__; |
AnnaBridge | 174:b96e65c34a4d | 58 | extern uint32_t __bss_start__; |
AnnaBridge | 174:b96e65c34a4d | 59 | extern uint32_t __bss_end__; |
AnnaBridge | 174:b96e65c34a4d | 60 | |
AnnaBridge | 174:b96e65c34a4d | 61 | extern void uvisor_init(void); |
AnnaBridge | 174:b96e65c34a4d | 62 | #if defined(TOOLCHAIN_GCC_ARM) |
AnnaBridge | 174:b96e65c34a4d | 63 | extern void _start(void); |
AnnaBridge | 174:b96e65c34a4d | 64 | #else |
AnnaBridge | 174:b96e65c34a4d | 65 | #error("For GCC toolchain, only support GNU ARM Embedded") |
AnnaBridge | 174:b96e65c34a4d | 66 | #endif |
AnnaBridge | 174:b96e65c34a4d | 67 | #endif |
AnnaBridge | 174:b96e65c34a4d | 68 | |
AnnaBridge | 174:b96e65c34a4d | 69 | /* Default empty handler */ |
AnnaBridge | 174:b96e65c34a4d | 70 | void Default_Handler(void); |
AnnaBridge | 174:b96e65c34a4d | 71 | |
AnnaBridge | 174:b96e65c34a4d | 72 | /* Reset handler */ |
AnnaBridge | 174:b96e65c34a4d | 73 | void Reset_Handler(void); |
AnnaBridge | 174:b96e65c34a4d | 74 | |
AnnaBridge | 174:b96e65c34a4d | 75 | /* Cortex-M0 core handlers */ |
AnnaBridge | 174:b96e65c34a4d | 76 | WEAK_ALIAS_FUNC(NMI_Handler, Default_Handler) // NMI Handler |
AnnaBridge | 174:b96e65c34a4d | 77 | WEAK_ALIAS_FUNC(HardFault_Handler, Default_Handler) // Hard Fault Handler |
AnnaBridge | 174:b96e65c34a4d | 78 | WEAK_ALIAS_FUNC(SVC_Handler, Default_Handler) // SVCall Handler |
AnnaBridge | 174:b96e65c34a4d | 79 | WEAK_ALIAS_FUNC(PendSV_Handler, Default_Handler) // PendSV Handler |
AnnaBridge | 174:b96e65c34a4d | 80 | WEAK_ALIAS_FUNC(SysTick_Handler, Default_Handler) // SysTick Handler |
AnnaBridge | 174:b96e65c34a4d | 81 | |
AnnaBridge | 174:b96e65c34a4d | 82 | /* Peripherals handlers */ |
AnnaBridge | 174:b96e65c34a4d | 83 | WEAK_ALIAS_FUNC(BOD_IRQHandler, Default_Handler) // Brownout low voltage detected interrupt |
AnnaBridge | 174:b96e65c34a4d | 84 | WEAK_ALIAS_FUNC(WDT_IRQHandler, Default_Handler) // Watch Dog Timer interrupt |
AnnaBridge | 174:b96e65c34a4d | 85 | WEAK_ALIAS_FUNC(EINT0_IRQHandler, Default_Handler) // External signal interrupt from PB.14 pin |
AnnaBridge | 174:b96e65c34a4d | 86 | WEAK_ALIAS_FUNC(EINT1_IRQHandler, Default_Handler) // External signal interrupt from PB.15 pin |
AnnaBridge | 174:b96e65c34a4d | 87 | WEAK_ALIAS_FUNC(GPABC_IRQHandler, Default_Handler) // External interrupt from PA[15:0]/PB[15:0]/PC[15:0] |
AnnaBridge | 174:b96e65c34a4d | 88 | WEAK_ALIAS_FUNC(GPDEF_IRQHandler, Default_Handler) // External interrupt from PD[15:0]/PE[15:0]/PF[7:0] |
AnnaBridge | 174:b96e65c34a4d | 89 | WEAK_ALIAS_FUNC(PWM0_IRQHandler, Default_Handler) // PWM 0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 90 | WEAK_ALIAS_FUNC(PWM1_IRQHandler, Default_Handler) // PWM 1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 91 | WEAK_ALIAS_FUNC(TMR0_IRQHandler, Default_Handler) // Timer 0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 92 | WEAK_ALIAS_FUNC(TMR1_IRQHandler, Default_Handler) // Timer 1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 93 | WEAK_ALIAS_FUNC(TMR2_IRQHandler, Default_Handler) // Timer 2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 94 | WEAK_ALIAS_FUNC(TMR3_IRQHandler, Default_Handler) // Timer 3 interrupt |
AnnaBridge | 174:b96e65c34a4d | 95 | WEAK_ALIAS_FUNC(UART0_IRQHandler, Default_Handler) // UART0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 96 | WEAK_ALIAS_FUNC(UART1_IRQHandler, Default_Handler) // UART1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 97 | WEAK_ALIAS_FUNC(SPI0_IRQHandler, Default_Handler) // SPI0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 98 | WEAK_ALIAS_FUNC(SPI1_IRQHandler, Default_Handler) // SPI1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 99 | WEAK_ALIAS_FUNC(SPI2_IRQHandler, Default_Handler) // SPI2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 100 | WEAK_ALIAS_FUNC(HIRC_IRQHandler, Default_Handler) // HIRC interrupt |
AnnaBridge | 174:b96e65c34a4d | 101 | WEAK_ALIAS_FUNC(I2C0_IRQHandler, Default_Handler) // I2C0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 102 | WEAK_ALIAS_FUNC(I2C1_IRQHandler, Default_Handler) // I2C1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 103 | WEAK_ALIAS_FUNC(SC2_IRQHandler, Default_Handler) // SC2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 104 | WEAK_ALIAS_FUNC(SC0_IRQHandler, Default_Handler) // SC0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 105 | WEAK_ALIAS_FUNC(SC1_IRQHandler, Default_Handler) // SC1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 106 | WEAK_ALIAS_FUNC(USBD_IRQHandler, Default_Handler) // USB FS Device interrupt |
AnnaBridge | 174:b96e65c34a4d | 107 | // Reserved |
AnnaBridge | 174:b96e65c34a4d | 108 | WEAK_ALIAS_FUNC(LCD_IRQHandler, Default_Handler) // LCD interrupt |
AnnaBridge | 174:b96e65c34a4d | 109 | WEAK_ALIAS_FUNC(PDMA_IRQHandler, Default_Handler) // PDMA interrupt |
AnnaBridge | 174:b96e65c34a4d | 110 | WEAK_ALIAS_FUNC(I2S_IRQHandler, Default_Handler) // I2S interrupt |
AnnaBridge | 174:b96e65c34a4d | 111 | WEAK_ALIAS_FUNC(PDWU_IRQHandler, Default_Handler) // Power Down Wake up interrupt |
AnnaBridge | 174:b96e65c34a4d | 112 | WEAK_ALIAS_FUNC(ADC_IRQHandler, Default_Handler) // ADC interrupt |
AnnaBridge | 174:b96e65c34a4d | 113 | WEAK_ALIAS_FUNC(DAC_IRQHandler, Default_Handler) // DAC interrupt |
AnnaBridge | 174:b96e65c34a4d | 114 | WEAK_ALIAS_FUNC(RTC_IRQHandler, Default_Handler) // Real time clock interrupt |
AnnaBridge | 174:b96e65c34a4d | 115 | |
AnnaBridge | 174:b96e65c34a4d | 116 | /* Vector table */ |
AnnaBridge | 174:b96e65c34a4d | 117 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 174:b96e65c34a4d | 118 | __attribute__ ((section("RESET"))) |
AnnaBridge | 174:b96e65c34a4d | 119 | const uint32_t __vector_handlers[] = { |
AnnaBridge | 174:b96e65c34a4d | 120 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 121 | extern uint32_t CSTACK$$Limit; |
AnnaBridge | 174:b96e65c34a4d | 122 | const uint32_t __vector_table[] @ ".intvec" = { |
AnnaBridge | 174:b96e65c34a4d | 123 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 124 | __attribute__ ((section(".vector_table"))) |
AnnaBridge | 174:b96e65c34a4d | 125 | const uint32_t __vector_handlers[] = { |
AnnaBridge | 174:b96e65c34a4d | 126 | #endif |
AnnaBridge | 174:b96e65c34a4d | 127 | |
AnnaBridge | 174:b96e65c34a4d | 128 | /* Configure Initial Stack Pointer, using linker-generated symbols */ |
AnnaBridge | 174:b96e65c34a4d | 129 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 174:b96e65c34a4d | 130 | (uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit, |
AnnaBridge | 174:b96e65c34a4d | 131 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 132 | (uint32_t) &CSTACK$$Limit, |
AnnaBridge | 174:b96e65c34a4d | 133 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 134 | (uint32_t) &__StackTop, |
AnnaBridge | 174:b96e65c34a4d | 135 | #endif |
AnnaBridge | 174:b96e65c34a4d | 136 | |
AnnaBridge | 174:b96e65c34a4d | 137 | (uint32_t) Reset_Handler, // Reset Handler |
AnnaBridge | 174:b96e65c34a4d | 138 | (uint32_t) NMI_Handler, // NMI Handler |
AnnaBridge | 174:b96e65c34a4d | 139 | (uint32_t) HardFault_Handler, // Hard Fault Handler |
AnnaBridge | 174:b96e65c34a4d | 140 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 141 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 142 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 143 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 144 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 145 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 146 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 147 | (uint32_t) SVC_Handler, // SVCall Handler |
AnnaBridge | 174:b96e65c34a4d | 148 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 149 | 0, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 150 | (uint32_t) PendSV_Handler, // PendSV Handler |
AnnaBridge | 174:b96e65c34a4d | 151 | (uint32_t) SysTick_Handler, // SysTick Handler |
AnnaBridge | 174:b96e65c34a4d | 152 | |
AnnaBridge | 174:b96e65c34a4d | 153 | /* External Interrupts */ |
AnnaBridge | 174:b96e65c34a4d | 154 | (uint32_t) BOD_IRQHandler, // Brownout low voltage detected interrupt |
AnnaBridge | 174:b96e65c34a4d | 155 | (uint32_t) WDT_IRQHandler, // Watch Dog Timer interrupt |
AnnaBridge | 174:b96e65c34a4d | 156 | (uint32_t) EINT0_IRQHandler, // External signal interrupt from PB.14 pin |
AnnaBridge | 174:b96e65c34a4d | 157 | (uint32_t) EINT1_IRQHandler, // External signal interrupt from PB.15 pin |
AnnaBridge | 174:b96e65c34a4d | 158 | (uint32_t) GPABC_IRQHandler, // External interrupt from PA[15:0]/PB[15:0]/PC[15:0] |
AnnaBridge | 174:b96e65c34a4d | 159 | (uint32_t) GPDEF_IRQHandler, // External interrupt from PD[15:0]/PE[15:0]/PF[7:0] |
AnnaBridge | 174:b96e65c34a4d | 160 | (uint32_t) PWM0_IRQHandler, // PWM 0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 161 | (uint32_t) PWM1_IRQHandler, // PWM 1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 162 | (uint32_t) TMR0_IRQHandler, // Timer 0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 163 | (uint32_t) TMR1_IRQHandler, // Timer 1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 164 | (uint32_t) TMR2_IRQHandler, // Timer 2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 165 | (uint32_t) TMR3_IRQHandler, // Timer 3 interrupt |
AnnaBridge | 174:b96e65c34a4d | 166 | (uint32_t) UART0_IRQHandler, // UART0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 167 | (uint32_t) UART1_IRQHandler, // UART1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 168 | (uint32_t) SPI0_IRQHandler, // SPI0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 169 | (uint32_t) SPI1_IRQHandler, // SPI1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 170 | (uint32_t) SPI2_IRQHandler, // SPI2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 171 | (uint32_t) HIRC_IRQHandler, // HIRC interrupt |
AnnaBridge | 174:b96e65c34a4d | 172 | (uint32_t) I2C0_IRQHandler, // I2C0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 173 | (uint32_t) I2C1_IRQHandler, // I2C1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 174 | (uint32_t) SC2_IRQHandler, // SC2 interrupt |
AnnaBridge | 174:b96e65c34a4d | 175 | (uint32_t) SC0_IRQHandler, // SC0 interrupt |
AnnaBridge | 174:b96e65c34a4d | 176 | (uint32_t) SC1_IRQHandler, // SC1 interrupt |
AnnaBridge | 174:b96e65c34a4d | 177 | (uint32_t) USBD_IRQHandler, // USB FS Device interrupt |
AnnaBridge | 174:b96e65c34a4d | 178 | (uint32_t) Default_Handler, // Reserved |
AnnaBridge | 174:b96e65c34a4d | 179 | (uint32_t) LCD_IRQHandler, // LCD interrupt |
AnnaBridge | 174:b96e65c34a4d | 180 | (uint32_t) PDMA_IRQHandler, // PDMA interrupt |
AnnaBridge | 174:b96e65c34a4d | 181 | (uint32_t) I2S_IRQHandler, // I2S interrupt |
AnnaBridge | 174:b96e65c34a4d | 182 | (uint32_t) PDWU_IRQHandler, // Power Down Wake up interrupt |
AnnaBridge | 174:b96e65c34a4d | 183 | (uint32_t) ADC_IRQHandler, // ADC interrupt |
AnnaBridge | 174:b96e65c34a4d | 184 | (uint32_t) DAC_IRQHandler, // DAC interrupt |
AnnaBridge | 174:b96e65c34a4d | 185 | (uint32_t) RTC_IRQHandler, // Real time clock interrupt |
AnnaBridge | 174:b96e65c34a4d | 186 | }; |
AnnaBridge | 174:b96e65c34a4d | 187 | |
AnnaBridge | 174:b96e65c34a4d | 188 | /** |
AnnaBridge | 174:b96e65c34a4d | 189 | * \brief This is the code that gets called on processor reset. |
AnnaBridge | 174:b96e65c34a4d | 190 | */ |
AnnaBridge | 174:b96e65c34a4d | 191 | void Reset_Handler(void) |
AnnaBridge | 174:b96e65c34a4d | 192 | { |
AnnaBridge | 174:b96e65c34a4d | 193 | /* Disable register write-protection function */ |
AnnaBridge | 174:b96e65c34a4d | 194 | SYS_UnlockReg(); |
AnnaBridge | 174:b96e65c34a4d | 195 | |
AnnaBridge | 174:b96e65c34a4d | 196 | /* Disable Power-on Reset function */ |
AnnaBridge | 174:b96e65c34a4d | 197 | SYS_DISABLE_POR(); |
AnnaBridge | 174:b96e65c34a4d | 198 | |
AnnaBridge | 174:b96e65c34a4d | 199 | /* Enable register write-protection function */ |
AnnaBridge | 174:b96e65c34a4d | 200 | SYS_LockReg(); |
AnnaBridge | 174:b96e65c34a4d | 201 | |
AnnaBridge | 174:b96e65c34a4d | 202 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 174:b96e65c34a4d | 203 | __main(); |
AnnaBridge | 174:b96e65c34a4d | 204 | |
AnnaBridge | 174:b96e65c34a4d | 205 | #elif defined(__ICCARM__) |
AnnaBridge | 174:b96e65c34a4d | 206 | __iar_program_start(); |
AnnaBridge | 174:b96e65c34a4d | 207 | |
AnnaBridge | 174:b96e65c34a4d | 208 | #elif defined(__GNUC__) |
AnnaBridge | 174:b96e65c34a4d | 209 | uint32_t *src_ind = (uint32_t *) &__etext; |
AnnaBridge | 174:b96e65c34a4d | 210 | uint32_t *dst_ind = (uint32_t *) &__data_start__; |
AnnaBridge | 174:b96e65c34a4d | 211 | uint32_t *dst_end = (uint32_t *) &__data_end__; |
AnnaBridge | 174:b96e65c34a4d | 212 | |
AnnaBridge | 174:b96e65c34a4d | 213 | /* Move .data section from ROM to RAM */ |
AnnaBridge | 174:b96e65c34a4d | 214 | if (src_ind != dst_ind) { |
AnnaBridge | 174:b96e65c34a4d | 215 | for (; dst_ind < dst_end;) { |
AnnaBridge | 174:b96e65c34a4d | 216 | *dst_ind ++ = *src_ind ++; |
AnnaBridge | 174:b96e65c34a4d | 217 | } |
AnnaBridge | 174:b96e65c34a4d | 218 | } |
AnnaBridge | 174:b96e65c34a4d | 219 | |
AnnaBridge | 174:b96e65c34a4d | 220 | /* Initialize .bss section to zero */ |
AnnaBridge | 174:b96e65c34a4d | 221 | dst_ind = (uint32_t *) &__bss_start__; |
AnnaBridge | 174:b96e65c34a4d | 222 | dst_end = (uint32_t *) &__bss_end__; |
AnnaBridge | 174:b96e65c34a4d | 223 | if (dst_ind != dst_end) { |
AnnaBridge | 174:b96e65c34a4d | 224 | for (; dst_ind < dst_end;) { |
AnnaBridge | 174:b96e65c34a4d | 225 | *dst_ind ++ = 0; |
AnnaBridge | 174:b96e65c34a4d | 226 | } |
AnnaBridge | 174:b96e65c34a4d | 227 | } |
AnnaBridge | 174:b96e65c34a4d | 228 | |
AnnaBridge | 174:b96e65c34a4d | 229 | _start(); |
AnnaBridge | 174:b96e65c34a4d | 230 | |
AnnaBridge | 174:b96e65c34a4d | 231 | #endif |
AnnaBridge | 174:b96e65c34a4d | 232 | |
AnnaBridge | 174:b96e65c34a4d | 233 | /* Infinite loop */ |
AnnaBridge | 174:b96e65c34a4d | 234 | while (1); |
AnnaBridge | 174:b96e65c34a4d | 235 | } |
AnnaBridge | 174:b96e65c34a4d | 236 | |
AnnaBridge | 174:b96e65c34a4d | 237 | /** |
AnnaBridge | 174:b96e65c34a4d | 238 | * \brief Default interrupt handler for unused IRQs. |
AnnaBridge | 174:b96e65c34a4d | 239 | */ |
AnnaBridge | 174:b96e65c34a4d | 240 | void Default_Handler(void) |
AnnaBridge | 174:b96e65c34a4d | 241 | { |
AnnaBridge | 174:b96e65c34a4d | 242 | while (1); |
AnnaBridge | 174:b96e65c34a4d | 243 | } |