mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-20 20:58:09 +08:00
8d72c2a7b2
PUBLISHED_FROM=d9d979057d5269ac32d16545dd2489485bda642a
491 lines
19 KiB
ArmAsm
491 lines
19 KiB
ArmAsm
/*
|
|
Copyright (c) 2015, Nordic Semiconductor ASA
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
* Redistributions of source code must retain the above copyright notice, this
|
|
list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
|
|
* Neither the name of Nordic Semiconductor ASA nor the names of its
|
|
contributors may be used to endorse or promote products derived from
|
|
this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/*
|
|
NOTE: Template files (including this one) are application specific and therefore
|
|
expected to be copied into the application project folder prior to its use!
|
|
*/
|
|
|
|
.syntax unified
|
|
.arch armv7e-m
|
|
|
|
.section .stack
|
|
.align 3
|
|
#ifdef __STACK_SIZE
|
|
.equ Stack_Size, __STACK_SIZE
|
|
#else
|
|
.equ Stack_Size, 4096
|
|
#endif
|
|
.globl __StackTop
|
|
.globl __StackLimit
|
|
__StackLimit:
|
|
.space Stack_Size
|
|
.size __StackLimit, . - __StackLimit
|
|
__StackTop:
|
|
.size __StackTop, . - __StackTop
|
|
|
|
.section .heap
|
|
.align 3
|
|
#ifdef __HEAP_SIZE
|
|
.equ Heap_Size, __HEAP_SIZE
|
|
#else
|
|
.equ Heap_Size, 4096
|
|
#endif
|
|
.globl __HeapBase
|
|
.globl __HeapLimit
|
|
__HeapBase:
|
|
.if Heap_Size
|
|
.space Heap_Size
|
|
.endif
|
|
.size __HeapBase, . - __HeapBase
|
|
__HeapLimit:
|
|
.size __HeapLimit, . - __HeapLimit
|
|
|
|
.section .Vectors
|
|
.align 2
|
|
.globl __Vectors
|
|
__Vectors:
|
|
.long __StackTop /* Top of Stack */
|
|
.long Reset_Handler
|
|
.long NMI_Handler
|
|
.long HardFault_Handler
|
|
.long MemoryManagement_Handler
|
|
.long BusFault_Handler
|
|
.long UsageFault_Handler
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long SVC_Handler
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long PendSV_Handler
|
|
.long SysTick_Handler
|
|
|
|
/* External Interrupts */
|
|
.long POWER_CLOCK_IRQHandler
|
|
.long RADIO_IRQHandler
|
|
.long UARTE0_UART0_IRQHandler
|
|
.long SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
|
|
.long SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
|
|
.long NFCT_IRQHandler
|
|
.long GPIOTE_IRQHandler
|
|
.long SAADC_IRQHandler
|
|
.long TIMER0_IRQHandler
|
|
.long TIMER1_IRQHandler
|
|
.long TIMER2_IRQHandler
|
|
.long RTC0_IRQHandler
|
|
.long TEMP_IRQHandler
|
|
.long RNG_IRQHandler
|
|
.long ECB_IRQHandler
|
|
.long CCM_AAR_IRQHandler
|
|
.long WDT_IRQHandler
|
|
.long RTC1_IRQHandler
|
|
.long QDEC_IRQHandler
|
|
.long COMP_LPCOMP_IRQHandler
|
|
.long SWI0_EGU0_IRQHandler
|
|
.long SWI1_EGU1_IRQHandler
|
|
.long SWI2_EGU2_IRQHandler
|
|
.long SWI3_EGU3_IRQHandler
|
|
.long SWI4_EGU4_IRQHandler
|
|
.long SWI5_EGU5_IRQHandler
|
|
.long TIMER3_IRQHandler
|
|
.long TIMER4_IRQHandler
|
|
.long PWM0_IRQHandler
|
|
.long PDM_IRQHandler
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long MWU_IRQHandler
|
|
.long PWM1_IRQHandler
|
|
.long PWM2_IRQHandler
|
|
.long SPIM2_SPIS2_SPI2_IRQHandler
|
|
.long RTC2_IRQHandler
|
|
.long I2S_IRQHandler
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
.long 0 /*Reserved */
|
|
|
|
.size __Vectors, . - __Vectors
|
|
|
|
/* Reset Handler */
|
|
|
|
.text
|
|
.thumb
|
|
.thumb_func
|
|
.align 1
|
|
.globl Reset_Handler
|
|
.type Reset_Handler, %function
|
|
Reset_Handler:
|
|
.fnstart
|
|
|
|
|
|
/* Loop to copy data from read only memory to RAM. The ranges
|
|
* of copy from/to are specified by following symbols evaluated in
|
|
* linker script.
|
|
* __etext: End of code section, i.e., begin of data sections to copy from.
|
|
* __data_start__/__data_end__: RAM address range that data should be
|
|
* copied to. Both must be aligned to 4 bytes boundary. */
|
|
|
|
ldr r1, =__etext
|
|
ldr r2, =__data_start__
|
|
ldr r3, =__data_end__
|
|
|
|
subs r3, r2
|
|
ble .LC0
|
|
|
|
.LC1:
|
|
subs r3, 4
|
|
ldr r0, [r1,r3]
|
|
str r0, [r2,r3]
|
|
bgt .LC1
|
|
.LC0:
|
|
|
|
LDR R0, =SystemInit
|
|
BLX R0
|
|
LDR R0, =_start
|
|
BX R0
|
|
|
|
.pool
|
|
.cantunwind
|
|
.fnend
|
|
.size Reset_Handler,.-Reset_Handler
|
|
|
|
.section ".text"
|
|
|
|
|
|
/* Dummy Exception Handlers (infinite loops which can be modified) */
|
|
|
|
.weak NMI_Handler
|
|
.type NMI_Handler, %function
|
|
NMI_Handler:
|
|
B .
|
|
.size NMI_Handler, . - NMI_Handler
|
|
|
|
|
|
.weak HardFault_Handler
|
|
.type HardFault_Handler, %function
|
|
HardFault_Handler:
|
|
B .
|
|
.size HardFault_Handler, . - HardFault_Handler
|
|
|
|
|
|
.weak MemoryManagement_Handler
|
|
.type MemoryManagement_Handler, %function
|
|
MemoryManagement_Handler:
|
|
B .
|
|
.size MemoryManagement_Handler, . - MemoryManagement_Handler
|
|
|
|
|
|
.weak BusFault_Handler
|
|
.type BusFault_Handler, %function
|
|
BusFault_Handler:
|
|
B .
|
|
.size BusFault_Handler, . - BusFault_Handler
|
|
|
|
|
|
.weak UsageFault_Handler
|
|
.type UsageFault_Handler, %function
|
|
UsageFault_Handler:
|
|
B .
|
|
.size UsageFault_Handler, . - UsageFault_Handler
|
|
|
|
|
|
.weak SVC_Handler
|
|
.type SVC_Handler, %function
|
|
SVC_Handler:
|
|
B .
|
|
.size SVC_Handler, . - SVC_Handler
|
|
|
|
|
|
.weak PendSV_Handler
|
|
.type PendSV_Handler, %function
|
|
PendSV_Handler:
|
|
B .
|
|
.size PendSV_Handler, . - PendSV_Handler
|
|
|
|
|
|
.weak SysTick_Handler
|
|
.type SysTick_Handler, %function
|
|
SysTick_Handler:
|
|
B .
|
|
.size SysTick_Handler, . - SysTick_Handler
|
|
|
|
|
|
/* IRQ Handlers */
|
|
|
|
.globl Default_Handler
|
|
.type Default_Handler, %function
|
|
Default_Handler:
|
|
B .
|
|
.size Default_Handler, . - Default_Handler
|
|
|
|
.macro IRQ handler
|
|
.weak \handler
|
|
.set \handler, Default_Handler
|
|
.endm
|
|
|
|
IRQ POWER_CLOCK_IRQHandler
|
|
IRQ RADIO_IRQHandler
|
|
IRQ UARTE0_UART0_IRQHandler
|
|
IRQ SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
|
|
IRQ SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
|
|
IRQ NFCT_IRQHandler
|
|
IRQ GPIOTE_IRQHandler
|
|
IRQ SAADC_IRQHandler
|
|
IRQ TIMER0_IRQHandler
|
|
IRQ TIMER1_IRQHandler
|
|
IRQ TIMER2_IRQHandler
|
|
IRQ RTC0_IRQHandler
|
|
IRQ TEMP_IRQHandler
|
|
IRQ RNG_IRQHandler
|
|
IRQ ECB_IRQHandler
|
|
IRQ CCM_AAR_IRQHandler
|
|
IRQ WDT_IRQHandler
|
|
IRQ RTC1_IRQHandler
|
|
IRQ QDEC_IRQHandler
|
|
IRQ COMP_LPCOMP_IRQHandler
|
|
IRQ SWI0_EGU0_IRQHandler
|
|
IRQ SWI1_EGU1_IRQHandler
|
|
IRQ SWI2_EGU2_IRQHandler
|
|
IRQ SWI3_EGU3_IRQHandler
|
|
IRQ SWI4_EGU4_IRQHandler
|
|
IRQ SWI5_EGU5_IRQHandler
|
|
IRQ TIMER3_IRQHandler
|
|
IRQ TIMER4_IRQHandler
|
|
IRQ PWM0_IRQHandler
|
|
IRQ PDM_IRQHandler
|
|
IRQ MWU_IRQHandler
|
|
IRQ PWM1_IRQHandler
|
|
IRQ PWM2_IRQHandler
|
|
IRQ SPIM2_SPIS2_SPI2_IRQHandler
|
|
IRQ RTC2_IRQHandler
|
|
IRQ I2S_IRQHandler
|
|
|
|
.end
|