rt-thread/bsp/smartfusion2/CMSIS/startup_gcc/startup_m2sxxx.S

1298 lines
38 KiB
ArmAsm

/*******************************************************************************
* (c) Copyright 2012-2015 Microsemi SoC Products Group. All rights reserved.
*
* @file startup_m2sxxx.S
* @author Microsemi SoC Products Group
* @brief SmartFusion2 vector table and startup code for CodeSourcery G++.
*
* SVN $Revision: 7424 $
* SVN $Date: 2015-05-19 21:16:09 +0530 (Tue, 19 May 2015) $
*/
.syntax unified
.cpu cortex-m3
.thumb
/* #define UNIT_TEST_FILL_MEMORY only uncommented if carring out unit test */
/*==============================================================================
* Vector table
*/
.global g_pfnVectors
.section .isr_vector,"ax",%progbits /* added "x" so appears in .lst file even though not executable code- to help in debug process */
.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
.word 0
.word 0
/*==============================================================================
* Reset_Handler
* Register r11 is used to keep track of whether we need to initialize RAMs
* because ECC/ SECDED is enabled.
*/
.global Reset_Handler
.section .boot_code,"ax",%progbits
.type Reset_Handler, %function
Reset_Handler:
_start:
/*------------------------------------------------------------------------------
* Initialize stack RAM content to initialize the error detection and correction
* (EDAC). This is done if EDAC is enabled for the eSRAM blocks or the
* ECC/SECDED is enabled for the MDDR.
* Register r11 is used to keep track of the RAM intialization decision outcome
* for later use for heap RAM initialization at the end of the startup code.
* Please note that the stack has to be located in eSRAM at this point and
* cannot be located in MDDR since MDDR is not available at this point.
* The bits of the content of register r11 have the following meaning:
* reg11[0]: eSRAM EDAC enabled
* reg11[1]: MDDR ECC/SECDED enabled
*/
mov r11, #0
ldr r0, SF2_MDDR_MODE_CR
ldr r0, [r0]
ldr r1, SF2_EDAC_CR
ldr r1, [r1]
and r1, r1, #3
and r0, r0, #0x1C
cmp r0, #0x14
bne check_esram_edac
orr r11, r11, #2
check_esram_edac:
cmp r1, #0
beq check_stack_init
orr r11, r11, #1
check_stack_init:
cmp r11, #0
beq system_init
clear_stack:
ldr r0, = __stack_start__
ldr r1, =_estack
ldr r2, RAM_INIT_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments uses r4, r5, r6, r7, r8, r9, and does not preserve contents */
/*------------------------------------------------------------------------------
* Call CMSIS system init function.
*/
system_init:
ldr r0, =SystemInit
blx r0
/*------------------------------------------------------------------------------
* Modify MDDR configuration if ECC/SECDED is enabled for MDDR.
* Enable write combining on MDDR bridge, disable non-bufferable regions.
*/
and r10, r11, 0x2
cmp r10, #0
beq remap_memory
ldr r0, SF2_DDRB_NB_SIZE
ldr r1, SF2_DDRB_CR
ldr r2, [r0]
ldr r3, [r1]
push {r0, r1, r2, r3}
mov r2, #0
mov r3, #0xFF
str r2, [r0]
str r3, [r1]
/*------------------------------------------------------------------------------
* Perform memory remapping based on the value of __smartfusion2_memory_remap
* set in the linker script.
*/
remap_memory:
ldr r0, =__smartfusion2_memory_remap
ldr r2, =0
ldr r3, =1
cmp r0, #2
bne check_esram_remap
/*
* Remap external RAM to address 0x00000000
*/
ldr r1, SF2_ESRAM_CR
str r2, [r1]
ldr r1, SF2_ENVM_REMAP_CR
str r2, [r1]
ldr r1, SF2_DDR_CR
str r3, [r1]
check_esram_remap:
cmp r0, #1
bne check_mirrored_nvm
/*
* Remap internal eSRAM to address 0x00000000
*/
ldr r1, SF2_DDR_CR
str r2, [r1]
ldr r1, SF2_ENVM_REMAP_CR
str r2, [r1]
ldr r1, SF2_ESRAM_CR
str r3, [r1]
/*------------------------------------------------------------------------------
* 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.
*/
check_mirrored_nvm:
ldr r0, =__mirrored_nvm
cmp r0, #0
bne copy_data
/*------------------------------------------------------------------------------
* Copy vector table.
*/
ldr r0, =__vector_table_load
ldr r1, =__vector_table_start
ldr r2, =_evector_table
bl block_copy
/*------------------------------------------------------------------------------
* Copy code section.
*/
copy_text:
ldr r0, =__text_load
ldr r1, =__text_start
ldr r2, =_etext
bl block_copy
/*------------------------------------------------------------------------------
* Copy data section.
*/
copy_data:
ldr r0, =__data_load
ldr r1, =__data_start
ldr r2, =_edata
bl block_copy
/*------------------------------------------------------------------------------
* Clear .bss
*/
clear_bss:
ldr r0, =__bss_start__
ldr r1, =__bss_end__
ldr r2, RAM_INIT_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments uses r4, r5, r6, r7, r8, r9, and does not preserve contents */
#ifdef UNIT_TEST_FILL_MEMORY
bl unit_test_fill_memory
#endif
/*------------------------------------------------------------------------------
* Initialize heap RAM content to initialize the error detection and correction
* (EDAC). We use the decision made earlier in the startup code of whether or
* not the stack RAM should be initialized. This decision is held in register
* r11. A non-zero value indicates that the RAM content should be initialized.
*/
clear_heap:
cmp r11, #0
beq call_glob_ctor
ldr r0, =__heap_start__
ldr r1, =_eheap
ldr r2, HEAP_INIT_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments uses r4, r5, r6, r7, r8, r9, and does not preserve contents */
/*------------------------------------------------------------------------------
* Restore MDDR configuration.
*/
and r10, r11, 0x2
cmp r10, #0
beq call_glob_ctor
pop {r0, r1, r2, r3}
str r2, [r0]
str r3, [r1]
/*------------------------------------------------------------------------------
* 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
/*------------------------------------------------------------------------------
* block copy.
*
* r0: source address
* r1: target address
* r2: end target address
*
* note: Most efficient if memory aligned. Linker ALIGN(16) command
* should be used as per example linker scripts.
* Note 1: If the memory address in r0 or r1, byte copy routine is used
* Note 2: If r1 < r2, will loop indefinetley to highlight linker issue.
*/
block_copy:
push {r3, r4, r5, r6, r7, r8, lr}
cmp r0, r1
beq block_copy_exit /* ; Exit early if source and destination the same */
subs.w r2, r2, r1 /* ; Calculate number of bytes to move */
bpl block_copy_address_ok /* ; check (end target address) > (target address) => continue */
b . /* ; halt as critical error- memory map not OK- make it easy to catch in debugger */
block_copy_address_ok:
/* ; detect if source or target memory addresses unaligned. If so use byte copy routine */
orr.w r3, r0, r1
ands.w r3, r3, #3
beq block_copy_continue
block_copy_byte_copy:
bl block_copy_byte
b block_copy_exit
block_copy_continue:
mov r3, #0
mov r8,r2 /* ; Save copy of byte count */
asrs r2,r2, #4 /* ; Div by 16 to get number of chunks to move */
beq block_copy_byte_copy /* ; need to use byte copy if less than 16 bytes */
block_copy_loop:
cmp r2, r3
itt ne
ldmne r0!, {r4, r5, r6, r7}
stmne r1!, {r4, r5, r6, r7}
add.w r3, r3, #1 /* ; use Thumb2- make sure condition code reg. not updated */
bne block_copy_loop
/* ; copy spare bytes at the end if any */
and r8, #15 /* ; get spare bytes --check can you do an ands? */
cmp r8, #0 /* ; no spare bytes at end- end now */
beq block_copy_exit
copy_spare_bytes: /* ; From above, R0 contains source address, R1 contains destination address */
ldrb r4, [r0]
strb r4, [r1]
add r0, #1
add r1, #1
subs r8, r8, #1
bne copy_spare_bytes
block_copy_exit:
pop {r3, r4, r5, r6, r7, r8, pc}
/*
* block_copy_byte: used if memory not aligned
* r0: source address
* r1: target address
* r2: number of bytes
*/
block_copy_byte:
push {r3, lr}
mov r3, #0
block_copy_byte_loop: /* ; From above, R0 contains source address, R1 contains destination address */
ldrb r3, [r0]
strb r3, [r1]
add r0, #1
add r1, #1
subs r2, r2, #1
bne block_copy_byte_loop
pop {r3, pc}
/*;------------------------------------------------------------------------------
; * fill_memory.
; * @brief Fills memory with Pattern contained in r2
; * This routine uses the stmne instruction to copy 4 words at a time which is very efficient
; * The instruction can only write to word aligned memory, hence the code at the start and end of this routine
; * to handle possible unaligned bytes at start and end.
; *
; * @param param1 r0: start address
; * @param param2 r1: end address
; * @param param3 r2: FILL PATTETN
; *
; * @note note: Most efficient if memory aligned. Linker ALIGN(4) command
; * should be used as per example linker scripts
; * Stack is not used in this routine
; * register contents r4, r5, r6, r7, r8, r9, will are used and will be returned undefined
; * @return none - Used Registers are not preserved
; */
fill_memory:
/* ;push {r4, r5, r6, r7, r8, r9, lr} We will not use stack as may be not available */
cmp r0, r1
beq fill_memory_exit /* ; Exit early if source and destination the same */
/* ; copy non-aligned bytes at the start */
and.w r6, r0, #3 /* ; see if non-alaigned bytes at the start */
cmp r6, #0
beq fill_memory_end_start /* ; no spare bytes at start, continue */
mov r5, #4
sub.w r4, r5, r6 /* ; now have number of non-aligned bytes in r4 */
mov r7, #8
mul r8, r7, r6 /* ; calculate number of shifts required to initalise pattern for non-aligned bytes */
mov r9, r2 /* ; copy pattern */
ror r9, r9, r8 /* ; Rotate right to keep pattern consistent */
fill_memory_spare_bytes_start: /* ; From above, R0 contains source address, R1 contains destination address */
cmp r4, #0 /* ; no spare bytes at end- end now */
beq fill_memory_end_start
strb r9, [r0] /* ; fill byte */
ror.w r9, r9, r7 /* ; Rotate right by one byte for the next time, to keep pattern consistent */
add r0, r0, #1 /* ; add one to address */
subs r4, r4, #1 /* ; subtract one from byte count 1 */
b fill_memory_spare_bytes_start
fill_memory_end_start:
mov r6, #0
mov r7, r1 /* ; save end address */
subs r1, r1, r0 /* ; Calculate number of bytes to fill */
mov r8,r1 /* ; Save copy of byte count */
asrs r1,r1, #4 /* ; Div by 16 to get number of chunks to move */
mov r9, r2 /* ; copy pattern */
mov r4, r2 /* ; copy pattern */
mov r5, r2 /* ; copy pattern */
cmp r1, r6 /* ; compare to see if all chunks copied */
beq fill_memory_spare_bytes_end
fill_memory_loop:
it ne
stmne r0!, {r2, r4, r5, r9} /* ; copy pattern- note: stmne instruction must me word aligned (address in r0) */
add.w r6, r6, #1 /* ; use Thumb2- make sure condition code reg. not updated */
cmp r1, r6 /* ; compare to see if all chunks copied */
bne fill_memory_loop
fill_memory_spare_bytes_end: /* ; copy spare bytes at the end if any */
and.w r8, r8, #15 /* ; get spare bytes --check can you do an ands? */
fill_memory_spare_end_loop: /* ; From above, R0 contains source address, R1 contains destination address */
cmp r8, #0 /* ; no spare bytes at end- end now */
beq fill_memory_exit
strb r2, [r0]
ror.w r2, r2, #8 /* ; Rotate right by one byte for the next time, to keep pattern consistent */
add r0, r0, #1 /* ; add one to address */
subs r8, r8, #1 /* ; subtract one from byte count 1 */
b fill_memory_spare_end_loop
fill_memory_exit:
bx lr /*; We will not use pop as stack may be not available */
/*------------------------------------------------------------------------------
* unit_test_fill_memory
* calls fills_memory function with various paramaters
*
* r0: start address
* r1: end address
* r2: FILL PATTETN
*
* Debugger used to check filled memeory is as expected.
* Note: Last instruction in this routine deliberatly halts code to prevent accidentle enabeling in
* release code.
*/
#ifdef UNIT_TEST_FILL_MEMORY
MEM_TEST_PATTERN: .word 0x12345678
unit_test_fill_memory:
push {r0, r1, r2, lr}
ldr r0, = 0x20000100
ldr r1, = 0x20000200
ldr r2, MEM_TEST_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments */
ldr r0, = 0x20000300 /* ; source address */
ldr r1, = 0x20000400 /* ; dest address */
ldr r2, = 0x200004FF /* ; end address */
bl block_copy /* ; copy above */
/* second test */
ldr r0, = 0x20003300
ldr r1, = 0x20003403
ldr r2, MEM_TEST_PATTERN
bl fill_memory
ldr r0, = 0x20003300
ldr r1, = 0x20003500
ldr r2, = 0x20003603
bl block_copy
/* third test */
ldr r0, = 0x20000702
ldr r1, = 0x20000803
ldr r2, MEM_TEST_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments */
ldr r0, = 0x20000702
ldr r1, = 0x20000902
ldr r2, = 0x20000A03
bl block_copy
/* fourth test */
ldr r0, = 0x20000B01
ldr r1, = 0x20000C03
ldr r2, MEM_TEST_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments */
ldr r0, = 0x20000B01
ldr r1, = 0x20000D01
ldr r2, = 0x20000E03
bl block_copy
/* fith test */
ldr r0, = 0x20002D01
ldr r1, = 0x20002E01
ldr r2, MEM_TEST_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments */
ldr r0, = 0x20002D01
ldr r1, = 0x20002F01
ldr r2, = 0x20003001
bl block_copy
/* sixth test */
ldr r0, = 0x20001903
ldr r1, = 0x20001904
ldr r2, MEM_TEST_PATTERN
bl fill_memory /* ; fill_memory takes r0 - r2 as arguments */
ldr r0, = 0x20001903
ldr r1, = 0x20001A03
ldr r2, = 0x20001A04
bl block_copy
/* ; final test, note: This one will cause a halt in copy function- as designed */
ldr r0, = 0x20001903
ldr r1, = 0x20001A03
ldr r2, = 0x20000A04 /* ; end address < start address */
bl block_copy
unit_test_fill_memory_debug: /* ; delibrately wait here, this function only to be used when carrying out test */
b . /* ; stop debugger here and verify memory as expected in debugger */
pop {r0, r1, r2, pc}
#endif
/*==============================================================================
* 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
/*==============================================================================
* Constants:
*/
RAM_INIT_PATTERN: .word 0x00000000
HEAP_INIT_PATTERN: .word 0xA2A2A2A2
SF2_ESRAM_CR: .word 0x40038000
SF2_DDR_CR: .word 0x40038008
SF2_ENVM_REMAP_CR: .word 0x40038010
SF2_DDRB_NB_SIZE: .word 0x40038030
SF2_DDRB_CR: .word 0x40038034
SF2_EDAC_CR: .word 0x40038038
SF2_MDDR_MODE_CR: .word 0x40020818
.end