mbed library sources

Dependents:   Marvino mbot

Fork of mbed-src by mbed official

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 */
+};