Как сделать цикл в сборке NIOS II
Так что я пытаюсь добиться, чтобы светодиоды на моем микроконтроллере мигали взад и вперед с помощью петли. До сих пор я смог заставить светодиоды мигать справа налево, используя этот код
.equ LEDS, 0x10000010
.text
.global _start
_start: movia r2, LEDS
movi r3, 0b10000000
movi r4, 0x7FFF
slli r4, r4, 3
add r4, r4, r4
load: movi r5, 0b00000001
loop: stw r5, 0(r2)
mov r6, r0
count: addi r6, r6, 1
bne r6, r4, count
beq r5, r3, load
roli r5, r5, 1
br loop
а также мигать слева направо, используя этот код
.equ LEDS, 0x10000010
.text
.global _start
_start: movia r2, LEDS
movi r3, 0b00000001
movi r4, 0x7FFF
slli r4, r4, 3
add r4, r4, r4
load: movi r5, 0b10000000
loop: stw r5, 0(r2)
mov r6, r0
count: addi r6, r6, 1
bne r6, r4, count
beq r5, r3, load
roli r5, r5, -1
br loop
Беда, с которой я столкнулся, состоит в том, чтобы объединить их так, чтобы они мигали слева направо, а затем обратно справа налево в цикле. Нужно ли вносить изменения в регистры цикла или количество?
1 ответ
Решение
Текущий код разветвляется на load
когда r5
равно r3
, Вместо этого он должен перейти к другому набору кода. Другими словами, после перемещения справа налево перейдите к коду, который мигает светодиодом слева направо, и наоборот. Полученный код выглядит так:
.equ LEDS, 0x10000010
.text
.global _start
_start: movia r2, LEDS
movi r4, 0x7FFF
slli r4, r4, 3
add r4, r4, r4
goleft: movi r3, 0b10000000
movi r5, 0b00000001
lloop: stw r5, 0(r2)
mov r6, r0
lcount: addi r6, r6, 1
bne r6, r4, lcount
beq r5, r3, goright
roli r5, r5, 1
br lloop
goright: movi r3, 0b00000001
movi r5, 0b10000000
rloop: stw r5, 0(r2)
mov r6, r0
rcount: addi r6, r6, 1
bne r6, r4, rcount
beq r5, r3, goleft
roli r5, r5, -1
br rloop