Files
zTC1/mico-os/platform/MCU/MTK7697/startup_application.s
2025-03-11 14:10:51 +08:00

351 lines
13 KiB
ArmAsm
Executable File

/* Copyright Statement:
*
* (C) 2005-2016 MediaTek Inc. All rights reserved.
*
* This software/firmware and related documentation ("MediaTek Software") are
* protected under relevant copyright laws. The information contained herein
* is confidential and proprietary to MediaTek Inc. ("MediaTek") and/or its licensors.
* Without the prior written permission of MediaTek and/or its licensors,
* any reproduction, modification, use or disclosure of MediaTek Software,
* and information contained herein, in whole or in part, shall be strictly prohibited.
* You may only use, reproduce, modify, or distribute (as applicable) MediaTek Software
* if you have agreed to and been bound by the applicable license agreement with
* MediaTek ("License Agreement") and been granted explicit permission to do so within
* the License Agreement ("Permitted User"). If you are not a Permitted User,
* please cease any access or use of MediaTek Software immediately.
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT MEDIATEK SOFTWARE RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES
* ARE PROVIDED TO RECEIVER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
* THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
* CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
* SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
* CUMULATIVE LIABILITY WITH RESPECT TO MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*/
.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, 0x6000
#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, 0x10000
#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 SvcCall_Main /* SVCall Handler */
.long DebugMon_Handler /* Debug Monitor Handler */
.long 0 /* Reserved */
.long PendSV_Main /* PendSV Handler */
.long SysTick_Main /* SysTick Handler */
/* External interrupts */
.long isrC_main /* 16: UART1 */
.long isrC_main /* 17: DMA */
.long isrC_main /* 18: HIF */
.long isrC_main /* 19: I2C1 */
.long isrC_main /* 20: I2C2 */
.long isrC_main /* 21: UART2 */
.long isrC_main /* 22: MTK_CRYPTO */
.long isrC_main /* 23: SF */
.long isrC_main /* 24: EINT */
.long isrC_main /* 25: BTIF */
.long isrC_main /* 26: WDT */
.long isrC_main /* 27: reserved */
.long isrC_main /* 28: SPI_SLAVE */
.long isrC_main /* 29: WDT_N9 */
.long isrC_main /* 30: ADC */
.long isrC_main /* 31: IRDA_TX */
.long isrC_main /* 32: IRDA_RX */
.long isrC_main /* 33: USB_VBUS_ON */
.long isrC_main /* 34: USB_VBUS_OFF */
.long isrC_main /* 35: timer_hit */
.long isrC_main /* 36: GPT3 */
.long isrC_main /* 37: alarm_hit */
.long isrC_main /* 38: AUDIO */
.long isrC_main /* 39: n9_cm4_sw_irq */
.long isrC_main /* 40: GPT4 */
.long isrC_main /* 41: adc_comp_irq */
.long isrC_main /* 42: reserved */
.long isrC_main /* 43: SPIM */
.long isrC_main /* 44: USB */
.long isrC_main /* 45: UDMA */
.long isrC_main /* 46: TRNG */
.long isrC_main /* 47: reserved */
.long isrC_main /* 48: configurable */
.long isrC_main /* 49: configurable */
.long isrC_main /* 50: configurable */
.long isrC_main /* 51: configurable */
.long isrC_main /* 52: configurable */
.long isrC_main /* 53: configurable */
.long isrC_main /* 54: configurable */
.long isrC_main /* 55: configurable */
.long isrC_main /* 56: configurable */
.long isrC_main /* 57: configurable */
.long isrC_main /* 58: configurable */
.long isrC_main /* 59: configurable */
.long isrC_main /* 60: configurable */
.long isrC_main /* 61: configurable */
.long isrC_main /* 62: configurable */
.long isrC_main /* 63: configurable */
.long isrC_main /* 64: configurable */
.long isrC_main /* 65: configurable */
.long isrC_main /* 66: configurable */
.long isrC_main /* 67: configurable */
.long isrC_main /* 68: configurable */
.long isrC_main /* 69: configurable */
.long isrC_main /* 70: configurable */
.long isrC_main /* 71: configurable */
.long isrC_main /* 72: configurable */
.long isrC_main /* 73: configurable */
.long isrC_main /* 74: configurable */
.long isrC_main /* 75: configurable */
.long isrC_main /* 76: configurable */
.long isrC_main /* 77: configurable */
.long isrC_main /* 78: configurable */
.long isrC_main /* 79: configurable */
.long isrC_main /* 80: configurable */
.long isrC_main /* 81: configurable */
.long isrC_main /* 82: configurable */
.long isrC_main /* 83: configurable */
.long isrC_main /* 84: configurable */
.long isrC_main /* 85: configurable */
.long isrC_main /* 86: configurable */
.long isrC_main /* 87: configurable */
.long isrC_main /* 88: configurable */
.long isrC_main /* 89: configurable */
.long isrC_main /* 90: configurable */
.long isrC_main /* 91: configurable */
.long isrC_main /* 92: configurable */
.long isrC_main /* 93: configurable */
.long isrC_main /* 94: configurable */
.long isrC_main /* 95: configurable */
.long isrC_main /* 96: configurable */
.long isrC_main /* 97: configurable */
.long isrC_main /* 98: configurable */
.long isrC_main /* 99: configurable */
.long isrC_main /* 100: configurable */
.long isrC_main /* 101: configurable */
.long isrC_main /* 102: configurable */
.long isrC_main /* 103: configurable */
.long isrC_main /* 104: configurable */
.long isrC_main /* 105: configurable */
.long isrC_main /* 106: configurable */
.long isrC_main /* 107: configurable */
.long isrC_main /* 108: configurable */
.long isrC_main /* 109: configurable */
.long isrC_main /* 110: configurable */
.long isrC_main /* 111: configurable */
.size __isr_vector, . - __isr_vector
.text
.thumb
.thumb_func
.section .init
.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 sp, =__StackTop /* set stack pointer */
cpsid i
ldr r1, =__etext
ldr r2, =__data_start__
ldr r3, =__data_end__
.Lflash_to_ram_loop:
cmp r2, r3
ittt lo
ldrlo r0, [r1], #4
strlo r0, [r2], #4
blo .Lflash_to_ram_loop
ldr r1, =__ramtext_load__
ldr r2, =__ramtext_start__
ldr r3, =__ramtext_end__
.Lflash_to_tcm_loop:
cmp r2, r3
ittt lo
ldrlo r0, [r1], #4
strlo r0, [r2], #4
blo .Lflash_to_tcm_loop
ldr r2, =__tcmbss_start__
ldr r3, =__tcmbss_end__
.Lbss_to_tcm_loop:
cmp r2, r3
ittt lo
movlo r0, #0
strlo r0, [r2], #4
blo .Lbss_to_tcm_loop
ldr r2, =__bss_start__
ldr r3, =__bss_end__
.Lbss_to_ram_loop:
cmp r2, r3
ittt lo
movlo r0, #0
strlo r0, [r2], #4
blo .Lbss_to_ram_loop
ldr r0, =SystemInit
blx r0
ldr r0, =init_clocks
blx r0
ldr r0, =init_memory
blx r0
ldr r0, =init_architecture
blx r0
ldr r0, =init_platform
blx r0
ldr r0, =main
bx r0
.pool
.size Reset_Handler, . - Reset_Handler
/**
* @brief This is the code for system exception handling(svcCall,systick,pendSV), must suspend
flash before fetch code from flash
* @param None
* @retval None
*/
.section .ramTEXT,"ax",%progbits
.type SvcCall_Main, %function
.global SvcCall_Main
SvcCall_Main:
cpsid i
push {lr}
blx Flash_ReturnReady
pop {lr}
cpsie i
b SVC_Handler
.size SvcCall_Main, .-SvcCall_Main
.type PendSV_Main, %function
.global PendSV_Main
PendSV_Main:
cpsid i
push {lr}
blx Flash_ReturnReady
pop {lr}
cpsie i
b PendSV_Handler
.size PendSV_Main, .-PendSV_Main
.type SysTick_Main, %function
.global SysTick_Main
SysTick_Main:
cpsid i
push {lr}
blx Flash_ReturnReady
cpsie i
blx SysTick_Handler
pop {lr}
bx lr
.size SysTick_Main, .-SysTick_Main
.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
.end