描述:
我准备好了! NIOS 2程序集中的程序。流程应如下所示:
start
|
One LED
delay 1 Sec
|
Four LED
delay 3 Sec
|
Eight LED
Go!
问题:
我不知道如何编制Nios 2 Assembly中的延迟。我找不到一个很好的例子而且我不知所措。
我的工作:
下面的代码在Altera监控程序中是可以兼容的。我开始尝试计时器,无法产生任何有用的东西。请参阅代码中的阻止部分。
我的代码:
.data
.equ TIMER_BASE, 0x10002000
.equ PERIOD, 0x1111ffff
.equ DELAY, 20
.equ LED, 0x10000010
.text
.global _start
_start:
movia r4, TIMER_BASE
movi r5, 6
movia r2, PERIOD #load initial timer values
stwio r2, 8(r4)
srli r2, r2, 16
stwio r2, 12(r4)
stwio r5, 4(r4) #start the timer
movi r6, DELAY #delay
oneLED:
movi r14, 0b10000000 #turn on One LED
movia r15, LED
stw r14, 0(r15)
br fourLED
##############
DELAY:
subi r6,r6,1 #subtract 1 from delay
bne r6,r0, DELAY #continue subtracting if delay not elapsed
br DELAY #delay elapsed, redo the LOOP
##############
fourLED:
movi r14, 0b11110000 #turn on Four LEDs
movia r15, LED
stw r14, 0(r15)
br eightLED
eightLED:
movi r14, 0b11111111 #turn on Eight LEDs
movia r15, LED
stw r14, 0(r15)
br oneLED
请给我一个延迟代码示例。或者通过修复我的代码。另外请提供建设性意见,以便我了解您的逻辑。感谢
答案 0 :(得分:2)
以下是一个例子
delay: movia r2, 25000000
wasteTime: subi r2,r2, 1
bne r2, r0, wasteTime
ret
现在计算上面子程序有多少延迟:
我们知道cpu clock = 50MHz 每条指令大约需要1个cpu时钟
每条指令的时间= 1 / f = 1 / 50MHz = 20 ns
所以在上面的子程序中,movia子程序由编译器分为2条指令,循环wasteTime有2条指令(subi,bne)
这样:
延迟=(2 + 2X25000000 + 1)X 20ns = 1秒
我希望这有帮助..