59 lines
851 B
ArmAsm
59 lines
851 B
ArmAsm
.syntax unified
|
|
.cpu cortex-m4
|
|
.thumb
|
|
|
|
.equ SYSTICK_OFFSET, 0xE000E010
|
|
|
|
.section .text
|
|
|
|
vtable:
|
|
.word __stack_start
|
|
.word __hard_reset__+1
|
|
v2_img_start:
|
|
.incbin "lab1_v2.bin"
|
|
v2_img_end: @ ==__hard_reset__
|
|
|
|
__hard_reset__:
|
|
bl load_systick_timer
|
|
bl lab1_v1
|
|
|
|
bl bootload_v2
|
|
|
|
|
|
readloop:
|
|
ldr.n r0, [r7, #8]
|
|
b.n readloop
|
|
|
|
load_systick_timer:
|
|
@ SysTick_LOAD
|
|
ldr.n r7, =SYSTICK_OFFSET
|
|
mov r1, #0x1
|
|
lsl r1, #20
|
|
str.n r1, [r7, #4]
|
|
|
|
@ SysTick_CTRL
|
|
mov r1, #0x1
|
|
str.n r1, [r7]
|
|
|
|
mov pc, lr
|
|
|
|
bootload_v2:
|
|
push {lr}
|
|
|
|
@ bootload to ram
|
|
ldr.n r0, =v2_img_start
|
|
ldr.n r1, =v2_img_end
|
|
ldr.n r3, =__ram_start
|
|
|
|
copy_loop:
|
|
ldrh r2, [r0], #2
|
|
strh r2, [r3], #2
|
|
cmp.n r0, r1
|
|
bne.n copy_loop
|
|
|
|
ldr.n r3, =__ram_start
|
|
add r3, r3, #1
|
|
blx r3
|
|
|
|
pop {pc}
|