blob: ff927d543d22889a10037c51384573b1b8d7729f [file] [log] [blame]
/*******************************************************************************
* (c) Copyright 2012-2013 Microsemi SoC Products Group. All rights reserved.
*
* SmartFusion2 vector table and startup code for CodeSourcery G++.
*
* SVN $Revision: 5269 $
* SVN $Date: 2013-03-21 20:53:38 +0000 (Thu, 21 Mar 2013) $
*/
.syntax unified
.cpu cortex-m3
.thumb
/*==============================================================================
* Vector table
*/
.global g_pfnVectors
.section .isr_vector,"a",%progbits
.type g_pfnVectors, %object
.size g_pfnVectors, .-g_pfnVectors
g_pfnVectors:
.word _estack
.word Reset_Handler
.word NMI_Handler
.word HardFault_Handler
.word MemManage_Handler
.word BusFault_Handler
.word UsageFault_Handler
.word 0
.word 0
.word 0
.word 0
.word SVC_Handler
.word DebugMon_Handler
.word 0
.word PendSV_Handler
.word SysTick_Handler
.word WdogWakeup_IRQHandler
.word RTC_Wakeup_IRQHandler
.word SPI0_IRQHandler
.word SPI1_IRQHandler
.word I2C0_IRQHandler
.word I2C0_SMBAlert_IRQHandler
.word I2C0_SMBus_IRQHandler
.word I2C1_IRQHandler
.word I2C1_SMBAlert_IRQHandler
.word I2C1_SMBus_IRQHandler
.word UART0_IRQHandler
.word UART1_IRQHandler
.word EthernetMAC_IRQHandler
.word DMA_IRQHandler
.word Timer1_IRQHandler
.word Timer2_IRQHandler
.word CAN_IRQHandler
.word ENVM0_IRQHandler
.word ENVM1_IRQHandler
.word ComBlk_IRQHandler
.word USB_IRQHandler
.word USB_DMA_IRQHandler
.word PLL_Lock_IRQHandler
.word PLL_LockLost_IRQHandler
.word CommSwitchError_IRQHandler
.word CacheError_IRQHandler
.word DDR_IRQHandler
.word HPDMA_Complete_IRQHandler
.word HPDMA_Error_IRQHandler
.word ECC_Error_IRQHandler
.word MDDR_IOCalib_IRQHandler
.word FAB_PLL_Lock_IRQHandler
.word FAB_PLL_LockLost_IRQHandler
.word FIC64_IRQHandler
.word FabricIrq0_IRQHandler
.word FabricIrq1_IRQHandler
.word FabricIrq2_IRQHandler
.word FabricIrq3_IRQHandler
.word FabricIrq4_IRQHandler
.word FabricIrq5_IRQHandler
.word FabricIrq6_IRQHandler
.word FabricIrq7_IRQHandler
.word FabricIrq8_IRQHandler
.word FabricIrq9_IRQHandler
.word FabricIrq10_IRQHandler
.word FabricIrq11_IRQHandler
.word FabricIrq12_IRQHandler
.word FabricIrq13_IRQHandler
.word FabricIrq14_IRQHandler
.word FabricIrq15_IRQHandler
.word GPIO0_IRQHandler
.word GPIO1_IRQHandler
.word GPIO2_IRQHandler
.word GPIO3_IRQHandler
.word GPIO4_IRQHandler
.word GPIO5_IRQHandler
.word GPIO6_IRQHandler
.word GPIO7_IRQHandler
.word GPIO8_IRQHandler
.word GPIO9_IRQHandler
.word GPIO10_IRQHandler
.word GPIO11_IRQHandler
.word GPIO12_IRQHandler
.word GPIO13_IRQHandler
.word GPIO14_IRQHandler
.word GPIO15_IRQHandler
.word GPIO16_IRQHandler
.word GPIO17_IRQHandler
.word GPIO18_IRQHandler
.word GPIO19_IRQHandler
.word GPIO20_IRQHandler
.word GPIO21_IRQHandler
.word GPIO22_IRQHandler
.word GPIO23_IRQHandler
.word GPIO24_IRQHandler
.word GPIO25_IRQHandler
.word GPIO26_IRQHandler
.word GPIO27_IRQHandler
.word GPIO28_IRQHandler
.word GPIO29_IRQHandler
.word GPIO30_IRQHandler
.word GPIO31_IRQHandler
/*==============================================================================
* Reset_Handler
*/
.global Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
_start:
/*------------------------------------------------------------------------------
* Call CMSIS system init function.
*/
ldr r0, =SystemInit
blx r0
/*------------------------------------------------------------------------------
* Check if the executable is built for NVM LMA mirrored to VMA address.
* This is done for debugging executables running out of eNVM with SoftConsole.
* The .text section should not be copied in this case since both the LMA and
* VMA point at the eNVM despite the LMA and VMa having different values.
*/
ldr r0, =__mirrored_nvm
cmp r0, #0
bne copy_data
/*------------------------------------------------------------------------------
* Copy code section.
*/
ldr r0, =__text_load
ldr r1, =__text_start
ldr r2, =_etext
cmp r0, r1
beq copy_data
copy_code_loop:
cmp r1, r2
itt ne
ldrne r3, [r0], #4
strne r3, [r1], #4
bne copy_code_loop
/*------------------------------------------------------------------------------
* Copy data section.
*/
copy_data:
ldr r0, =__data_load
ldr r1, =__data_start
ldr r2, =_edata
cmp r0, r1
beq clear_bss
copy_data_loop:
cmp r1, r2
itt ne
ldrne r3, [r0], #4
strne r3, [r1], #4
bne copy_data_loop
/*------------------------------------------------------------------------------
* Clear .bss
*/
clear_bss:
ldr r0, =0
ldr r1, =__bss_start__
ldr r2, =__bss_end__
clear_bss_loop:
cmp r1, r2
it ne
strne r0, [r1], #4
bne clear_bss_loop
/*------------------------------------------------------------------------------
* Call global constructors
*/
/*
* Align to word and use 32-bits LDR instruction to ensure the ADD instruction
* taking PC as argument is aligned on a word boundary.
*/
.align 4
call_glob_ctor:
ldr.w r0, =__libc_init_array
add lr, pc, #3
bx r0
/*------------------------------------------------------------------------------
* branch to main.
*/
branch_to_main:
mov r0, #0 /* no arguments */
mov r1, #0 /* no argv either */
ldr pc, =main
ExitLoop:
B ExitLoop
/*==============================================================================
* NMI_Handler
*/
.weak NMI_Handler
.type NMI_Handler, %function
NMI_Handler:
B .
/*==============================================================================
* HardFault_Handler
*/
.weak HardFault_Handler
.type HardFault_Handler, %function
HardFault_Handler:
B .
/*==============================================================================
* MemManage_Handler
*/
.weak MemManage_Handler
.type MemManage_Handler, %function
MemManage_Handler:
B .
/*==============================================================================
* BusFault_Handler
*/
.weak BusFault_Handler
.type BusFault_Handler, %function
BusFault_Handler:
B .
/*==============================================================================
* UsageFault_Handler
*/
.weak UsageFault_Handler
.type UsageFault_Handler, %function
UsageFault_Handler:
B .
/*==============================================================================
* SVC_Handler
*/
.weak SVC_Handler
.type SVC_Handler, %function
SVC_Handler:
B .
/*==============================================================================
* DebugMon_Handler
*/
.weak DebugMon_Handler
.type DebugMon_Handler, %function
DebugMon_Handler:
B .
/*==============================================================================
* PendSV_Handler
*/
.weak PendSV_Handler
.type PendSV_Handler, %function
PendSV_Handler:
B .
/*==============================================================================
* SysTick_Handler
*/
.weak SysTick_Handler
.type SysTick_Handler, %function
SysTick_Handler:
B .
/*==============================================================================
* WdogWakeup_IRQHandler
*/
.weak WdogWakeup_IRQHandler
.type WdogWakeup_IRQHandler, %function
WdogWakeup_IRQHandler:
B .
/*==============================================================================
* RTC_Wakeup_IRQHandler
*/
.weak RTC_Wakeup_IRQHandler
.type RTC_Wakeup_IRQHandler, %function
RTC_Wakeup_IRQHandler:
B .
/*==============================================================================
* SPI0_IRQHandler
*/
.weak SPI0_IRQHandler
.type SPI0_IRQHandler, %function
SPI0_IRQHandler:
B .
/*==============================================================================
* SPI1_IRQHandler
*/
.weak SPI1_IRQHandler
.type SPI1_IRQHandler, %function
SPI1_IRQHandler:
B .
/*==============================================================================
* I2C0_IRQHandler
*/
.weak I2C0_IRQHandler
.type I2C0_IRQHandler, %function
I2C0_IRQHandler:
B .
/*==============================================================================
* I2C0_SMBAlert_IRQHandler
*/
.weak I2C0_SMBAlert_IRQHandler
.type I2C0_SMBAlert_IRQHandler, %function
I2C0_SMBAlert_IRQHandler:
B .
/*==============================================================================
* I2C0_SMBus_IRQHandler
*/
.weak I2C0_SMBus_IRQHandler
.type I2C0_SMBus_IRQHandler, %function
I2C0_SMBus_IRQHandler:
B .
/*==============================================================================
* I2C1_IRQHandler
*/
.weak I2C1_IRQHandler
.type I2C1_IRQHandler, %function
I2C1_IRQHandler:
B .
/*==============================================================================
* I2C1_SMBAlert_IRQHandler
*/
.weak I2C1_SMBAlert_IRQHandler
.type I2C1_SMBAlert_IRQHandler, %function
I2C1_SMBAlert_IRQHandler:
B .
/*==============================================================================
* I2C1_SMBus_IRQHandler
*/
.weak I2C1_SMBus_IRQHandler
.type I2C1_SMBus_IRQHandler, %function
I2C1_SMBus_IRQHandler:
B .
/*==============================================================================
* UART0_IRQHandler
*/
.weak UART0_IRQHandler
.type UART0_IRQHandler, %function
UART0_IRQHandler:
B .
/*==============================================================================
* UART1_IRQHandler
*/
.weak UART1_IRQHandler
.type UART1_IRQHandler, %function
UART1_IRQHandler:
B .
/*==============================================================================
* EthernetMAC_IRQHandler
*/
.weak EthernetMAC_IRQHandler
.type EthernetMAC_IRQHandler, %function
EthernetMAC_IRQHandler:
B .
/*==============================================================================
* DMA_IRQHandler
*/
.weak DMA_IRQHandler
.type DMA_IRQHandler, %function
DMA_IRQHandler:
B .
/*==============================================================================
* Timer1_IRQHandler
*/
.weak Timer1_IRQHandler
.type Timer1_IRQHandler, %function
Timer1_IRQHandler:
B .
/*==============================================================================
* Timer2_IRQHandler
*/
.weak Timer2_IRQHandler
.type Timer2_IRQHandler, %function
Timer2_IRQHandler:
B .
/*==============================================================================
* CAN_IRQHandler
*/
.weak CAN_IRQHandler
.type CAN_IRQHandler, %function
CAN_IRQHandler:
B .
/*==============================================================================
* ENVM0_IRQHandler
*/
.weak ENVM0_IRQHandler
.type ENVM0_IRQHandler, %function
ENVM0_IRQHandler:
B .
/*==============================================================================
* ENVM1_IRQHandler
*/
.weak ENVM1_IRQHandler
.type ENVM1_IRQHandler, %function
ENVM1_IRQHandler:
B .
/*==============================================================================
* ComBlk_IRQHandler
*/
.weak ComBlk_IRQHandler
.type ComBlk_IRQHandler, %function
ComBlk_IRQHandler:
B .
/*==============================================================================
* USB_IRQHandler
*/
.weak USB_IRQHandler
.type USB_IRQHandler, %function
USB_IRQHandler:
B .
/*==============================================================================
* USB_DMA_IRQHandler
*/
.weak USB_DMA_IRQHandler
.type USB_DMA_IRQHandler, %function
USB_DMA_IRQHandler:
B .
/*==============================================================================
* PLL_Lock_IRQHandler
*/
.weak PLL_Lock_IRQHandler
.type PLL_Lock_IRQHandler, %function
PLL_Lock_IRQHandler:
B .
/*==============================================================================
* PLL_LockLost_IRQHandler
*/
.weak PLL_LockLost_IRQHandler
.type PLL_LockLost_IRQHandler, %function
PLL_LockLost_IRQHandler:
B .
/*==============================================================================
* CommSwitchError_IRQHandler
*/
.weak CommSwitchError_IRQHandler
.type CommSwitchError_IRQHandler, %function
CommSwitchError_IRQHandler:
B .
/*==============================================================================
* CacheError_IRQHandler
*/
.weak CacheError_IRQHandler
.type CacheError_IRQHandler, %function
CacheError_IRQHandler:
B .
/*==============================================================================
* DDR_IRQHandler
*/
.weak DDR_IRQHandler
.type DDR_IRQHandler, %function
DDR_IRQHandler:
B .
/*==============================================================================
* HPDMA_Complete_IRQHandler
*/
.weak HPDMA_Complete_IRQHandler
.type HPDMA_Complete_IRQHandler, %function
HPDMA_Complete_IRQHandler:
B .
/*==============================================================================
* HPDMA_Error_IRQHandler
*/
.weak HPDMA_Error_IRQHandler
.type HPDMA_Error_IRQHandler, %function
HPDMA_Error_IRQHandler:
B .
/*==============================================================================
* ECC_Error_IRQHandler
*/
.weak ECC_Error_IRQHandler
.type ECC_Error_IRQHandler, %function
ECC_Error_IRQHandler:
B .
/*==============================================================================
* MDDR_IOCalib_IRQHandler
*/
.weak MDDR_IOCalib_IRQHandler
.type MDDR_IOCalib_IRQHandler, %function
MDDR_IOCalib_IRQHandler:
B .
/*==============================================================================
* FAB_PLL_Lock_IRQHandler
*/
.weak FAB_PLL_Lock_IRQHandler
.type FAB_PLL_Lock_IRQHandler, %function
FAB_PLL_Lock_IRQHandler:
B .
/*==============================================================================
* FAB_PLL_LockLost_IRQHandler
*/
.weak FAB_PLL_LockLost_IRQHandler
.type FAB_PLL_LockLost_IRQHandler, %function
FAB_PLL_LockLost_IRQHandler:
B .
/*==============================================================================
* FIC64_IRQHandler
*/
.weak FIC64_IRQHandler
.type FIC64_IRQHandler, %function
FIC64_IRQHandler:
B .
/*==============================================================================
* FabricIrq0_IRQHandler
*/
.weak FabricIrq0_IRQHandler
.type FabricIrq0_IRQHandler, %function
FabricIrq0_IRQHandler:
B .
/*==============================================================================
* FabricIrq1_IRQHandler
*/
.weak FabricIrq1_IRQHandler
.type FabricIrq1_IRQHandler, %function
FabricIrq1_IRQHandler:
B .
/*==============================================================================
* FabricIrq2_IRQHandler
*/
.weak FabricIrq2_IRQHandler
.type FabricIrq2_IRQHandler, %function
FabricIrq2_IRQHandler:
B .
/*==============================================================================
* FabricIrq3_IRQHandler
*/
.weak FabricIrq3_IRQHandler
.type FabricIrq3_IRQHandler, %function
FabricIrq3_IRQHandler:
B .
/*==============================================================================
* FabricIrq4_IRQHandler
*/
.weak FabricIrq4_IRQHandler
.type FabricIrq4_IRQHandler, %function
FabricIrq4_IRQHandler:
B .
/*==============================================================================
* FabricIrq5_IRQHandler
*/
.weak FabricIrq5_IRQHandler
.type FabricIrq5_IRQHandler, %function
FabricIrq5_IRQHandler:
B .
/*==============================================================================
* FabricIrq6_IRQHandler
*/
.weak FabricIrq6_IRQHandler
.type FabricIrq6_IRQHandler, %function
FabricIrq6_IRQHandler:
B .
/*==============================================================================
* FabricIrq7_IRQHandler
*/
.weak FabricIrq7_IRQHandler
.type FabricIrq7_IRQHandler, %function
FabricIrq7_IRQHandler:
B .
/*==============================================================================
* FabricIrq8_IRQHandler
*/
.weak FabricIrq8_IRQHandler
.type FabricIrq8_IRQHandler, %function
FabricIrq8_IRQHandler:
B .
/*==============================================================================
* FabricIrq9_IRQHandler
*/
.weak FabricIrq9_IRQHandler
.type FabricIrq9_IRQHandler, %function
FabricIrq9_IRQHandler:
B .
/*==============================================================================
* FabricIrq10_IRQHandler
*/
.weak FabricIrq10_IRQHandler
.type FabricIrq10_IRQHandler, %function
FabricIrq10_IRQHandler:
B .
/*==============================================================================
* FabricIrq11_IRQHandler
*/
.weak FabricIrq11_IRQHandler
.type FabricIrq11_IRQHandler, %function
FabricIrq11_IRQHandler:
B .
/*==============================================================================
* FabricIrq12_IRQHandler
*/
.weak FabricIrq12_IRQHandler
.type FabricIrq12_IRQHandler, %function
FabricIrq12_IRQHandler:
B .
/*==============================================================================
* FabricIrq13_IRQHandler
*/
.weak FabricIrq13_IRQHandler
.type FabricIrq13_IRQHandler, %function
FabricIrq13_IRQHandler:
B .
/*==============================================================================
* FabricIrq14_IRQHandler
*/
.weak FabricIrq14_IRQHandler
.type FabricIrq14_IRQHandler, %function
FabricIrq14_IRQHandler:
B .
/*==============================================================================
* FabricIrq15_IRQHandler
*/
.weak FabricIrq15_IRQHandler
.type FabricIrq15_IRQHandler, %function
FabricIrq15_IRQHandler:
B .
/*==============================================================================
* GPIO0_IRQHandler
*/
.weak GPIO0_IRQHandler
.type GPIO0_IRQHandler, %function
GPIO0_IRQHandler:
B .
/*==============================================================================
* GPIO1_IRQHandler
*/
.weak GPIO1_IRQHandler
.type GPIO1_IRQHandler, %function
GPIO1_IRQHandler:
B .
/*==============================================================================
* GPIO2_IRQHandler
*/
.weak GPIO2_IRQHandler
.type GPIO2_IRQHandler, %function
GPIO2_IRQHandler:
B .
/*==============================================================================
* GPIO3_IRQHandler
*/
.weak GPIO3_IRQHandler
.type GPIO3_IRQHandler, %function
GPIO3_IRQHandler:
B .
/*==============================================================================
* GPIO4_IRQHandler
*/
.weak GPIO4_IRQHandler
.type GPIO4_IRQHandler, %function
GPIO4_IRQHandler:
B .
/*==============================================================================
* GPIO5_IRQHandler
*/
.weak GPIO5_IRQHandler
.type GPIO5_IRQHandler, %function
GPIO5_IRQHandler:
B .
/*==============================================================================
* GPIO6_IRQHandler
*/
.weak GPIO6_IRQHandler
.type GPIO6_IRQHandler, %function
GPIO6_IRQHandler:
B .
/*==============================================================================
* GPIO7_IRQHandler
*/
.weak GPIO7_IRQHandler
.type GPIO7_IRQHandler, %function
GPIO7_IRQHandler:
B .
/*==============================================================================
* GPIO8_IRQHandler
*/
.weak GPIO8_IRQHandler
.type GPIO8_IRQHandler, %function
GPIO8_IRQHandler:
B .
/*==============================================================================
* GPIO9_IRQHandler
*/
.weak GPIO9_IRQHandler
.type GPIO9_IRQHandler, %function
GPIO9_IRQHandler:
B .
/*==============================================================================
* GPIO10_IRQHandler
*/
.weak GPIO10_IRQHandler
.type GPIO10_IRQHandler, %function
GPIO10_IRQHandler:
B .
/*==============================================================================
* GPIO11_IRQHandler
*/
.weak GPIO11_IRQHandler
.type GPIO11_IRQHandler, %function
GPIO11_IRQHandler:
B .
/*==============================================================================
* GPIO12_IRQHandler
*/
.weak GPIO12_IRQHandler
.type GPIO12_IRQHandler, %function
GPIO12_IRQHandler:
B .
/*==============================================================================
* GPIO13_IRQHandler
*/
.weak GPIO13_IRQHandler
.type GPIO13_IRQHandler, %function
GPIO13_IRQHandler:
B .
/*==============================================================================
* GPIO14_IRQHandler
*/
.weak GPIO14_IRQHandler
.type GPIO14_IRQHandler, %function
GPIO14_IRQHandler:
B .
/*==============================================================================
* GPIO15_IRQHandler
*/
.weak GPIO15_IRQHandler
.type GPIO15_IRQHandler, %function
GPIO15_IRQHandler:
B .
/*==============================================================================
* GPIO16_IRQHandler
*/
.weak GPIO16_IRQHandler
.type GPIO16_IRQHandler, %function
GPIO16_IRQHandler:
B .
/*==============================================================================
* GPIO17_IRQHandler
*/
.weak GPIO17_IRQHandler
.type GPIO17_IRQHandler, %function
GPIO17_IRQHandler:
B .
/*==============================================================================
* GPIO18_IRQHandler
*/
.weak GPIO18_IRQHandler
.type GPIO18_IRQHandler, %function
GPIO18_IRQHandler:
B .
/*==============================================================================
* GPIO19_IRQHandler
*/
.weak GPIO19_IRQHandler
.type GPIO19_IRQHandler, %function
GPIO19_IRQHandler:
B .
/*==============================================================================
* GPIO20_IRQHandler
*/
.weak GPIO20_IRQHandler
.type GPIO20_IRQHandler, %function
GPIO20_IRQHandler:
B .
/*==============================================================================
* GPIO21_IRQHandler
*/
.weak GPIO21_IRQHandler
.type GPIO21_IRQHandler, %function
GPIO21_IRQHandler:
B .
/*==============================================================================
* GPIO22_IRQHandler
*/
.weak GPIO22_IRQHandler
.type GPIO22_IRQHandler, %function
GPIO22_IRQHandler:
B .
/*==============================================================================
* GPIO23_IRQHandler
*/
.weak GPIO23_IRQHandler
.type GPIO23_IRQHandler, %function
GPIO23_IRQHandler:
B .
/*==============================================================================
* GPIO24_IRQHandler
*/
.weak GPIO24_IRQHandler
.type GPIO24_IRQHandler, %function
GPIO24_IRQHandler:
B .
/*==============================================================================
* GPIO25_IRQHandler
*/
.weak GPIO25_IRQHandler
.type GPIO25_IRQHandler, %function
GPIO25_IRQHandler:
B .
/*==============================================================================
* GPIO26_IRQHandler
*/
.weak GPIO26_IRQHandler
.type GPIO26_IRQHandler, %function
GPIO26_IRQHandler:
B .
/*==============================================================================
* GPIO27_IRQHandler
*/
.weak GPIO27_IRQHandler
.type GPIO27_IRQHandler, %function
GPIO27_IRQHandler:
B .
/*==============================================================================
* GPIO28_IRQHandler
*/
.weak GPIO28_IRQHandler
.type GPIO28_IRQHandler, %function
GPIO28_IRQHandler:
B .
/*==============================================================================
* GPIO29_IRQHandler
*/
.weak GPIO29_IRQHandler
.type GPIO29_IRQHandler, %function
GPIO29_IRQHandler:
B .
/*==============================================================================
* GPIO30_IRQHandler
*/
.weak GPIO30_IRQHandler
.type GPIO30_IRQHandler, %function
GPIO30_IRQHandler:
B .
/*==============================================================================
* GPIO31_IRQHandler
*/
.weak GPIO31_IRQHandler
.type GPIO31_IRQHandler, %function
GPIO31_IRQHandler:
B .
/*==============================================================================
* mscc_post_hw_cfg_init
*/
.weak mscc_post_hw_cfg_init
.type mscc_post_hw_cfg_init, %function
mscc_post_hw_cfg_init:
BX LR
.end