The reset handler is responsible for loading the variables default values. This includes variables initialized to 0, although they are handed through bss and not data
377 lines
7.2 KiB
ArmAsm
377 lines
7.2 KiB
ArmAsm
/** @file
|
|
* Startup script to be used with the HBL
|
|
*
|
|
* This startup file provides a reset handler to setup the basics for c to run
|
|
* (stack pointer, static data, ...) as well as the vector table and the
|
|
* differents interrupt handlers that go with it. By default, all handlers use
|
|
* the default handler wich is simply and infinite loop
|
|
*/
|
|
|
|
.syntax unified
|
|
.cpu cortex-m3
|
|
.fpu softvfp
|
|
.thumb
|
|
|
|
.word _sromdata
|
|
.word _sdata
|
|
.word _edata
|
|
|
|
|
|
//--Handler definitions---------------------------------------------------------
|
|
|
|
/**
|
|
* Reset handler, first thing executed at boot
|
|
* The handler configures the stack pointer and loads data from ROM to RAM
|
|
*/
|
|
.section .text.hdr_reset
|
|
.weak hdr_reset
|
|
.type hdr_reset, %function
|
|
hdr_reset:
|
|
ldr r0, = _estack
|
|
mov sp, r0
|
|
|
|
//load data from ROM to RAM
|
|
ldr r1, = _sdata
|
|
ldr r2, = _edata
|
|
subs r2, r2, r1
|
|
bcc data_init_end
|
|
ldr r3, = _sromdata
|
|
|
|
movs r0, #0
|
|
|
|
data_init_loop:
|
|
ldr r4, [r3, r0]
|
|
str r4, [r1, r0]
|
|
adds r0, r0, #4
|
|
cmp r0, r2
|
|
bcc data_init_loop
|
|
|
|
data_init_end:
|
|
//initialize RAM to zero
|
|
ldr r1, = _sbss
|
|
ldr r2, = _ebss
|
|
subs r2, r2, r1
|
|
bcc bss_init_end
|
|
movs r3, #0
|
|
|
|
movs r0, #0
|
|
|
|
bss_init_loop:
|
|
str r3, [r1, r0]
|
|
adds r0, r0, #4
|
|
cmp r0, r2
|
|
bcc bss_init_loop
|
|
|
|
bss_init_end:
|
|
b main
|
|
b hdr_reset
|
|
|
|
.size hdr_reset, .-hdr_reset
|
|
|
|
/**
|
|
* Default handler, called on reception of an unexpected interrupt
|
|
* This is the handler used by default for all interrupts unless a specific
|
|
* handler was defined elsewhere
|
|
*/
|
|
.section .text.hdr_default, "ax", %progbits
|
|
.weak hdr_default
|
|
hdr_default:
|
|
b hdr_default
|
|
|
|
.size hdr_default, .-hdr_default
|
|
|
|
|
|
//--Vector table----------------------------------------------------------------
|
|
|
|
.section .vector_table, "a", %progbits
|
|
.type vector_table, %object
|
|
.size vector_table, .-vector_table
|
|
|
|
vector_table:
|
|
.word _estack
|
|
.word hdr_reset
|
|
.word hdr_nmi
|
|
.word hdr_hard_fault
|
|
.word hdr_mem_manage
|
|
.word hdr_bus_fault
|
|
.word hdr_usage_fault
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word hdr_svc
|
|
.word hdr_debug_monitor
|
|
.word 0
|
|
.word hdr_pend_sys_service
|
|
.word hdr_sys_tick
|
|
.word hdr_wwdg
|
|
.word hdr_pvd
|
|
.word hdr_tamper
|
|
.word hdr_rtc
|
|
.word hdr_flash
|
|
.word hdr_rcc
|
|
.word hdr_exti0
|
|
.word hdr_exti1
|
|
.word hdr_exti2
|
|
.word hdr_exti3
|
|
.word hdr_exti4
|
|
.word hdr_dma1_channel1
|
|
.word hdr_dma1_channel2
|
|
.word hdr_dma1_channel3
|
|
.word hdr_dma1_channel4
|
|
.word hdr_dma1_channel5
|
|
.word hdr_dma1_channel6
|
|
.word hdr_dma1_channel7
|
|
.word hdr_adc1_2
|
|
.word hdr_hp_can_tx
|
|
.word hdr_lp_can_rx0
|
|
.word hdr_can_rx1
|
|
.word hdr_can_sce
|
|
.word hdr_exti9_5
|
|
.word hdr_tim1_brk
|
|
.word hdr_tim1_up
|
|
.word hdr_tim1_trg_com
|
|
.word hdr_tim1_cc
|
|
.word hdr_tim2
|
|
.word hdr_tim3
|
|
.word hdr_tim4
|
|
.word hdr_i2c1_event
|
|
.word hdr_i2c1_error
|
|
.word hdr_i2c2_event
|
|
.word hdr_i2c2_error
|
|
.word hdr_spi1
|
|
.word hdr_spi2
|
|
.word hdr_usart1
|
|
.word hdr_usart2
|
|
.word hdr_usart3
|
|
.word hdr_exti15_10
|
|
.word hdr_rtc_alarm
|
|
.word hdr_usb_wakeup
|
|
.word hdr_tim8_brk
|
|
.word hdr_tim8_up
|
|
.word hdr_tim8_trg_com
|
|
.word hdr_tim8_cc
|
|
.word hdr_adc3
|
|
.word hdr_fsmc
|
|
.word hdr_sdio
|
|
.word hdr_tim5
|
|
.word hdr_spi3
|
|
.word hdr_uart4
|
|
.word hdr_uart5
|
|
.word hdr_tim6
|
|
.word hdr_tim7
|
|
.word hdr_dma2_channel1
|
|
.word hdr_dma2_channel2
|
|
.word hdr_dma2_channel3
|
|
.word hdr_dma2_channel4_5
|
|
|
|
//--Weak definitions------------------------------------------------------------
|
|
|
|
.weak hdr_nmi
|
|
.thumb_set hdr_nmi, hdr_default
|
|
|
|
.weak hdr_hard_fault
|
|
.thumb_set hdr_hard_fault, hdr_default
|
|
|
|
.weak hdr_mem_manage
|
|
.thumb_set hdr_mem_manage, hdr_default
|
|
|
|
.weak hdr_bus_fault
|
|
.thumb_set hdr_bus_fault, hdr_default
|
|
|
|
.weak hdr_usage_fault
|
|
.thumb_set hdr_usage_fault, hdr_default
|
|
|
|
.weak hdr_svc
|
|
.thumb_set hdr_svc, hdr_default
|
|
|
|
.weak hdr_debug_monitor
|
|
.thumb_set hdr_debug_monitor, hdr_default
|
|
|
|
.weak hdr_pend_sys_service
|
|
.thumb_set hdr_pend_sys_service, hdr_default
|
|
|
|
.weak hdr_sys_tick
|
|
.thumb_set hdr_sys_tick, hdr_default
|
|
|
|
.weak hdr_wwdg
|
|
.thumb_set hdr_wwdg, hdr_default
|
|
|
|
.weak hdr_pvd
|
|
.thumb_set hdr_pvd, hdr_default
|
|
|
|
.weak hdr_tamper
|
|
.thumb_set hdr_tamper, hdr_default
|
|
|
|
.weak hdr_rtc
|
|
.thumb_set hdr_rtc, hdr_default
|
|
|
|
.weak hdr_flash
|
|
.thumb_set hdr_flash, hdr_default
|
|
|
|
.weak hdr_rcc
|
|
.thumb_set hdr_rcc, hdr_default
|
|
|
|
.weak hdr_exti0
|
|
.thumb_set hdr_exti0, hdr_default
|
|
|
|
.weak hdr_exti1
|
|
.thumb_set hdr_exti1, hdr_default
|
|
|
|
.weak hdr_exti2
|
|
.thumb_set hdr_exti2, hdr_default
|
|
|
|
.weak hdr_exti3
|
|
.thumb_set hdr_exti3, hdr_default
|
|
|
|
.weak hdr_exti4
|
|
.thumb_set hdr_exti4, hdr_default
|
|
|
|
.weak hdr_dma1_channel1
|
|
.thumb_set hdr_dma_channel1, hdr_default
|
|
|
|
.weak hdr_dma1_channel2
|
|
.thumb_set hdr_dma_channel2, hdr_default
|
|
|
|
.weak hdr_dma1_channel3
|
|
.thumb_set hdr_dma_channel3, hdr_default
|
|
|
|
.weak hdr_dma1_channel4
|
|
.thumb_set hdr_dma_channel4, hdr_default
|
|
|
|
.weak hdr_dma1_channel5
|
|
.thumb_set hdr_dma_channel5, hdr_default
|
|
|
|
.weak hdr_dma1_channel6
|
|
.thumb_set hdr_dma_channel6, hdr_default
|
|
|
|
.weak hdr_dma1_channel7
|
|
.thumb_set hdr_dma_channel7, hdr_default
|
|
|
|
.weak hdr_adc1_2
|
|
.thumb_set hdr_adc1_2, hdr_default
|
|
|
|
.weak hdr_hp_can_tx
|
|
.thumb_set hdr_hp_can_tx, hdr_default
|
|
|
|
.weak hdr_lp_can_rx0
|
|
.thumb_set hdr_lp_can_rx0, hdr_default
|
|
|
|
.weak hdr_can_rx1
|
|
.thumb_set hdr_can_rx1, hdr_default
|
|
|
|
.weak hdr_can_sce
|
|
.thumb_set hdr_can_sce, hdr_default
|
|
|
|
.weak hdr_exti9_5
|
|
.thumb_set hdr_exti9_5, hdr_default
|
|
|
|
.weak hdr_tim1_brk
|
|
.thumb_set hdr_tim1_brk, hdr_default
|
|
|
|
.weak hdr_tim1_up
|
|
.thumb_set hdr_tim1_up, hdr_default
|
|
|
|
.weak hdr_tim1_trg_com
|
|
.thumb_set hdr_tim1_trg_com, hdr_default
|
|
|
|
.weak hdr_tim1_cc
|
|
.thumb_set hdr_tim1_cc, hdr_default
|
|
|
|
.weak hdr_tim2
|
|
.thumb_set hdr_tim2, hdr_default
|
|
|
|
.weak hdr_tim3
|
|
.thumb_set hdr_tim3, hdr_default
|
|
|
|
.weak hdr_tim4
|
|
.thumb_set hdr_tim4, hdr_default
|
|
|
|
.weak hdr_i2c1_event
|
|
.thumb_set hdr_i2c1_event, hdr_default
|
|
|
|
.weak hdr_i2c1_error
|
|
.thumb_set hdr_i2c1_error, hdr_default
|
|
|
|
.weak hdr_i2c2_event
|
|
.thumb_set hdr_i2c2_event, hdr_default
|
|
|
|
.weak hdr_i2c2_error
|
|
.thumb_set hdr_i2c2_error, hdr_default
|
|
|
|
.weak hdr_spi1
|
|
.thumb_set hdr_spi1, hdr_default
|
|
|
|
.weak hdr_spi2
|
|
.thumb_set hdr_spi2, hdr_default
|
|
|
|
.weak hdr_usart1
|
|
.thumb_set hdr_usart1, hdr_default
|
|
|
|
.weak hdr_usart2
|
|
.thumb_set hdr_usart2, hdr_default
|
|
|
|
.weak hdr_usart3
|
|
.thumb_set hdr_usart3, hdr_default
|
|
|
|
.weak hdr_exti15_10
|
|
.thumb_set hdr_exti15_10, hdr_default
|
|
|
|
.weak hdr_rtc_alarm
|
|
.thumb_set hdr_rtc_alarm, hdr_default
|
|
|
|
.weak hdr_usb_wakeup
|
|
.thumb_set hdr_usb_wakeup, hdr_default
|
|
|
|
.weak hdr_tim8_brk
|
|
.thumb_set hdr_tim8_brk, hdr_default
|
|
|
|
.weak hdr_tim8_up
|
|
.thumb_set hdr_tim8_up, hdr_default
|
|
|
|
.weak hdr_tim8_trg_com
|
|
.thumb_set hdr_tim8_trg_com, hdr_default
|
|
|
|
.weak hdr_tim8_cc
|
|
.thumb_set hdr_tim8_cc, hdr_default
|
|
|
|
.weak hdr_adc3
|
|
.thumb_set hdr_adc3, hdr_default
|
|
|
|
.weak hdr_fsmc
|
|
.thumb_set hdr_fsmc, hdr_default
|
|
|
|
.weak hdr_sdio
|
|
.thumb_set hdr_sdio, hdr_default
|
|
|
|
.weak hdr_tim5
|
|
.thumb_set hdr_tim5, hdr_default
|
|
|
|
.weak hdr_spi3
|
|
.thumb_set hdr_spi3, hdr_default
|
|
|
|
.weak hdr_uart4
|
|
.thumb_set hdr_uart4, hdr_default
|
|
|
|
.weak hdr_uart5
|
|
.thumb_set hdr_uart5, hdr_default
|
|
|
|
.weak hdr_tim6
|
|
.thumb_set hdr_tim6, hdr_default
|
|
|
|
.weak hdr_tim7
|
|
.thumb_set hdr_tim7, hdr_default
|
|
|
|
.weak hdr_dma2_channel1
|
|
.thumb_set hdr_dma_channel1, hdr_default
|
|
|
|
.weak hdr_dma2_channel2
|
|
.thumb_set hdr_dma_channel2, hdr_default
|
|
|
|
.weak hdr_dma2_channel3
|
|
.thumb_set hdr_dma_channel3, hdr_default
|
|
|
|
.weak hdr_dma2_channel4_5
|
|
.thumb_set hdr_dma_channel4_5, hdr_default
|
|
|