mirror of
https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_RTL8710BX_ALIOS_SDK.git
synced 2025-02-06 20:35:22 +00:00
187 lines
6 KiB
ArmAsm
187 lines
6 KiB
ArmAsm
|
.syntax unified
|
||
|
.arch armv7-m
|
||
|
|
||
|
/* Memory Model
|
||
|
The HEAP starts at the end of the DATA section and grows upward.
|
||
|
|
||
|
The STACK starts at the end of the RAM and grows downward.
|
||
|
|
||
|
The HEAP and stack STACK are only checked at compile time:
|
||
|
(DATA_SIZE + HEAP_SIZE + STACK_SIZE) < RAM_SIZE
|
||
|
|
||
|
This is just a check for the bare minimum for the Heap+Stack area before
|
||
|
aborting compilation, it is not the run time limit:
|
||
|
Heap_Size + Stack_Size = 0x80 + 0x80 = 0x100
|
||
|
*/
|
||
|
.section .stack
|
||
|
.align 3
|
||
|
#ifdef __STACK_SIZE
|
||
|
.equ Stack_Size, __STACK_SIZE
|
||
|
#else
|
||
|
.equ Stack_Size, 0x800
|
||
|
#endif
|
||
|
.space Stack_Size
|
||
|
|
||
|
.section .heap
|
||
|
.align 3
|
||
|
#ifdef __HEAP_SIZE
|
||
|
.equ Heap_Size, __HEAP_SIZE
|
||
|
#else
|
||
|
.equ Heap_Size, 0x18000
|
||
|
#endif
|
||
|
.globl __HeapBase
|
||
|
.globl __HeapLimit
|
||
|
__HeapBase:
|
||
|
.space Heap_Size
|
||
|
.size __HeapBase, . - __HeapBase
|
||
|
__HeapLimit:
|
||
|
.size __HeapLimit, . - __HeapLimit
|
||
|
|
||
|
.section .isr_vector
|
||
|
.align 2
|
||
|
.globl __isr_vector
|
||
|
__isr_vector:
|
||
|
.long __StackTop /* Top of Stack */
|
||
|
.long Reset_Handler /* Reset Handler */
|
||
|
.long NMI_Handler /* NMI Handler */
|
||
|
.long HardFault_Handler /* Hard Fault Handler */
|
||
|
.long MemManage_Handler /* MPU Fault Handler */
|
||
|
.long BusFault_Handler /* Bus Fault Handler */
|
||
|
.long UsageFault_Handler /* Usage Fault Handler */
|
||
|
.long 0 /* Reserved */
|
||
|
.long 0 /* Reserved */
|
||
|
.long 0 /* Reserved */
|
||
|
.long 0 /* Reserved */
|
||
|
.long SVC_Handler /* SVCall Handler */
|
||
|
.long DebugMon_Handler /* Debug Monitor Handler */
|
||
|
.long 0 /* Reserved */
|
||
|
.long PendSV_Handler /* PendSV Handler */
|
||
|
.long SysTick_Handler /* SysTick Handler */
|
||
|
|
||
|
/* External interrupts */
|
||
|
.long SPIFLASH_IRQHandler /* 16: SPI Flash */
|
||
|
.long PTA_IRQHandler /* 17: PTA */
|
||
|
.long SDIO_IRQHandler /* 18: SDIO */
|
||
|
.long USBDMA_IRQHandler /* 19: USB DMA */
|
||
|
.long USB_IRQHandler /* 20: USB */
|
||
|
.long GPIO_IRQHandler /* 21: GPIO */
|
||
|
.long TIMER0_IRQHandler /* 22: Timer0 */
|
||
|
.long UART0_IRQHandler /* 23: UART0 */
|
||
|
.long MACHW_IRQHandler /* 24: MAC Hardware */
|
||
|
.long UART1_IRQHandler /* 25: UART1 */
|
||
|
.long AHBDMA_IRQHandler /* 26: AHB DMA */
|
||
|
.long PSRAM_IRQHandler /* 27: PSRAM */
|
||
|
.long SDMMC_IRQHandler /* 28: SDMMC */
|
||
|
.long EXIF_IRQHandler /* 29: EXIF */
|
||
|
.long I2C_IRQHandler /* 30: I2C */
|
||
|
|
||
|
|
||
|
.size __isr_vector, . - __isr_vector
|
||
|
|
||
|
.text
|
||
|
.thumb
|
||
|
.thumb_func
|
||
|
.align 2
|
||
|
.globl Reset_Handler
|
||
|
.type Reset_Handler, %function
|
||
|
Reset_Handler:
|
||
|
/* 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 r0, =__StackTop
|
||
|
msr msp, r0
|
||
|
|
||
|
ldr r0, =rda_ccfg_boot
|
||
|
blx r0
|
||
|
cmp r0, #0x01
|
||
|
bne Soft_Reset
|
||
|
|
||
|
ldr r1, =__etext
|
||
|
ldr r2, =__data_start__
|
||
|
ldr r3, =__data_end__
|
||
|
|
||
|
.Lflash_to_ram_loop:
|
||
|
cmp r2, r3
|
||
|
ittt lt
|
||
|
ldrlt r0, [r1], #4
|
||
|
strlt r0, [r2], #4
|
||
|
blt .Lflash_to_ram_loop
|
||
|
|
||
|
ldr r2, =__bss_start__
|
||
|
b .LoopFillZerobss
|
||
|
|
||
|
.FillZerobss:
|
||
|
movs r3, #0
|
||
|
str r3, [r2], #4
|
||
|
|
||
|
.LoopFillZerobss:
|
||
|
ldr r3, = __bss_end__
|
||
|
cmp r2, r3
|
||
|
bcc .FillZerobss
|
||
|
|
||
|
ldr r0, =SystemInit
|
||
|
blx r0
|
||
|
ldr r0, =entry_main
|
||
|
bx r0
|
||
|
|
||
|
Soft_Reset:
|
||
|
mov r1, #0x04
|
||
|
ldr r0, [r1]
|
||
|
bx r0
|
||
|
|
||
|
.pool
|
||
|
.size Reset_Handler, . - Reset_Handler
|
||
|
|
||
|
.text
|
||
|
/* Macro to define default handlers. Default handler
|
||
|
* will be weak symbol and just dead loops. They can be
|
||
|
* overwritten by other handlers */
|
||
|
.macro def_default_handler handler_name
|
||
|
.align 1
|
||
|
.thumb_func
|
||
|
.weak \handler_name
|
||
|
.type \handler_name, %function
|
||
|
\handler_name :
|
||
|
b .
|
||
|
.size \handler_name, . - \handler_name
|
||
|
.endm
|
||
|
|
||
|
def_default_handler NMI_Handler
|
||
|
def_default_handler HardFault_Handler
|
||
|
def_default_handler MemManage_Handler
|
||
|
def_default_handler BusFault_Handler
|
||
|
def_default_handler UsageFault_Handler
|
||
|
def_default_handler SVC_Handler
|
||
|
def_default_handler DebugMon_Handler
|
||
|
def_default_handler PendSV_Handler
|
||
|
def_default_handler SysTick_Handler
|
||
|
def_default_handler Default_Handler
|
||
|
|
||
|
.macro def_irq_default_handler handler_name
|
||
|
.weak \handler_name
|
||
|
.set \handler_name, Default_Handler
|
||
|
.endm
|
||
|
|
||
|
def_irq_default_handler SPIFLASH_IRQHandler
|
||
|
def_irq_default_handler PTA_IRQHandler
|
||
|
def_irq_default_handler SDIO_IRQHandler
|
||
|
def_irq_default_handler USBDMA_IRQHandler
|
||
|
def_irq_default_handler USB_IRQHandler
|
||
|
def_irq_default_handler GPIO_IRQHandler
|
||
|
def_irq_default_handler TIMER0_IRQHandler
|
||
|
def_irq_default_handler UART0_IRQHandler
|
||
|
def_irq_default_handler MACHW_IRQHandler
|
||
|
def_irq_default_handler UART1_IRQHandler
|
||
|
def_irq_default_handler AHBDMA_IRQHandler
|
||
|
def_irq_default_handler PSRAM_IRQHandler
|
||
|
def_irq_default_handler SDMMC_IRQHandler
|
||
|
def_irq_default_handler EXIF_IRQHandler
|
||
|
def_irq_default_handler I2C_IRQHandler
|
||
|
|
||
|
.end
|
||
|
|