.syntax unified .cpu cortex-m4 .thumb .equ SYSTICK_OFFSET, 0xE000E010 .section .text vtable: .word __stack_start .word __hard_reset__+1 .align 2 v2_img_start: .incbin "lab1_v2.bin" .align 2 v2_img_end: @ ==__hard_reset__ __hard_reset__: bl load_systick_timer bl lab1_v1 bl bootload_v2 readloop: ldr.n r0, [r7, #8] wfi 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: ldr r2, [r0], #4 str r2, [r3], #4 cmp.n r0, r1 bne.n copy_loop ldr.n r3, =__ram_start add r3, r3, #1 push {r3} blx r3 pop {r3} @ patch A ldr r0, =0x707ff64d @ 0xDF7F str r0, [r3, #0xb] push {r3} blx r3 pop {r3} @ patch A and B ldr r0, =0x000af240 @ 0x000A str r0, [r3, #0xb] ldr r0, =0x010af240 @ 0x000A str r0, [r3, #0xf] blx r3 pop {pc}