Compare commits
5 Commits
57c787f87d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e54d5cd27 | |||
| 1a6d8232a4 | |||
| 9f8f207e4b | |||
| d7a311c06e | |||
| c1f9c00fc6 |
@@ -23,7 +23,7 @@ lab1_v2.bin: lab1_v2.S lab1_v2.ld
|
||||
|
||||
qemu: build
|
||||
qemu-system-gnuarmeclipse --verbose --verbose --board STM32F4-Discovery \
|
||||
--mcu STM32F407VG -d unimp,guest_errors --nographic \
|
||||
--mcu STM32F407VG -d unimp,guest_errors \
|
||||
--semihosting-config enable=on,target=native -s -S \
|
||||
--image start.bin
|
||||
|
||||
|
||||
@@ -8,16 +8,48 @@
|
||||
bkpt 0xAB
|
||||
.endm
|
||||
|
||||
#define A 0x0321
|
||||
#define B 0x7005
|
||||
#define C 0x0050
|
||||
|
||||
.section .text
|
||||
|
||||
lab1_v2:
|
||||
push.n {lr}
|
||||
|
||||
mov r0, #2073
|
||||
bl calculate_formula_v2
|
||||
bl int_to_str
|
||||
|
||||
pop.n {pc}
|
||||
|
||||
calculate_formula_v2:
|
||||
ldr r0, =A
|
||||
ldr r1, =B
|
||||
ldr r2, =C
|
||||
|
||||
cmp r0, r1
|
||||
bgt gret
|
||||
blt less
|
||||
|
||||
same: @ default
|
||||
add r2, r0, r2, lsr #3
|
||||
add r0, r2, r1
|
||||
b finish
|
||||
|
||||
gret:
|
||||
rsb r0, r0, #192
|
||||
sub r0, r0, r1
|
||||
add r0, r2, r0, lsl #2
|
||||
b finish
|
||||
|
||||
less:
|
||||
orr r1, r1, r2
|
||||
mul r0, r0, r1
|
||||
|
||||
finish:
|
||||
mov r10, r0
|
||||
mov pc, lr
|
||||
|
||||
int_to_str:
|
||||
mov r3, sp
|
||||
|
||||
@@ -45,7 +77,6 @@ int_to_str:
|
||||
cmp r0, #0
|
||||
bne proceed_with_conversion
|
||||
|
||||
finish:
|
||||
BKPT_WRITE r3
|
||||
|
||||
mov pc, lr
|
||||
|
||||
@@ -3,25 +3,30 @@
|
||||
.thumb
|
||||
|
||||
.equ SYSTICK_OFFSET, 0xE000E010
|
||||
.equ RCC_OFFSET, 0x40023800
|
||||
.equ GPIOD_OFFSET, 0x40020C00
|
||||
|
||||
.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 setup_leds
|
||||
bl load_systick_timer
|
||||
bl lab1_v1
|
||||
|
||||
bl bootload_v2
|
||||
|
||||
|
||||
readloop:
|
||||
ldr.n r0, [r7, #8]
|
||||
wfi
|
||||
b.n readloop
|
||||
|
||||
load_systick_timer:
|
||||
@@ -46,13 +51,49 @@ bootload_v2:
|
||||
ldr.n r3, =__ram_start
|
||||
|
||||
copy_loop:
|
||||
ldrh r2, [r0], #2
|
||||
strh r2, [r3], #2
|
||||
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}
|
||||
|
||||
setup_leds:
|
||||
@ RCC reset & enable GPIOD
|
||||
ldr r0, =RCC_OFFSET
|
||||
mov r1, #0x8
|
||||
str r1, [r0, #0x30] @ ENABLE
|
||||
|
||||
@ GPIOD config
|
||||
ldr r0, =GPIOD_OFFSET
|
||||
|
||||
ldr r1, =0x55000000
|
||||
str r1, [r0] @ Mode Register
|
||||
|
||||
mov r1, #0xF000
|
||||
str r1, [r0, #0x14] @ Output Data Register
|
||||
|
||||
mov pc, lr
|
||||
|
||||
Reference in New Issue
Block a user