Sync betaflight to Gitea
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* STM32N6 FSBL stub Cortex-M55 startup for the GCC toolchain.
|
||||
*
|
||||
* The boot ROM loads the entire payload (incl. .text + .data) into AXISRAM2
|
||||
* at the address in the FSBL header, so only a .data LMA->VMA copy is
|
||||
* required (no flash-to-RAM .text copy).
|
||||
*
|
||||
* .data copy and .bss zero must run BEFORE SystemInit, otherwise SystemInit
|
||||
* writes to HAL globals (uwTick, SystemCoreClock) land in uninitialised
|
||||
* memory and HAL_GetTick() reads garbage on the first HAL timeout.
|
||||
*
|
||||
* The default exception handlers are stub infinite loops. SysTick_Handler
|
||||
* is overridden by stm32n6xx_it.c which calls HAL_IncTick.
|
||||
*/
|
||||
|
||||
.syntax unified
|
||||
.arch armv8.1-m.main
|
||||
.fpu softvfp
|
||||
.thumb
|
||||
|
||||
.global g_pfnVectors
|
||||
.global Default_Handler
|
||||
|
||||
/* Linker symbols used below */
|
||||
.word _sidata
|
||||
.word _sdata
|
||||
.word _edata
|
||||
.word _sbss
|
||||
.word _ebss
|
||||
|
||||
.section .text.Reset_Handler
|
||||
.weak Reset_Handler
|
||||
.type Reset_Handler, %function
|
||||
Reset_Handler:
|
||||
ldr r0, =_sstack
|
||||
msr MSPLIM, r0
|
||||
ldr r0, =_estack
|
||||
mov sp, r0
|
||||
|
||||
/* Copy .data from LMA (end of .text in ROM region) to VMA (RAM). */
|
||||
ldr r0, =_sdata
|
||||
ldr r1, =_edata
|
||||
ldr r2, =_sidata
|
||||
movs r3, #0
|
||||
b LoopCopyDataInit
|
||||
CopyDataInit:
|
||||
ldr r4, [r2, r3]
|
||||
str r4, [r0, r3]
|
||||
adds r3, r3, #4
|
||||
LoopCopyDataInit:
|
||||
adds r4, r0, r3
|
||||
cmp r4, r1
|
||||
bcc CopyDataInit
|
||||
|
||||
/* Zero-fill .bss. */
|
||||
ldr r2, =_sbss
|
||||
ldr r4, =_ebss
|
||||
movs r3, #0
|
||||
b LoopFillZerobss
|
||||
FillZerobss:
|
||||
str r3, [r2]
|
||||
adds r2, r2, #4
|
||||
LoopFillZerobss:
|
||||
cmp r2, r4
|
||||
bcc FillZerobss
|
||||
|
||||
bl SystemInit
|
||||
bl main
|
||||
LoopForever:
|
||||
b LoopForever
|
||||
.size Reset_Handler, .-Reset_Handler
|
||||
|
||||
.section .text.Default_Handler, "ax", %progbits
|
||||
Default_Handler:
|
||||
b Default_Handler
|
||||
.size Default_Handler, .-Default_Handler
|
||||
|
||||
/* Cortex-M55 vector table — only the system vectors are populated.
|
||||
* IRQ handlers default to Default_Handler via .weak aliases. */
|
||||
.section .isr_vector, "a", %progbits
|
||||
.type g_pfnVectors, %object
|
||||
g_pfnVectors:
|
||||
.word _estack
|
||||
.word Reset_Handler
|
||||
.word NMI_Handler
|
||||
.word HardFault_Handler
|
||||
.word MemManage_Handler
|
||||
.word BusFault_Handler
|
||||
.word UsageFault_Handler
|
||||
.word SecureFault_Handler
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word SVC_Handler
|
||||
.word DebugMon_Handler
|
||||
.word 0
|
||||
.word PendSV_Handler
|
||||
.word SysTick_Handler
|
||||
.size g_pfnVectors, .-g_pfnVectors
|
||||
|
||||
.weak NMI_Handler
|
||||
.thumb_set NMI_Handler, Default_Handler
|
||||
.weak HardFault_Handler
|
||||
.thumb_set HardFault_Handler, Default_Handler
|
||||
.weak MemManage_Handler
|
||||
.thumb_set MemManage_Handler, Default_Handler
|
||||
.weak BusFault_Handler
|
||||
.thumb_set BusFault_Handler, Default_Handler
|
||||
.weak UsageFault_Handler
|
||||
.thumb_set UsageFault_Handler, Default_Handler
|
||||
.weak SecureFault_Handler
|
||||
.thumb_set SecureFault_Handler, Default_Handler
|
||||
.weak SVC_Handler
|
||||
.thumb_set SVC_Handler, Default_Handler
|
||||
.weak DebugMon_Handler
|
||||
.thumb_set DebugMon_Handler, Default_Handler
|
||||
.weak PendSV_Handler
|
||||
.thumb_set PendSV_Handler, Default_Handler
|
||||
.weak SysTick_Handler
|
||||
.thumb_set SysTick_Handler, Default_Handler
|
||||
Reference in New Issue
Block a user