#include #include #include "cmsis.h" // Linker Script extern unsigned long _estack; extern char __S_romp[]; extern char __START_BSS[]; extern char __END_BSS[]; // CRT0 extern void __init_registers(); extern void __copy_rom_sections_to_ram(void); extern void __call_static_initializers(void); extern void __init_user(); // User/mbed Defined extern int main(); extern void mbed_exit(int return_code); void _ExitProcess(int return_code) { mbed_exit(return_code); } void __thumb_startup(void) { // Setup registers __init_registers(); // Disable the Watchdog because it may reset the core before entering main(). SIM->COPC = 0x0; // zero-fill the .bss section memset(__START_BSS, 0, (__END_BSS - __START_BSS)); if (__S_romp != 0L) __copy_rom_sections_to_ram(); // call C++ static initializers __call_static_initializers(); // initializations before main, user specific __init_user(); exit(main()); // should never get here while (1); } void Default_Handler() { __asm("bkpt"); } /* Weak definitions of handlers point to Default_Handler if not implemented */ void NMI_Handler() __attribute__ ((weak, alias("Default_Handler"))); void HardFault_Handler() __attribute__ ((weak, alias("Default_Handler"))); void SVC_Handler() __attribute__ ((weak, alias("Default_Handler"))); void PendSV_Handler() __attribute__ ((weak, alias("Default_Handler"))); void SysTick_Handler() __attribute__ ((weak, alias("Default_Handler"))); void DMA0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void DMA1_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void DMA2_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void DMA3_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void MCM_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void FTFL_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void PMC_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void LLW_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void I2C0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void I2C1_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void SPI0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void SPI1_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void UART0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void UART1_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void UART2_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void ADC0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void CMP0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void FTM0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void FTM1_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void FTM2_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void RTC_Alarm_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void RTC_Seconds_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void PIT_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void USBOTG_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void DAC0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void TSI0_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void MCG_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void LPTimer_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void PORTA_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); void PORTD_IRQHandler() __attribute__ ((weak, alias("Default_Handler"))); /* The Interrupt Vector Table */ void (* const InterruptVector[])() __attribute__ ((section(".vectortable"))) = { /* Processor exceptions */ (void(*)(void)) &_estack, __thumb_startup, NMI_Handler, HardFault_Handler, 0, 0, 0, 0, 0, 0, 0, SVC_Handler, 0, 0, PendSV_Handler, SysTick_Handler, /* Interrupts */ DMA0_IRQHandler, /* DMA Channel 0 Transfer Complete and Error */ DMA1_IRQHandler, /* DMA Channel 1 Transfer Complete and Error */ DMA2_IRQHandler, /* DMA Channel 2 Transfer Complete and Error */ DMA3_IRQHandler, /* DMA Channel 3 Transfer Complete and Error */ MCM_IRQHandler, /* Normal Interrupt */ FTFL_IRQHandler, /* FTFL Interrupt */ PMC_IRQHandler, /* PMC Interrupt */ LLW_IRQHandler, /* Low Leakage Wake-up */ I2C0_IRQHandler, /* I2C0 interrupt */ I2C1_IRQHandler, /* I2C1 interrupt */ SPI0_IRQHandler, /* SPI0 Interrupt */ SPI1_IRQHandler, /* SPI1 Interrupt */ UART0_IRQHandler, /* UART0 Status and Error interrupt */ UART1_IRQHandler, /* UART1 Status and Error interrupt */ UART2_IRQHandler, /* UART2 Status and Error interrupt */ ADC0_IRQHandler, /* ADC0 interrupt */ CMP0_IRQHandler, /* CMP0 interrupt */ FTM0_IRQHandler, /* FTM0 fault, overflow and channels interrupt */ FTM1_IRQHandler, /* FTM1 fault, overflow and channels interrupt */ FTM2_IRQHandler, /* FTM2 fault, overflow and channels interrupt */ RTC_Alarm_IRQHandler, /* RTC Alarm interrupt */ RTC_Seconds_IRQHandler, /* RTC Seconds interrupt */ PIT_IRQHandler, /* PIT timer all channels interrupt */ Default_Handler, /* Reserved interrupt 39/23 */ USBOTG_IRQHandler, /* USB interrupt */ DAC0_IRQHandler, /* DAC0 interrupt */ TSI0_IRQHandler, /* TSI0 Interrupt */ MCG_IRQHandler, /* MCG Interrupt */ LPTimer_IRQHandler, /* LPTimer interrupt */ Default_Handler, /* Reserved interrupt 45/29 */ PORTA_IRQHandler, /* Port A interrupt */ PORTD_IRQHandler /* Port D interrupt */ };