rusefi-1/firmware/hw_layer/ports/stm32/rusEfiStartup.S

39 lines
1.1 KiB
ArmAsm

/**
* @file rusEfiStartup.S
* rusEfi startup assembly
*
* We have ChibiOS '_crt0_entry' jumping here and then we jump back.
* There is probably no stack at this point to invoke a method.
*/
// todo: I have no idea which lines are doing what
// todo: one of these is resolving 'Error: lo register required -- `ldr SP,[R0,#0]'' :)
.syntax unified
.cpu cortex-m3
.thumb
.align 2
.thumb_func
// end of 'I have no idea'
// ChibiOS defines it's Reset_Handler 'weak' - by defining out handler this becomes firmware entry point
.global Reset_Handler
Reset_Handler:
// [rusefi][DFU][start]
// Clive Two.Zero is the God of ST community forum
// Device specific, if in doubt RTFM
LDR R0, =0x2001FFF0 // End of SRAM for your CPU
LDR R1, =0xDEADBEEF // magic value
LDR R2, [R0, #0]
STR R0, [R0, #0] // Invalidate
CMP R2, R1
BEQ UseDFU
// DFU bootloader not needed, jump back to normal ChibiOS startup
bl _crt0_entry
UseDFU:
// AN2606 Application note
// STM32 microcontroller system memory boot mode
#include "dfu_init.h"
BX R0 // this jumps to DFU bootloader
// I believe we are never executing this line
// [rusefi][DFU][end]