mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_NUVOTON/TARGET_M2351/device/startup_M2351.c@189:f392fc9709a3, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 22:31:08 2019 +0000
- Revision:
- 189:f392fc9709a3
- Parent:
- 187:0387e8f68319
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 187:0387e8f68319 | 1 | /**************************************************************************//** |
AnnaBridge | 187:0387e8f68319 | 2 | * @file startup_M2351.c |
AnnaBridge | 187:0387e8f68319 | 3 | * @version V2.00 |
AnnaBridge | 187:0387e8f68319 | 4 | * $Revision: 9 $ |
AnnaBridge | 187:0387e8f68319 | 5 | * $Date: 16/08/27 12:33p $ |
AnnaBridge | 187:0387e8f68319 | 6 | * @brief Startup Source File |
AnnaBridge | 187:0387e8f68319 | 7 | * |
AnnaBridge | 187:0387e8f68319 | 8 | * @note |
AnnaBridge | 187:0387e8f68319 | 9 | * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved. |
AnnaBridge | 187:0387e8f68319 | 10 | * |
AnnaBridge | 187:0387e8f68319 | 11 | ******************************************************************************/ |
AnnaBridge | 187:0387e8f68319 | 12 | |
AnnaBridge | 187:0387e8f68319 | 13 | #include "M2351.h" |
AnnaBridge | 187:0387e8f68319 | 14 | |
AnnaBridge | 187:0387e8f68319 | 15 | /* Suppress warning messages */ |
AnnaBridge | 187:0387e8f68319 | 16 | #if defined(__CC_ARM) |
AnnaBridge | 187:0387e8f68319 | 17 | // Suppress warning message: extended constant initialiser used |
AnnaBridge | 187:0387e8f68319 | 18 | #pragma diag_suppress 1296 |
AnnaBridge | 187:0387e8f68319 | 19 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 20 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 21 | #endif |
AnnaBridge | 187:0387e8f68319 | 22 | |
AnnaBridge | 187:0387e8f68319 | 23 | /* Macro Definitions */ |
AnnaBridge | 187:0387e8f68319 | 24 | #if defined(__CC_ARM) |
AnnaBridge | 187:0387e8f68319 | 25 | #define WEAK __attribute__ ((weak)) |
AnnaBridge | 187:0387e8f68319 | 26 | #define ALIAS(f) __attribute__ ((weak, alias(#f))) |
AnnaBridge | 187:0387e8f68319 | 27 | |
AnnaBridge | 187:0387e8f68319 | 28 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 187:0387e8f68319 | 29 | void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); |
AnnaBridge | 187:0387e8f68319 | 30 | |
AnnaBridge | 187:0387e8f68319 | 31 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 32 | //#define STRINGIFY(x) #x |
AnnaBridge | 187:0387e8f68319 | 33 | //#define _STRINGIFY(x) STRINGIFY(x) |
AnnaBridge | 187:0387e8f68319 | 34 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 187:0387e8f68319 | 35 | void FUN(void); \ |
AnnaBridge | 187:0387e8f68319 | 36 | _Pragma(_STRINGIFY(_WEAK_ALIAS_FUNC(FUN, FUN_ALIAS))) |
AnnaBridge | 187:0387e8f68319 | 37 | #define _WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) weak __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) |
AnnaBridge | 187:0387e8f68319 | 38 | #define __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) FUN##=##FUN_ALIAS |
AnnaBridge | 187:0387e8f68319 | 39 | |
AnnaBridge | 187:0387e8f68319 | 40 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 41 | #define WEAK __attribute__ ((weak)) |
AnnaBridge | 187:0387e8f68319 | 42 | #define ALIAS(f) __attribute__ ((weak, alias(#f))) |
AnnaBridge | 187:0387e8f68319 | 43 | |
AnnaBridge | 187:0387e8f68319 | 44 | #define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ |
AnnaBridge | 187:0387e8f68319 | 45 | void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); |
AnnaBridge | 187:0387e8f68319 | 46 | |
AnnaBridge | 187:0387e8f68319 | 47 | #endif |
AnnaBridge | 187:0387e8f68319 | 48 | |
AnnaBridge | 187:0387e8f68319 | 49 | |
AnnaBridge | 187:0387e8f68319 | 50 | /* Initialize segments */ |
AnnaBridge | 187:0387e8f68319 | 51 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 187:0387e8f68319 | 52 | extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Limit; |
AnnaBridge | 187:0387e8f68319 | 53 | extern void __main(void); |
AnnaBridge | 187:0387e8f68319 | 54 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 55 | void __iar_program_start(void); |
AnnaBridge | 187:0387e8f68319 | 56 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 57 | extern uint32_t __StackTop; |
AnnaBridge | 187:0387e8f68319 | 58 | extern uint32_t __etext; |
AnnaBridge | 187:0387e8f68319 | 59 | extern uint32_t __data_start__; |
AnnaBridge | 187:0387e8f68319 | 60 | extern uint32_t __data_end__; |
AnnaBridge | 187:0387e8f68319 | 61 | extern uint32_t __bss_start__; |
AnnaBridge | 187:0387e8f68319 | 62 | extern uint32_t __bss_end__; |
AnnaBridge | 187:0387e8f68319 | 63 | |
AnnaBridge | 187:0387e8f68319 | 64 | extern void uvisor_init(void); |
AnnaBridge | 187:0387e8f68319 | 65 | #if defined(TOOLCHAIN_GCC_ARM) |
AnnaBridge | 187:0387e8f68319 | 66 | extern void _start(void); |
AnnaBridge | 187:0387e8f68319 | 67 | #else |
AnnaBridge | 187:0387e8f68319 | 68 | #error("For GCC toolchain, only support GNU ARM Embedded") |
AnnaBridge | 187:0387e8f68319 | 69 | #endif |
AnnaBridge | 187:0387e8f68319 | 70 | #endif |
AnnaBridge | 187:0387e8f68319 | 71 | |
AnnaBridge | 187:0387e8f68319 | 72 | /* Default empty handler */ |
AnnaBridge | 187:0387e8f68319 | 73 | void Default_Handler(void); |
AnnaBridge | 187:0387e8f68319 | 74 | |
AnnaBridge | 187:0387e8f68319 | 75 | /* Reset handler */ |
AnnaBridge | 187:0387e8f68319 | 76 | void Reset_Handler(void); |
AnnaBridge | 187:0387e8f68319 | 77 | |
AnnaBridge | 187:0387e8f68319 | 78 | /* Cortex-M0+ core handlers */ |
AnnaBridge | 187:0387e8f68319 | 79 | WEAK_ALIAS_FUNC(NMI_Handler, Default_Handler) |
AnnaBridge | 187:0387e8f68319 | 80 | WEAK_ALIAS_FUNC(HardFault_Handler, Default_Handler) |
AnnaBridge | 187:0387e8f68319 | 81 | WEAK_ALIAS_FUNC(SVC_Handler, Default_Handler) |
AnnaBridge | 187:0387e8f68319 | 82 | |
AnnaBridge | 187:0387e8f68319 | 83 | WEAK_ALIAS_FUNC(PendSV_Handler, Default_Handler) |
AnnaBridge | 187:0387e8f68319 | 84 | WEAK_ALIAS_FUNC(SysTick_Handler, Default_Handler) |
AnnaBridge | 187:0387e8f68319 | 85 | |
AnnaBridge | 187:0387e8f68319 | 86 | /* Peripherals handlers */ |
AnnaBridge | 187:0387e8f68319 | 87 | WEAK_ALIAS_FUNC(BOD_IRQHandler, Default_Handler) // 0: Brown Out detection |
AnnaBridge | 187:0387e8f68319 | 88 | WEAK_ALIAS_FUNC(IRC_IRQHandler, Default_Handler) // 1: Internal RC |
AnnaBridge | 187:0387e8f68319 | 89 | WEAK_ALIAS_FUNC(PWRWU_IRQHandler, Default_Handler) // 2: Power down wake up |
AnnaBridge | 187:0387e8f68319 | 90 | WEAK_ALIAS_FUNC(SRAM_IRQHandler, Default_Handler) // 3: SRAM |
AnnaBridge | 187:0387e8f68319 | 91 | WEAK_ALIAS_FUNC(CLKFAIL_IRQHandler, Default_Handler) // 4: Clock detection fail |
AnnaBridge | 187:0387e8f68319 | 92 | // 5: Reserved |
AnnaBridge | 187:0387e8f68319 | 93 | WEAK_ALIAS_FUNC(RTC_IRQHandler, Default_Handler) // 6: Real Time Clock |
AnnaBridge | 187:0387e8f68319 | 94 | WEAK_ALIAS_FUNC(TAMPER_IRQHandler, Default_Handler) // 7: Tamper detection |
AnnaBridge | 187:0387e8f68319 | 95 | WEAK_ALIAS_FUNC(WDT_IRQHandler, Default_Handler) // 8: Watchdog timer |
AnnaBridge | 187:0387e8f68319 | 96 | WEAK_ALIAS_FUNC(WWDT_IRQHandler, Default_Handler) // 9: Window watchdog timer |
AnnaBridge | 187:0387e8f68319 | 97 | WEAK_ALIAS_FUNC(EINT0_IRQHandler, Default_Handler) // 10: External Input 0 |
AnnaBridge | 187:0387e8f68319 | 98 | WEAK_ALIAS_FUNC(EINT1_IRQHandler, Default_Handler) // 11: External Input 1 |
AnnaBridge | 187:0387e8f68319 | 99 | WEAK_ALIAS_FUNC(EINT2_IRQHandler, Default_Handler) // 12: External Input 2 |
AnnaBridge | 187:0387e8f68319 | 100 | WEAK_ALIAS_FUNC(EINT3_IRQHandler, Default_Handler) // 13: External Input 3 |
AnnaBridge | 187:0387e8f68319 | 101 | WEAK_ALIAS_FUNC(EINT4_IRQHandler, Default_Handler) // 14: External Input 4 |
AnnaBridge | 187:0387e8f68319 | 102 | WEAK_ALIAS_FUNC(EINT5_IRQHandler, Default_Handler) // 15: External Input 5 |
AnnaBridge | 187:0387e8f68319 | 103 | WEAK_ALIAS_FUNC(GPA_IRQHandler, Default_Handler) // 16: GPIO Port A |
AnnaBridge | 187:0387e8f68319 | 104 | WEAK_ALIAS_FUNC(GPB_IRQHandler, Default_Handler) // 17: GPIO Port B |
AnnaBridge | 187:0387e8f68319 | 105 | WEAK_ALIAS_FUNC(GPC_IRQHandler, Default_Handler) // 18: GPIO Port C |
AnnaBridge | 187:0387e8f68319 | 106 | WEAK_ALIAS_FUNC(GPD_IRQHandler, Default_Handler) // 19: GPIO Port D |
AnnaBridge | 187:0387e8f68319 | 107 | WEAK_ALIAS_FUNC(GPE_IRQHandler, Default_Handler) // 20: GPIO Port E |
AnnaBridge | 187:0387e8f68319 | 108 | WEAK_ALIAS_FUNC(GPF_IRQHandler, Default_Handler) // 21: GPIO Port F |
AnnaBridge | 187:0387e8f68319 | 109 | WEAK_ALIAS_FUNC(QSPI0_IRQHandler, Default_Handler) // 22: SPI0 |
AnnaBridge | 187:0387e8f68319 | 110 | WEAK_ALIAS_FUNC(SPI0_IRQHandler, Default_Handler) // 23: SPI1 |
AnnaBridge | 187:0387e8f68319 | 111 | WEAK_ALIAS_FUNC(BRAKE0_IRQHandler, Default_Handler) // 24: |
AnnaBridge | 187:0387e8f68319 | 112 | WEAK_ALIAS_FUNC(EPWM0_P0_IRQHandler, Default_Handler) // 25: |
AnnaBridge | 187:0387e8f68319 | 113 | WEAK_ALIAS_FUNC(EPWM0_P1_IRQHandler, Default_Handler) // 26: |
AnnaBridge | 187:0387e8f68319 | 114 | WEAK_ALIAS_FUNC(EPWM0_P2_IRQHandler, Default_Handler) // 27: |
AnnaBridge | 187:0387e8f68319 | 115 | WEAK_ALIAS_FUNC(BRAKE1_IRQHandler, Default_Handler) // 28: |
AnnaBridge | 187:0387e8f68319 | 116 | WEAK_ALIAS_FUNC(EPWM1_P0_IRQHandler, Default_Handler) // 29: |
AnnaBridge | 187:0387e8f68319 | 117 | WEAK_ALIAS_FUNC(EPWM1_P1_IRQHandler, Default_Handler) // 30: |
AnnaBridge | 187:0387e8f68319 | 118 | WEAK_ALIAS_FUNC(EPWM1_P2_IRQHandler, Default_Handler) // 31: |
AnnaBridge | 187:0387e8f68319 | 119 | WEAK_ALIAS_FUNC(TMR0_IRQHandler, Default_Handler) // 32: Timer 0 |
AnnaBridge | 187:0387e8f68319 | 120 | WEAK_ALIAS_FUNC(TMR1_IRQHandler, Default_Handler) // 33: Timer 1 |
AnnaBridge | 187:0387e8f68319 | 121 | WEAK_ALIAS_FUNC(TMR2_IRQHandler, Default_Handler) // 34: Timer 2 |
AnnaBridge | 187:0387e8f68319 | 122 | WEAK_ALIAS_FUNC(TMR3_IRQHandler, Default_Handler) // 35: Timer 3 |
AnnaBridge | 187:0387e8f68319 | 123 | WEAK_ALIAS_FUNC(UART0_IRQHandler, Default_Handler) // 36: UART0 |
AnnaBridge | 187:0387e8f68319 | 124 | WEAK_ALIAS_FUNC(UART1_IRQHandler, Default_Handler) // 37: UART1 |
AnnaBridge | 187:0387e8f68319 | 125 | WEAK_ALIAS_FUNC(I2C0_IRQHandler, Default_Handler) // 38: I2C0 |
AnnaBridge | 187:0387e8f68319 | 126 | WEAK_ALIAS_FUNC(I2C1_IRQHandler, Default_Handler) // 39: I2C1 |
AnnaBridge | 187:0387e8f68319 | 127 | WEAK_ALIAS_FUNC(PDMA0_IRQHandler, Default_Handler) // 40: Peripheral DMA |
AnnaBridge | 187:0387e8f68319 | 128 | WEAK_ALIAS_FUNC(DAC_IRQHandler, Default_Handler) // 41: DAC |
AnnaBridge | 187:0387e8f68319 | 129 | WEAK_ALIAS_FUNC(EADC0_IRQHandler, Default_Handler) // 42: ADC0 interrupt source 0 |
AnnaBridge | 187:0387e8f68319 | 130 | WEAK_ALIAS_FUNC(EADC1_IRQHandler, Default_Handler) // 43: ADC0 interrupt source 1 |
AnnaBridge | 187:0387e8f68319 | 131 | WEAK_ALIAS_FUNC(ACMP01_IRQHandler, Default_Handler) // 44: ACMP0 and ACMP1 |
AnnaBridge | 187:0387e8f68319 | 132 | // 45: Reserved |
AnnaBridge | 187:0387e8f68319 | 133 | WEAK_ALIAS_FUNC(EADC2_IRQHandler, Default_Handler) // 46: ADC0 interrupt source 2 |
AnnaBridge | 187:0387e8f68319 | 134 | WEAK_ALIAS_FUNC(EADC3_IRQHandler, Default_Handler) // 47: ADC0 interrupt source 3 |
AnnaBridge | 187:0387e8f68319 | 135 | WEAK_ALIAS_FUNC(UART2_IRQHandler, Default_Handler) // 48: UART2 |
AnnaBridge | 187:0387e8f68319 | 136 | WEAK_ALIAS_FUNC(UART3_IRQHandler, Default_Handler) // 49: UART3 |
AnnaBridge | 187:0387e8f68319 | 137 | // 50: Reserved |
AnnaBridge | 187:0387e8f68319 | 138 | WEAK_ALIAS_FUNC(SPI1_IRQHandler, Default_Handler) // 51: SPI1 |
AnnaBridge | 187:0387e8f68319 | 139 | WEAK_ALIAS_FUNC(SPI2_IRQHandler, Default_Handler) // 52: SPI2 |
AnnaBridge | 187:0387e8f68319 | 140 | WEAK_ALIAS_FUNC(USBD_IRQHandler, Default_Handler) // 53: USB device |
AnnaBridge | 187:0387e8f68319 | 141 | WEAK_ALIAS_FUNC(USBH_IRQHandler, Default_Handler) // 54: USB host |
AnnaBridge | 187:0387e8f68319 | 142 | WEAK_ALIAS_FUNC(USBOTG_IRQHandler, Default_Handler) // 55: USB OTG |
AnnaBridge | 187:0387e8f68319 | 143 | WEAK_ALIAS_FUNC(CAN0_IRQHandler, Default_Handler) // 56: CAN0 |
AnnaBridge | 187:0387e8f68319 | 144 | // 57: Reserved |
AnnaBridge | 187:0387e8f68319 | 145 | WEAK_ALIAS_FUNC(SC0_IRQHandler, Default_Handler) // 58: |
AnnaBridge | 187:0387e8f68319 | 146 | WEAK_ALIAS_FUNC(SC1_IRQHandler, Default_Handler) // 59: |
AnnaBridge | 187:0387e8f68319 | 147 | WEAK_ALIAS_FUNC(SC2_IRQHandler, Default_Handler) // 60: |
AnnaBridge | 187:0387e8f68319 | 148 | // 61: |
AnnaBridge | 187:0387e8f68319 | 149 | WEAK_ALIAS_FUNC(SPI3_IRQHandler, Default_Handler) // 62: |
AnnaBridge | 187:0387e8f68319 | 150 | // 63: Reserved |
AnnaBridge | 187:0387e8f68319 | 151 | WEAK_ALIAS_FUNC(SDH0_IRQHandler, Default_Handler) // 64: |
AnnaBridge | 187:0387e8f68319 | 152 | // 65 ~67: Reserved |
AnnaBridge | 187:0387e8f68319 | 153 | WEAK_ALIAS_FUNC(I2S0_IRQHandler, Default_Handler) // 68: |
AnnaBridge | 187:0387e8f68319 | 154 | // 69: Reserved |
AnnaBridge | 187:0387e8f68319 | 155 | WEAK_ALIAS_FUNC(OPA0_IRQHandler, Default_Handler) // 70: |
AnnaBridge | 187:0387e8f68319 | 156 | WEAK_ALIAS_FUNC(CRPT_IRQHandler, Default_Handler) // 71: |
AnnaBridge | 187:0387e8f68319 | 157 | WEAK_ALIAS_FUNC(GPG_IRQHandler, Default_Handler) // 72: |
AnnaBridge | 187:0387e8f68319 | 158 | WEAK_ALIAS_FUNC(EINT6_IRQHandler, Default_Handler) // 73: |
AnnaBridge | 187:0387e8f68319 | 159 | WEAK_ALIAS_FUNC(UART4_IRQHandler, Default_Handler) // 74: |
AnnaBridge | 187:0387e8f68319 | 160 | WEAK_ALIAS_FUNC(UART5_IRQHandler, Default_Handler) // 75: |
AnnaBridge | 187:0387e8f68319 | 161 | WEAK_ALIAS_FUNC(USCI0_IRQHandler, Default_Handler) // 76: |
AnnaBridge | 187:0387e8f68319 | 162 | WEAK_ALIAS_FUNC(USCI1_IRQHandler, Default_Handler) // 77: |
AnnaBridge | 187:0387e8f68319 | 163 | WEAK_ALIAS_FUNC(BPWM0_IRQHandler, Default_Handler) // 78: |
AnnaBridge | 187:0387e8f68319 | 164 | WEAK_ALIAS_FUNC(BPWM1_IRQHandler, Default_Handler) // 79: |
AnnaBridge | 187:0387e8f68319 | 165 | // 80~81: Reserved |
AnnaBridge | 187:0387e8f68319 | 166 | WEAK_ALIAS_FUNC(I2C2_IRQHandler, Default_Handler) // 82: |
AnnaBridge | 187:0387e8f68319 | 167 | // 83: Reserved |
AnnaBridge | 187:0387e8f68319 | 168 | WEAK_ALIAS_FUNC(QEI0_IRQHandler, Default_Handler) // 84: |
AnnaBridge | 187:0387e8f68319 | 169 | WEAK_ALIAS_FUNC(QEI1_IRQHandler, Default_Handler) // 85: |
AnnaBridge | 187:0387e8f68319 | 170 | WEAK_ALIAS_FUNC(ECAP0_IRQHandler, Default_Handler) // 86: |
AnnaBridge | 187:0387e8f68319 | 171 | WEAK_ALIAS_FUNC(ECAP1_IRQHandler, Default_Handler) // 87: |
AnnaBridge | 187:0387e8f68319 | 172 | WEAK_ALIAS_FUNC(GPH_IRQHandler, Default_Handler) // 88: |
AnnaBridge | 187:0387e8f68319 | 173 | WEAK_ALIAS_FUNC(EINT7_IRQHandler, Default_Handler) // 89: |
AnnaBridge | 187:0387e8f68319 | 174 | // 90~95: Reserved |
AnnaBridge | 187:0387e8f68319 | 175 | WEAK_ALIAS_FUNC(SPI5_IRQHandler, Default_Handler) // 96: |
AnnaBridge | 187:0387e8f68319 | 176 | WEAK_ALIAS_FUNC(DSRC_IRQHandler, Default_Handler) // 97: |
AnnaBridge | 187:0387e8f68319 | 177 | WEAK_ALIAS_FUNC(PDMA1_IRQHandler, Default_Handler) // 98: |
AnnaBridge | 187:0387e8f68319 | 178 | WEAK_ALIAS_FUNC(SCU_IRQHandler, Default_Handler) // 99: |
AnnaBridge | 187:0387e8f68319 | 179 | // 100: Reserved |
AnnaBridge | 187:0387e8f68319 | 180 | WEAK_ALIAS_FUNC(TRNG_IRQHandler, Default_Handler) // 101: |
AnnaBridge | 187:0387e8f68319 | 181 | |
AnnaBridge | 187:0387e8f68319 | 182 | |
AnnaBridge | 187:0387e8f68319 | 183 | /* Vector table */ |
AnnaBridge | 187:0387e8f68319 | 184 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 187:0387e8f68319 | 185 | __attribute__ ((section("RESET"))) |
AnnaBridge | 187:0387e8f68319 | 186 | const uint32_t __vector_handlers[] = { |
AnnaBridge | 187:0387e8f68319 | 187 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 188 | extern uint32_t CSTACK$$Limit; |
AnnaBridge | 187:0387e8f68319 | 189 | const uint32_t __vector_table[] @ ".intvec" = { |
AnnaBridge | 187:0387e8f68319 | 190 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 191 | __attribute__ ((section(".vector_table"))) |
AnnaBridge | 187:0387e8f68319 | 192 | const uint32_t __vector_handlers[] = { |
AnnaBridge | 187:0387e8f68319 | 193 | #endif |
AnnaBridge | 187:0387e8f68319 | 194 | |
AnnaBridge | 187:0387e8f68319 | 195 | /* Configure Initial Stack Pointer, using linker-generated symbols */ |
AnnaBridge | 187:0387e8f68319 | 196 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 187:0387e8f68319 | 197 | (uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit, |
AnnaBridge | 187:0387e8f68319 | 198 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 199 | //(uint32_t) __sfe("CSTACK"), |
AnnaBridge | 187:0387e8f68319 | 200 | (uint32_t) &CSTACK$$Limit, |
AnnaBridge | 187:0387e8f68319 | 201 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 202 | (uint32_t) &__StackTop, |
AnnaBridge | 187:0387e8f68319 | 203 | #endif |
AnnaBridge | 187:0387e8f68319 | 204 | |
AnnaBridge | 187:0387e8f68319 | 205 | (uint32_t) Reset_Handler, // Reset Handler |
AnnaBridge | 187:0387e8f68319 | 206 | (uint32_t) NMI_Handler, // NMI Handler |
AnnaBridge | 187:0387e8f68319 | 207 | (uint32_t) HardFault_Handler, // Hard Fault Handler |
AnnaBridge | 187:0387e8f68319 | 208 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 209 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 210 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 211 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 212 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 213 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 214 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 215 | (uint32_t) SVC_Handler, // SVCall Handler |
AnnaBridge | 187:0387e8f68319 | 216 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 217 | 0, // Reserved |
AnnaBridge | 187:0387e8f68319 | 218 | (uint32_t) PendSV_Handler, // PendSV Handler |
AnnaBridge | 187:0387e8f68319 | 219 | (uint32_t) SysTick_Handler, // SysTick Handler |
AnnaBridge | 187:0387e8f68319 | 220 | |
AnnaBridge | 187:0387e8f68319 | 221 | /* External Interrupts */ |
AnnaBridge | 187:0387e8f68319 | 222 | (uint32_t) BOD_IRQHandler, // 0: Brown Out detection |
AnnaBridge | 187:0387e8f68319 | 223 | (uint32_t) IRC_IRQHandler, // 1: Internal RC |
AnnaBridge | 187:0387e8f68319 | 224 | (uint32_t) PWRWU_IRQHandler, // 2: Power down wake up |
AnnaBridge | 187:0387e8f68319 | 225 | (uint32_t) SRAM_IRQHandler, // 3: |
AnnaBridge | 187:0387e8f68319 | 226 | (uint32_t) CLKFAIL_IRQHandler, // 4: Clock detection fail |
AnnaBridge | 187:0387e8f68319 | 227 | (uint32_t) Default_Handler, // 5: Reserved |
AnnaBridge | 187:0387e8f68319 | 228 | (uint32_t) RTC_IRQHandler, // 6: Real Time Clock |
AnnaBridge | 187:0387e8f68319 | 229 | (uint32_t) TAMPER_IRQHandler, // 7: Tamper detection |
AnnaBridge | 187:0387e8f68319 | 230 | (uint32_t) WDT_IRQHandler, // 8: Watchdog timer |
AnnaBridge | 187:0387e8f68319 | 231 | (uint32_t) WWDT_IRQHandler, // 9: Window watchdog timer |
AnnaBridge | 187:0387e8f68319 | 232 | (uint32_t) EINT0_IRQHandler, // 10: External Input 0 |
AnnaBridge | 187:0387e8f68319 | 233 | (uint32_t) EINT1_IRQHandler, // 11: External Input 1 |
AnnaBridge | 187:0387e8f68319 | 234 | (uint32_t) EINT2_IRQHandler, // 12: External Input 2 |
AnnaBridge | 187:0387e8f68319 | 235 | (uint32_t) EINT3_IRQHandler, // 13: External Input 3 |
AnnaBridge | 187:0387e8f68319 | 236 | (uint32_t) EINT4_IRQHandler, // 14: External Input 4 |
AnnaBridge | 187:0387e8f68319 | 237 | (uint32_t) EINT5_IRQHandler, // 15: External Input 5 |
AnnaBridge | 187:0387e8f68319 | 238 | (uint32_t) GPA_IRQHandler, // 16: GPIO Port A |
AnnaBridge | 187:0387e8f68319 | 239 | (uint32_t) GPB_IRQHandler, // 17: GPIO Port B |
AnnaBridge | 187:0387e8f68319 | 240 | (uint32_t) GPC_IRQHandler, // 18: GPIO Port C |
AnnaBridge | 187:0387e8f68319 | 241 | (uint32_t) GPD_IRQHandler, // 19: GPIO Port D |
AnnaBridge | 187:0387e8f68319 | 242 | (uint32_t) GPE_IRQHandler, // 20: GPIO Port E |
AnnaBridge | 187:0387e8f68319 | 243 | (uint32_t) GPF_IRQHandler, // 21: GPIO Port F |
AnnaBridge | 187:0387e8f68319 | 244 | (uint32_t) QSPI0_IRQHandler, // 22: QSPI0 |
AnnaBridge | 187:0387e8f68319 | 245 | (uint32_t) SPI0_IRQHandler, // 23: SPI0 |
AnnaBridge | 187:0387e8f68319 | 246 | (uint32_t) BRAKE0_IRQHandler, // 24: |
AnnaBridge | 187:0387e8f68319 | 247 | (uint32_t) EPWM0_P0_IRQHandler, // 25: |
AnnaBridge | 187:0387e8f68319 | 248 | (uint32_t) EPWM0_P1_IRQHandler, // 26: |
AnnaBridge | 187:0387e8f68319 | 249 | (uint32_t) EPWM0_P2_IRQHandler, // 27: |
AnnaBridge | 187:0387e8f68319 | 250 | (uint32_t) BRAKE1_IRQHandler, // 28: |
AnnaBridge | 187:0387e8f68319 | 251 | (uint32_t) EPWM1_P0_IRQHandler, // 29: |
AnnaBridge | 187:0387e8f68319 | 252 | (uint32_t) EPWM1_P1_IRQHandler, // 30: |
AnnaBridge | 187:0387e8f68319 | 253 | (uint32_t) EPWM1_P2_IRQHandler, // 31: |
AnnaBridge | 187:0387e8f68319 | 254 | (uint32_t) TMR0_IRQHandler, // 32: Timer 0 |
AnnaBridge | 187:0387e8f68319 | 255 | (uint32_t) TMR1_IRQHandler, // 33: Timer 1 |
AnnaBridge | 187:0387e8f68319 | 256 | (uint32_t) TMR2_IRQHandler, // 34: Timer 2 |
AnnaBridge | 187:0387e8f68319 | 257 | (uint32_t) TMR3_IRQHandler, // 35: Timer 3 |
AnnaBridge | 187:0387e8f68319 | 258 | (uint32_t) UART0_IRQHandler, // 36: UART0 |
AnnaBridge | 187:0387e8f68319 | 259 | (uint32_t) UART1_IRQHandler, // 37: UART1 |
AnnaBridge | 187:0387e8f68319 | 260 | (uint32_t) I2C0_IRQHandler, // 38: I2C0 |
AnnaBridge | 187:0387e8f68319 | 261 | (uint32_t) I2C1_IRQHandler, // 39: I2C1 |
AnnaBridge | 187:0387e8f68319 | 262 | (uint32_t) PDMA0_IRQHandler, // 40: Peripheral DMA |
AnnaBridge | 187:0387e8f68319 | 263 | (uint32_t) DAC_IRQHandler, // 41: DAC |
AnnaBridge | 187:0387e8f68319 | 264 | (uint32_t) EADC0_IRQHandler, // 42: ADC0 interrupt source 0 |
AnnaBridge | 187:0387e8f68319 | 265 | (uint32_t) EADC1_IRQHandler, // 43: ADC0 interrupt source 1 |
AnnaBridge | 187:0387e8f68319 | 266 | (uint32_t) ACMP01_IRQHandler, // 44: ACMP0 and ACMP1 |
AnnaBridge | 187:0387e8f68319 | 267 | (uint32_t) Default_Handler, // 45: Reserved |
AnnaBridge | 187:0387e8f68319 | 268 | (uint32_t) EADC2_IRQHandler, // 46: ADC0 interrupt source 2 |
AnnaBridge | 187:0387e8f68319 | 269 | (uint32_t) EADC3_IRQHandler, // 47: ADC0 interrupt source 3 |
AnnaBridge | 187:0387e8f68319 | 270 | (uint32_t) UART2_IRQHandler, // 48: UART2 |
AnnaBridge | 187:0387e8f68319 | 271 | (uint32_t) UART3_IRQHandler, // 49: UART3 |
AnnaBridge | 187:0387e8f68319 | 272 | (uint32_t) Default_Handler, // 50: Reserved |
AnnaBridge | 187:0387e8f68319 | 273 | (uint32_t) SPI1_IRQHandler, // 51: SPI1 |
AnnaBridge | 187:0387e8f68319 | 274 | (uint32_t) SPI2_IRQHandler, // 52: SPI2 |
AnnaBridge | 187:0387e8f68319 | 275 | (uint32_t) USBD_IRQHandler, // 53: USB device |
AnnaBridge | 187:0387e8f68319 | 276 | (uint32_t) USBH_IRQHandler, // 54: USB host |
AnnaBridge | 187:0387e8f68319 | 277 | (uint32_t) USBOTG_IRQHandler, // 55: USB OTG |
AnnaBridge | 187:0387e8f68319 | 278 | (uint32_t) CAN0_IRQHandler, // 56: CAN0 |
AnnaBridge | 187:0387e8f68319 | 279 | (uint32_t) Default_Handler, // 57: Reserved |
AnnaBridge | 187:0387e8f68319 | 280 | (uint32_t) SC0_IRQHandler, // 58: |
AnnaBridge | 187:0387e8f68319 | 281 | (uint32_t) SC1_IRQHandler, // 59: |
AnnaBridge | 187:0387e8f68319 | 282 | (uint32_t) SC2_IRQHandler, // 60: |
AnnaBridge | 187:0387e8f68319 | 283 | (uint32_t) Default_Handler, // 61: Reserved. |
AnnaBridge | 187:0387e8f68319 | 284 | (uint32_t) SPI3_IRQHandler, // 62: |
AnnaBridge | 187:0387e8f68319 | 285 | (uint32_t) Default_Handler, // 63: |
AnnaBridge | 187:0387e8f68319 | 286 | (uint32_t) SDH0_IRQHandler, // 64: |
AnnaBridge | 187:0387e8f68319 | 287 | (uint32_t) Default_Handler, // 65: |
AnnaBridge | 187:0387e8f68319 | 288 | (uint32_t) Default_Handler, // 66: |
AnnaBridge | 187:0387e8f68319 | 289 | (uint32_t) Default_Handler, // 67: |
AnnaBridge | 187:0387e8f68319 | 290 | (uint32_t) I2S0_IRQHandler, // 68: |
AnnaBridge | 187:0387e8f68319 | 291 | (uint32_t) Default_Handler, // 69: |
AnnaBridge | 187:0387e8f68319 | 292 | (uint32_t) OPA0_IRQHandler, // 70: |
AnnaBridge | 187:0387e8f68319 | 293 | (uint32_t) CRPT_IRQHandler, // 71: |
AnnaBridge | 187:0387e8f68319 | 294 | (uint32_t) GPG_IRQHandler, // 72: |
AnnaBridge | 187:0387e8f68319 | 295 | (uint32_t) EINT6_IRQHandler, // 73: |
AnnaBridge | 187:0387e8f68319 | 296 | (uint32_t) UART4_IRQHandler, // 74: |
AnnaBridge | 187:0387e8f68319 | 297 | (uint32_t) UART5_IRQHandler, // 75: |
AnnaBridge | 187:0387e8f68319 | 298 | (uint32_t) USCI0_IRQHandler, // 76: |
AnnaBridge | 187:0387e8f68319 | 299 | (uint32_t) USCI1_IRQHandler, // 77: |
AnnaBridge | 187:0387e8f68319 | 300 | (uint32_t) BPWM0_IRQHandler, // 78: |
AnnaBridge | 187:0387e8f68319 | 301 | (uint32_t) BPWM1_IRQHandler, // 79: |
AnnaBridge | 187:0387e8f68319 | 302 | (uint32_t) Default_Handler, // 80: |
AnnaBridge | 187:0387e8f68319 | 303 | (uint32_t) Default_Handler, // 81: |
AnnaBridge | 187:0387e8f68319 | 304 | (uint32_t) I2C2_IRQHandler, // 82: |
AnnaBridge | 187:0387e8f68319 | 305 | (uint32_t) Default_Handler, // 83: |
AnnaBridge | 187:0387e8f68319 | 306 | (uint32_t) QEI0_IRQHandler, // 84: |
AnnaBridge | 187:0387e8f68319 | 307 | (uint32_t) QEI1_IRQHandler, // 85: |
AnnaBridge | 187:0387e8f68319 | 308 | (uint32_t) ECAP0_IRQHandler, // 86: |
AnnaBridge | 187:0387e8f68319 | 309 | (uint32_t) ECAP1_IRQHandler, // 87: |
AnnaBridge | 187:0387e8f68319 | 310 | (uint32_t) GPH_IRQHandler, // 88: |
AnnaBridge | 187:0387e8f68319 | 311 | (uint32_t) EINT7_IRQHandler, // 89: |
AnnaBridge | 187:0387e8f68319 | 312 | (uint32_t) Default_Handler, // 90: |
AnnaBridge | 187:0387e8f68319 | 313 | (uint32_t) Default_Handler, // 91: |
AnnaBridge | 187:0387e8f68319 | 314 | (uint32_t) Default_Handler, // 92: |
AnnaBridge | 187:0387e8f68319 | 315 | (uint32_t) Default_Handler, // 93: |
AnnaBridge | 187:0387e8f68319 | 316 | (uint32_t) Default_Handler, // 94: |
AnnaBridge | 187:0387e8f68319 | 317 | (uint32_t) Default_Handler, // 95: |
AnnaBridge | 187:0387e8f68319 | 318 | (uint32_t) SPI5_IRQHandler, // 96: |
AnnaBridge | 187:0387e8f68319 | 319 | (uint32_t) DSRC_IRQHandler, // 97: |
AnnaBridge | 187:0387e8f68319 | 320 | (uint32_t) PDMA1_IRQHandler, // 98: |
AnnaBridge | 187:0387e8f68319 | 321 | (uint32_t) SCU_IRQHandler, // 99: |
AnnaBridge | 187:0387e8f68319 | 322 | (uint32_t) Default_Handler, // 100: |
AnnaBridge | 187:0387e8f68319 | 323 | (uint32_t) TRNG_IRQHandler, // 101: |
AnnaBridge | 187:0387e8f68319 | 324 | }; |
AnnaBridge | 187:0387e8f68319 | 325 | |
AnnaBridge | 187:0387e8f68319 | 326 | /** |
AnnaBridge | 187:0387e8f68319 | 327 | * \brief This is the code that gets called on processor reset. |
AnnaBridge | 187:0387e8f68319 | 328 | */ |
AnnaBridge | 187:0387e8f68319 | 329 | void Reset_Handler(void) |
AnnaBridge | 187:0387e8f68319 | 330 | { |
AnnaBridge | 187:0387e8f68319 | 331 | #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) |
AnnaBridge | 187:0387e8f68319 | 332 | /* Disable register write-protection function */ |
AnnaBridge | 187:0387e8f68319 | 333 | SYS_UnlockReg(); |
AnnaBridge | 187:0387e8f68319 | 334 | |
AnnaBridge | 187:0387e8f68319 | 335 | /* Disable Power-on Reset function */ |
AnnaBridge | 187:0387e8f68319 | 336 | SYS_DISABLE_POR(); |
AnnaBridge | 187:0387e8f68319 | 337 | |
AnnaBridge | 187:0387e8f68319 | 338 | /* Enable register write-protection function */ |
AnnaBridge | 187:0387e8f68319 | 339 | SYS_LockReg(); |
AnnaBridge | 187:0387e8f68319 | 340 | #endif |
AnnaBridge | 187:0387e8f68319 | 341 | |
AnnaBridge | 187:0387e8f68319 | 342 | /** |
AnnaBridge | 187:0387e8f68319 | 343 | * SystemInit() must be called at the very start. |
AnnaBridge | 187:0387e8f68319 | 344 | */ |
AnnaBridge | 187:0387e8f68319 | 345 | SystemInit(); |
AnnaBridge | 187:0387e8f68319 | 346 | |
AnnaBridge | 187:0387e8f68319 | 347 | #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) |
AnnaBridge | 187:0387e8f68319 | 348 | __main(); |
AnnaBridge | 187:0387e8f68319 | 349 | |
AnnaBridge | 187:0387e8f68319 | 350 | #elif defined(__ICCARM__) |
AnnaBridge | 187:0387e8f68319 | 351 | __iar_program_start(); |
AnnaBridge | 187:0387e8f68319 | 352 | |
AnnaBridge | 187:0387e8f68319 | 353 | #elif defined(__GNUC__) |
AnnaBridge | 187:0387e8f68319 | 354 | uint32_t *src_ind = (uint32_t *) &__etext; |
AnnaBridge | 187:0387e8f68319 | 355 | uint32_t *dst_ind = (uint32_t *) &__data_start__; |
AnnaBridge | 187:0387e8f68319 | 356 | uint32_t *dst_end = (uint32_t *) &__data_end__; |
AnnaBridge | 187:0387e8f68319 | 357 | |
AnnaBridge | 187:0387e8f68319 | 358 | /* Move .data section from ROM to RAM */ |
AnnaBridge | 187:0387e8f68319 | 359 | if (src_ind != dst_ind) { |
AnnaBridge | 187:0387e8f68319 | 360 | for (; dst_ind < dst_end;) { |
AnnaBridge | 187:0387e8f68319 | 361 | *dst_ind ++ = *src_ind ++; |
AnnaBridge | 187:0387e8f68319 | 362 | } |
AnnaBridge | 187:0387e8f68319 | 363 | } |
AnnaBridge | 187:0387e8f68319 | 364 | |
AnnaBridge | 187:0387e8f68319 | 365 | /* Initialize .bss section to zero */ |
AnnaBridge | 187:0387e8f68319 | 366 | dst_ind = (uint32_t *) &__bss_start__; |
AnnaBridge | 187:0387e8f68319 | 367 | dst_end = (uint32_t *) &__bss_end__; |
AnnaBridge | 187:0387e8f68319 | 368 | if (dst_ind != dst_end) { |
AnnaBridge | 187:0387e8f68319 | 369 | for (; dst_ind < dst_end;) { |
AnnaBridge | 187:0387e8f68319 | 370 | *dst_ind ++ = 0; |
AnnaBridge | 187:0387e8f68319 | 371 | } |
AnnaBridge | 187:0387e8f68319 | 372 | } |
AnnaBridge | 187:0387e8f68319 | 373 | |
AnnaBridge | 187:0387e8f68319 | 374 | _start(); |
AnnaBridge | 187:0387e8f68319 | 375 | |
AnnaBridge | 187:0387e8f68319 | 376 | #endif |
AnnaBridge | 187:0387e8f68319 | 377 | |
AnnaBridge | 187:0387e8f68319 | 378 | /* Infinite loop */ |
AnnaBridge | 187:0387e8f68319 | 379 | while (1); |
AnnaBridge | 187:0387e8f68319 | 380 | } |
AnnaBridge | 187:0387e8f68319 | 381 | |
AnnaBridge | 187:0387e8f68319 | 382 | /** |
AnnaBridge | 187:0387e8f68319 | 383 | * \brief Default interrupt handler for unused IRQs. |
AnnaBridge | 187:0387e8f68319 | 384 | */ |
AnnaBridge | 187:0387e8f68319 | 385 | void Default_Handler(void) |
AnnaBridge | 187:0387e8f68319 | 386 | { |
AnnaBridge | 187:0387e8f68319 | 387 | while (1); |
AnnaBridge | 187:0387e8f68319 | 388 | } |
AnnaBridge | 187:0387e8f68319 | 389 | |
AnnaBridge | 187:0387e8f68319 | 390 | #if 0 |
AnnaBridge | 187:0387e8f68319 | 391 | #if defined(__CC_ARM) |
AnnaBridge | 187:0387e8f68319 | 392 | uint32_t GetPC(void) |
AnnaBridge | 187:0387e8f68319 | 393 | { |
AnnaBridge | 187:0387e8f68319 | 394 | uint32_t val=0; |
AnnaBridge | 187:0387e8f68319 | 395 | __asm { |
AnnaBridge | 187:0387e8f68319 | 396 | MOV R0, #0 // dumy |
AnnaBridge | 187:0387e8f68319 | 397 | //MOV R0, LR // Except R0~R12, SP/LR/PC cannot be read or directly modified in inline assembly code |
AnnaBridge | 187:0387e8f68319 | 398 | MOV val, R0 |
AnnaBridge | 187:0387e8f68319 | 399 | } |
AnnaBridge | 187:0387e8f68319 | 400 | return val; |
AnnaBridge | 187:0387e8f68319 | 401 | } |
AnnaBridge | 187:0387e8f68319 | 402 | #endif |
AnnaBridge | 187:0387e8f68319 | 403 | #endif |