Gaviar (小志掌機) >> Assembly
Button
參考資訊:
1. ws2812c
2. Delay_slot
3. FlatHeadBro
按鍵R連接到PE1

GPIO位址

PE_CFG0

PE_DAT

main.s
.global _start
.equ GPIO_BASE, 0x02000000
.equ PE_CFG0, 0x00c0
.equ PE_DAT, 0x00d0
.equ PE_PULL0, 0x00e4
.equ _50NS, 10
.equ _100NS, 20
.equ _200NS, 40
.equ _300NS, 60
.equ _400NS, 80
.equ _450NS, 90
.equ _800NS, 160
.equ _850NS, 170
.equ _1US, 200
.equ _500US, 100000
.equ _1S, 200000000
.text
.long 0x4000006f
.byte 'e','G','O','N','.','B','T','0'
.long 0x5F0A6C39
.long 0x8000
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.org 0x0400
_start:
li t0, 0x100000
li a0, GPIO_BASE + PE_CFG0
sw t0, 0(a0)
li t0, 0x55555555
li a0, GPIO_BASE + PE_PULL0
sw t0, 0(a0)
li a0, GPIO_BASE + PE_DAT
0:
lw t0, 0(a0)
not t0, t0
and t0, t0, (1 << 1)
sll t0, t0, 11
jal b24
li t0, _500US
jal delay
j 0b
b24:
move t2, ra
move t3, t0
li t4, 24
0:
and t0, t3, 1
srl t3, t3, 1
beqz t0, 1f
jal b1
j 2f
1:
jal b0
2:
addi t4, t4, -1
bgtz t4, 0b
jr t2
b0:
move t1, ra
li t0, (1 << 5)
sw t0, 0(a0)
li t0, _300NS
jal delay
li t0, (0 << 5)
sw t0, 0(a0)
li t0, _850NS
jal delay
jr t1
b1:
move t1, ra
li t0, (1 << 5)
sw t0, 0(a0)
li t0, _800NS
jal delay
li t0, (0 << 5)
sw t0, 0(a0)
li t0, _400NS
jal delay
jr t1
delay:
addi t0, t0, -1
bgtz t0, delay
jr ra
.end
完成
