assembly - 延迟 NIOS 2 组装

标签 assembly delay nios

描述:
我准备好了! 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

请给我一个延迟代码的例子来帮助我。或者通过修复我的代码。也请提供建设性意见,以便我可以理解您的逻辑。谢谢

最佳答案

下面是一个例子

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 秒

希望对你有帮助

关于assembly - 延迟 NIOS 2 组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885581/

相关文章:

c - 如何使用GCC将C代码编译成8088汇编?

assembly - 处理器之间的转换

c - 内核环境 : RSDP points to invalid RSDT

ios - 如何跟踪内存中地址的值?

java执行器延迟不工作

jquery - 如何延迟jquery动画?

swift - 如何在SpriteKit中循环延迟?

c - Nios 2 "Hello World"?

c - 分析 &、&& 和 |对于这个代码?

assembly - 负载词和移动词之间的区别?