mbed library sources
Fork of mbed-src by
Diff: targets/cmsis/TARGET_Freescale/TARGET_KL25Z/TOOLCHAIN_GCC_CW_EWL/startup_MKL25Z4.c
- Revision:
- 13:0645d8841f51
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/cmsis/TARGET_Freescale/TARGET_KL25Z/TOOLCHAIN_GCC_CW_EWL/startup_MKL25Z4.c Mon Aug 05 14:12:34 2013 +0300 @@ -0,0 +1,147 @@ +#include <string.h> +#include <stdlib.h> + +#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 */ +};