blob: 085c85a3f6f7967f091cdd99c0c00d076636cef0 [file] [log] [blame]
/**************************************************************************//**
* File : startup_efm32x.s
*
* Abstract : This file contains interrupt vector and startup code.
*
* Functions : Reset_Handler
*
* Target : Silicon Labs EFM32WG devices.
*
* Environment : Atollic TrueSTUDIO(R)
*
* Distribution: The file is distributed "as is," without any warranty
* of any kind.
*
* (c)Copyright Atollic AB.
* You may use this file as-is or modify it according to the needs of your
* project. This file may only be built (assembled or compiled and linked)
* using the Atollic TrueSTUDIO(R) product. The use of this file together
* with other tools than Atollic TrueSTUDIO(R) is not permitted.
*
*******************************************************************************
* Silicon Labs release version
* @version 5.1.2
******************************************************************************/
.syntax unified
.thumb
.global Reset_Handler
.global InterruptVector
.global Default_Handler
/* Linker script definitions */
/* start address for the initialization values of the .data section */
.word _sidata
/* start address for the .data section */
.word _sdata
/* end address for the .data section */
.word _edata
/* start address for the .bss section */
.word _sbss
/* end address for the .bss section */
.word _ebss
/**
**===========================================================================
** Program - Reset_Handler
** Abstract: This code gets called after reset.
**===========================================================================
*/
.section .text.Reset_Handler,"ax", %progbits
.type Reset_Handler, %function
Reset_Handler:
/* Set stack pointer */
ldr sp,=_estack
/* Branch to SystemInit function */
bl SystemInit
/* Copy data initialization values */
ldr r1,=_sidata
ldr r2,=_sdata
ldr r3,=_edata
b cmpdata
CopyLoop:
ldr r0, [r1], #4
str r0, [r2], #4
cmpdata:
cmp r2, r3
blt CopyLoop
/* Clear BSS section */
movs r0, #0
ldr r2,=_sbss
ldr r3,=_ebss
b cmpbss
ClearLoop:
str r0, [r2], #4
cmpbss:
cmp r2, r3
blt ClearLoop
/* Call static constructors */
bl __libc_init_array
/* Branch to main */
bl main
/* If main returns, branch to Default_Handler. */
b Default_Handler
.size Reset_Handler, .-Reset_Handler
/**
**===========================================================================
** Program - Default_Handler
** Abstract: This code gets called when the processor receives an
** unexpected interrupt.
**===========================================================================
*/
.section .text.Default_Handler,"ax", %progbits
Default_Handler:
b Default_Handler
.size Default_Handler, .-Default_Handler
/**
**===========================================================================
** Interrupt vector table
**===========================================================================
*/
.section .isr_vector,"a", %progbits
InterruptVector:
.word _estack /* 0 - Stack pointer */
.word Reset_Handler /* 1 - Reset */
.word NMI_Handler /* 2 - NMI */
.word HardFault_Handler /* 3 - Hard fault */
.word MemManage_Handler /* 4 - Memory management fault */
.word BusFault_Handler /* 5 - Bus fault */
.word UsageFault_Handler /* 6 - Usage fault */
.word 0 /* 7 - Reserved */
.word 0 /* 8 - Reserved */
.word 0 /* 9 - Reserved */
.word 0 /* 10 - Reserved */
.word SVC_Handler /* 11 - SVCall */
.word DebugMonitor_Handler /* 12 - Reserved for Debug */
.word 0 /* 13 - Reserved */
.word PendSV_Handler /* 14 - PendSV */
.word SysTick_Handler /* 15 - Systick */
/* External Interrupts */
.word DMA_IRQHandler /* 0 - DMA */
.word GPIO_EVEN_IRQHandler /* 1 - GPIO_EVEN */
.word TIMER0_IRQHandler /* 2 - TIMER0 */
.word USART0_RX_IRQHandler /* 3 - USART0_RX */
.word USART0_TX_IRQHandler /* 4 - USART0_TX */
.word USB_IRQHandler /* 5 - USB */
.word ACMP0_IRQHandler /* 6 - ACMP0 */
.word ADC0_IRQHandler /* 7 - ADC0 */
.word DAC0_IRQHandler /* 8 - DAC0 */
.word I2C0_IRQHandler /* 9 - I2C0 */
.word I2C1_IRQHandler /* 10 - I2C1 */
.word GPIO_ODD_IRQHandler /* 11 - GPIO_ODD */
.word TIMER1_IRQHandler /* 12 - TIMER1 */
.word TIMER2_IRQHandler /* 13 - TIMER2 */
.word TIMER3_IRQHandler /* 14 - TIMER3 */
.word USART1_RX_IRQHandler /* 15 - USART1_RX */
.word USART1_TX_IRQHandler /* 16 - USART1_TX */
.word LESENSE_IRQHandler /* 17 - LESENSE */
.word USART2_RX_IRQHandler /* 18 - USART2_RX */
.word USART2_TX_IRQHandler /* 19 - USART2_TX */
.word UART0_RX_IRQHandler /* 20 - UART0_RX */
.word UART0_TX_IRQHandler /* 21 - UART0_TX */
.word UART1_RX_IRQHandler /* 22 - UART1_RX */
.word UART1_TX_IRQHandler /* 23 - UART1_TX */
.word LEUART0_IRQHandler /* 24 - LEUART0 */
.word LEUART1_IRQHandler /* 25 - LEUART1 */
.word LETIMER0_IRQHandler /* 26 - LETIMER0 */
.word PCNT0_IRQHandler /* 27 - PCNT0 */
.word PCNT1_IRQHandler /* 28 - PCNT1 */
.word PCNT2_IRQHandler /* 29 - PCNT2 */
.word RTC_IRQHandler /* 30 - RTC */
.word BURTC_IRQHandler /* 31 - BURTC */
.word CMU_IRQHandler /* 32 - CMU */
.word VCMP_IRQHandler /* 33 - VCMP */
.word LCD_IRQHandler /* 34 - LCD */
.word MSC_IRQHandler /* 35 - MSC */
.word AES_IRQHandler /* 36 - AES */
.word EBI_IRQHandler /* 37 - EBI */
.word EMU_IRQHandler /* 38 - EMU */
.word FPUEH_IRQHandler /* 39 - FPUEH */
/**
**===========================================================================
** Weak interrupt handlers redirected to Default_Handler. These can be
** overridden in user code.
**===========================================================================
*/
.weak NMI_Handler
.thumb_set NMI_Handler, Default_Handler
.weak HardFault_Handler
.thumb_set HardFault_Handler, Default_Handler
.weak MemManage_Handler
.thumb_set MemManage_Handler, Default_Handler
.weak BusFault_Handler
.thumb_set BusFault_Handler, Default_Handler
.weak UsageFault_Handler
.thumb_set UsageFault_Handler, Default_Handler
.weak SVC_Handler
.thumb_set SVC_Handler, Default_Handler
.weak DebugMonitor_Handler
.thumb_set DebugMonitor_Handler, Default_Handler
.weak PendSV_Handler
.thumb_set PendSV_Handler, Default_Handler
.weak SysTick_Handler
.thumb_set SysTick_Handler, Default_Handler
.weak DMA_IRQHandler
.thumb_set DMA_IRQHandler, Default_Handler
.weak GPIO_EVEN_IRQHandler
.thumb_set GPIO_EVEN_IRQHandler, Default_Handler
.weak TIMER0_IRQHandler
.thumb_set TIMER0_IRQHandler, Default_Handler
.weak USART0_RX_IRQHandler
.thumb_set USART0_RX_IRQHandler, Default_Handler
.weak USART0_TX_IRQHandler
.thumb_set USART0_TX_IRQHandler, Default_Handler
.weak USB_IRQHandler
.thumb_set USB_IRQHandler, Default_Handler
.weak ACMP0_IRQHandler
.thumb_set ACMP0_IRQHandler, Default_Handler
.weak ADC0_IRQHandler
.thumb_set ADC0_IRQHandler, Default_Handler
.weak DAC0_IRQHandler
.thumb_set DAC0_IRQHandler, Default_Handler
.weak I2C0_IRQHandler
.thumb_set I2C0_IRQHandler, Default_Handler
.weak I2C1_IRQHandler
.thumb_set I2C1_IRQHandler, Default_Handler
.weak GPIO_ODD_IRQHandler
.thumb_set GPIO_ODD_IRQHandler, Default_Handler
.weak TIMER1_IRQHandler
.thumb_set TIMER1_IRQHandler, Default_Handler
.weak TIMER2_IRQHandler
.thumb_set TIMER2_IRQHandler, Default_Handler
.weak TIMER3_IRQHandler
.thumb_set TIMER3_IRQHandler, Default_Handler
.weak USART1_RX_IRQHandler
.thumb_set USART1_RX_IRQHandler, Default_Handler
.weak USART1_TX_IRQHandler
.thumb_set USART1_TX_IRQHandler, Default_Handler
.weak LESENSE_IRQHandler
.thumb_set LESENSE_IRQHandler, Default_Handler
.weak USART2_RX_IRQHandler
.thumb_set USART2_RX_IRQHandler, Default_Handler
.weak USART2_TX_IRQHandler
.thumb_set USART2_TX_IRQHandler, Default_Handler
.weak UART0_RX_IRQHandler
.thumb_set UART0_RX_IRQHandler, Default_Handler
.weak UART0_TX_IRQHandler
.thumb_set UART0_TX_IRQHandler, Default_Handler
.weak UART1_RX_IRQHandler
.thumb_set UART1_RX_IRQHandler, Default_Handler
.weak UART1_TX_IRQHandler
.thumb_set UART1_TX_IRQHandler, Default_Handler
.weak LEUART0_IRQHandler
.thumb_set LEUART0_IRQHandler, Default_Handler
.weak LEUART1_IRQHandler
.thumb_set LEUART1_IRQHandler, Default_Handler
.weak LETIMER0_IRQHandler
.thumb_set LETIMER0_IRQHandler, Default_Handler
.weak PCNT0_IRQHandler
.thumb_set PCNT0_IRQHandler, Default_Handler
.weak PCNT1_IRQHandler
.thumb_set PCNT1_IRQHandler, Default_Handler
.weak PCNT2_IRQHandler
.thumb_set PCNT2_IRQHandler, Default_Handler
.weak RTC_IRQHandler
.thumb_set RTC_IRQHandler, Default_Handler
.weak BURTC_IRQHandler
.thumb_set BURTC_IRQHandler, Default_Handler
.weak CMU_IRQHandler
.thumb_set CMU_IRQHandler, Default_Handler
.weak VCMP_IRQHandler
.thumb_set VCMP_IRQHandler, Default_Handler
.weak LCD_IRQHandler
.thumb_set LCD_IRQHandler, Default_Handler
.weak MSC_IRQHandler
.thumb_set MSC_IRQHandler, Default_Handler
.weak AES_IRQHandler
.thumb_set AES_IRQHandler, Default_Handler
.weak EBI_IRQHandler
.thumb_set EBI_IRQHandler, Default_Handler
.weak EMU_IRQHandler
.thumb_set EMU_IRQHandler, Default_Handler
.weak FPUEH_IRQHandler
.thumb_set FPUEH_IRQHandler, Default_Handler
.end