commit 9d89be5ee9e205aceb5d1455db0c4a484c2c3057
parent 796627f94ce9100afdc1973ffb5d64a83ba20e5d
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 27 Apr 2023 10:31:04 +0900
make led functions for debugging
Diffstat:
M | ex2/main.s | | | 70 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- |
1 file changed, 62 insertions(+), 8 deletions(-)
diff --git a/ex2/main.s b/ex2/main.s
@@ -15,37 +15,91 @@ reset:
ldr r1, atomic_clr
str r0, [r3, r1] // RESETS: RESET
-reset_chk:
+unreset_chk:
ldr r1, [r3, #0x8] // RESETS: RESET_DONE
tst r0, r1
- beq reset_chk
+ beq unreset_chk
// set gpio functions
ldr r3, io_bank0_base
mov r0, #5 // sio
+ mov r1, #0xc4
+ str r0, [r3, r1] // IO_BANK0: GPIO24_CTRL
mov r1, #0xcc
str r0, [r3, r1] // IO_BANK0: GPIO25_CTRL
// enable gpio output
ldr r3, sio_base
- mov r0, #1
- lsl r0, r0, #25 // gpio25
+ mov r0, #3
+ lsl r0, r0, #24 // gpio25 | gpio24
str r0, [r3, #0x24] // SIO: GPIO_OE
+ // setup xosc
+
+
// blink led on gpio25
- ldr r4, sio_base
- mov r5, r0
loop:
- str r5, [r4, #0x1c] // SIO_GPIO_OUT_XOR
- bl delay
+ bl bled0
+ bl bled1
b loop
+// functions
+
+// The following functions make no side effects and
+// can be used anywhare without pushing and popping
+// registers.
+
+ // Print register content with 2 leds, lsb first.
+pled:
+ push {r0, r1, r2, r3, r4, r5, r6, lr}
+ mov r4, r0
+ mov r5, #32
+ mov r6, #1
+pled_loop:
+ tst r4, r6
+ beq pled0
+ bl bled1
+ b pled1
+pled0:
+ bl bled0
+pled1:
+ lsr r4, r4, #1
+ sub r5, r5, #1
+ bne pled_loop
+ pop {r0, r1, r2, r3, r4, r5, r6, pc}
+
+bled0:
+ push {r0, r1, r2, r3, lr}
+ mov r0, #1
+ lsl r0, r0, #24
+ bl bled
+ pop {r0, r1, r2, r3, pc}
+
+bled1:
+ push {r0, r1, r2, r3, lr}
+ mov r0, #1
+ lsl r0, r0, #25
+ bl bled
+ pop {r0, r1, r2, r3, pc}
+
+bled:
+ push {r0, r1, r2, r3, r4, r5, lr}
+ ldr r4, sio_base
+ mov r5, r0
+ str r5, [r4, #0x10] // SIO: GPIO_OUT_XOR
+ bl delay
+ str r5, [r4, #0x18] // SIO: GPIO_OUT_XOR
+ bl delay
+ pop {r0, r1, r2, r3, r4, r5, pc}
+
delay:
+ push {r0}
mov r0, #1
lsl r0, r0, #20
delay_loop:
sub r0, r0, #1
bne delay_loop
+ pop {r0}
bx lr
// literals