Есть микроконтроллер STML051, надо внутри тела программы запустить внутренний загрузчик ST. В памяти есть место для записи определеного маркера по которому будет происходить сравнение при сбросе 0x200017F0.
При сбросе проц прыгает в Reboot_Loader и через некоторое время ресетится... В чем может быть проблема?
стартап файл:
CODE
Reset_Handler
/* Bootloader jumping */
ldr r0, =0x200017F0
ldr r1, =0xDEADBEEF
ldr r2, [r0, #0]
str r0, [r0, #0]
cmp r2, r1
beq Reboot_Loader
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0
файл загрузчика:
CODE
RSEG CODE:CODE(2)
THUMB
PUBLIC Reboot_Loader
Reboot_Loader
LDR R0, =0x40021034 ; RCC_APB2ENR (+0x34)
LDR R1, =0x00000001 ; ENABLE SYSCFG CLOCK
STR R1, [R0, #0]
LDR R0, =0x40010000 ; SYSCFG_CFGR1 (+0x00)
LDR R1, =0x00000001 ; MAP ROM AT ZERO
STR R1, [R0, #0]
LDR R0, =0x1FF00000 ; ROM BASE (STM32L051)
LDR R1, [R0, #0] ; SP @ +0
MOV SP, R1
LDR R0, [R0, #4] ; PC @ +4
BX R0
END