commit e4552941012ea76bbfebbcd9d88f18c40287650b
parent 1bb9104eb3c2827abad41cb80b96d3f5b2fc2f2d
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 13 Apr 2023 12:43:55 +0900
ssi nanmo wakarann
Diffstat:
M | mach.s | | | 70 | +++++++++++++++++++++++++++++++++++++++++++++++++--------------------- |
M | main.s | | | 2 | -- |
2 files changed, 49 insertions(+), 23 deletions(-)
diff --git a/mach.s b/mach.s
@@ -134,18 +134,43 @@ pll_lock:
lsl r1, r1, #5
str r1, [r0, #0x2c] // UART0_UARTLCR_H
-flash_read:
+ bl exit_xip
+
+ ldr r3, xip_ssi_base
+
+ mov r1, #0x06 // write enable
+ str r1, [r3, #0x60] // SSI: DR0
+ bl wait_ssi
+ bl ssi_drain
+
+ mov r1, #0x05 // read status register-1
+ str r1, [r3, #0x60] // SSI: DR0
+ bl wait_ssi
+ bl ssi_print
+ mov r1, #0x35 // read status register-2
+ str r1, [r3, #0x60] // SSI: DR0
+ bl wait_ssi
+ bl ssi_print
+ mov r1, #0x15 // read status register-3
+ str r1, [r3, #0x60] // SSI: DR0
+ bl wait_ssi
+ bl ssi_print
+
+ pop {pc}
+
+exit_xip:
+ push {lr}
+
ldr r3, xip_ssi_base
// disable ssi
mov r1, #0
str r1, [r3, #0x8] // SSI: SSIENR
- ldr r1, =((0 << 21) | (31 << 16) | (3 << 8))
+ ldr r1, =(0 << 21 | 7 << 16 | 3 << 8)
str r1, [r3, #0] // SSI: CTRLR0
- mov r1, #0
+ mov r1, #0 // NDF
str r1, [r3, #4] // SSI: CTRLR1
// setup SPI
- ldr r1, =((0x0 << 24) | (0 << 11) | (0 << 8) | (0 << 2) | 0)
- //ldr r1, =(0x03 << 24)
+ ldr r1, =(0x0 << 24 | 0 << 11 | 2 << 8 | 0 << 2 | 0)
mov r2, #0xf4
str r1, [r3, r2] // SSI: SPI_CTRLR0
// reenable SSI
@@ -155,17 +180,7 @@ flash_read:
mov r1, #0x00
str r1, [r3, #0x60] // SSI: DR0
bl wait_ssi
- bl ssi_pop
-
- ldr r3, xip_ssi_base
- mov r1, #0x03
- lsl r1, r1, #24
- mov r2, #1
- lsl r2, r2, #8
- add r1, r1, r2
- str r1, [r3, #0x60] // SSI: DR0
- bl wait_ssi
- bl ssi_pop
+ bl ssi_drain
pop {pc}
@@ -180,22 +195,35 @@ wait_ssi:
bne wait_ssi
bx lr
-ssi_pop:
+ssi_print:
push {r4, lr}
ldr r4, xip_ssi_base
-ssi_pop_loop:
+ssi_print_loop:
ldr r1, [r4, #0x28] // SSI: SR
mov r2, #8 // RFNE
tst r1, r2
- beq ssi_empty
+ beq ssi_print_empty
ldr r0, [r4, #0x60] // SSI: DR0
bl printh
mov r0, #'\n'
bl putchar
- b ssi_pop_loop
-ssi_empty:
+ b ssi_print_loop
+ssi_print_empty:
pop {r4, pc}
+ssi_drain:
+ push {lr}
+ ldr r3, xip_ssi_base
+ssi_drain_loop:
+ ldr r1, [r3, #0x28] // SSI: SR
+ mov r2, #8 // RFNE
+ tst r1, r2
+ beq ssi_drain_empty
+ ldr r0, [r3, #0x60] // SSI: DR0
+ b ssi_drain_loop
+ssi_drain_empty:
+ pop {pc}
+
unreset:
// unreset subsystems specified by r0
// args: bit mask to specify the subsystems to unreset
diff --git a/main.s b/main.s
@@ -5,6 +5,4 @@ main:
bl init
loop:
bl led_p2
- bl led_p2
- bl led_p2
b loop