X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fcommon%2Fstartup.c;fp=src%2Fcommon%2Fstartup.c;h=daa8906c38f1c36fa7f8127095772bf2cc168791;hb=d899a72babb4c2d80fe6e46a77e570864218b46f;hp=0000000000000000000000000000000000000000;hpb=692c77cbd8154af6c12881f885827a4187b0fb06;p=gps-watch.git diff --git a/src/common/startup.c b/src/common/startup.c new file mode 100644 index 0000000..daa8906 --- /dev/null +++ b/src/common/startup.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2019 Tilman Sauerbeck (tilman at code-monkey de) + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include + +void Reset_Handler (void); +void NMI_Handler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Dummy_Handler"))); + +void DMA0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void DMA1_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void DMA2_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void DMA3_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void FTFA_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void PMC_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void LLWU_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void I2C0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void I2C1_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void SPI0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void SPI1_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void UART0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void UART1_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void UART2_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void ADC0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void CMP0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void TPM0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void TPM1_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void TPM2_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void RTC_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void RTC_Seconds_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void PIT_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void I2S0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void USB0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void DAC0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void TSI0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void MCG_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void LPTMR0_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void PORTA_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); +void PORTC_PORTD_IRQHandler (void) __attribute__ ((weak, alias("Dummy_Handler"))); + +extern void _start (void) __attribute__((noreturn)); + +extern uint32_t __etext; +extern uint32_t __data_start__; +extern uint32_t __data_end__; +extern uint32_t __bss_start__; +extern uint32_t __bss_end__; +extern uint32_t __StackTop; + +__attribute__ ((section(".vectors"))) +const void * __Vectors[48] = +{ + &__StackTop, /* Initial stack pointer */ + + (void *) Reset_Handler, + (void *) NMI_Handler, + (void *) HardFault_Handler, + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) SVC_Handler, + (void *) (0UL), /* Reserved */ + (void *) (0UL), /* Reserved */ + (void *) PendSV_Handler, + (void *) SysTick_Handler, + + (void *) DMA0_IRQHandler, + (void *) DMA1_IRQHandler, + (void *) DMA2_IRQHandler, + (void *) DMA3_IRQHandler, + (void *) (0UL), /* Reserved */ + (void *) FTFA_IRQHandler, + (void *) PMC_IRQHandler, + (void *) LLWU_IRQHandler, + (void *) I2C0_IRQHandler, + (void *) I2C1_IRQHandler, + (void *) SPI0_IRQHandler, + (void *) SPI1_IRQHandler, + (void *) UART0_IRQHandler, + (void *) UART1_IRQHandler, + (void *) UART2_IRQHandler, + (void *) ADC0_IRQHandler, + (void *) CMP0_IRQHandler, + (void *) TPM0_IRQHandler, + (void *) TPM1_IRQHandler, + (void *) TPM2_IRQHandler, + (void *) RTC_IRQHandler, + (void *) RTC_Seconds_IRQHandler, + (void *) PIT_IRQHandler, + (void *) I2S0_IRQHandler, + (void *) USB0_IRQHandler, + (void *) DAC0_IRQHandler, + (void *) TSI0_IRQHandler, + (void *) MCG_IRQHandler, + (void *) LPTMR0_IRQHandler, + (void *) (0UL), /* Reserved */ + (void *) PORTA_IRQHandler, + (void *) PORTC_PORTD_IRQHandler, +}; + +void +Reset_Handler (void) +{ + uint32_t *src, *dst; + + src = &__etext; + dst = &__data_start__; + + /* Initialize data. */ + while (dst < &__data_end__) + *dst++ = *src++; + + /* Clear bss. */ + for (dst = &__bss_start__; dst < &__bss_end__; dst++) + *dst = 0; + + _start(); +} + +void +Dummy_Handler (void) +{ + for (;;) { + } +}