假设我希望内部循环为 1ms 长并且想要计算 delaycount 参数。我们知道 F = 50 Mhz。
我们可以清楚地看到内循环中有3条指令。我们还假设指令每个需要 1 个周期。因此结果是:
.equ delaycount, 0 #set right delay value here!
.text #
.global delay #
delay11: beq r4,r0,fin # exit outer loop
movi r8,delaycount # delay estimation for 1ms
in: beq r8,r0,out # exit from inner loop
subi r8,r8,1 # decrement inner counter
br in
out: subi r4,r4,1 # decrement outer counter
br delay11
fin: ret
解决方案 :
F = 50 兆赫 T = 20 ns
1ms = 20ns * 3 * 延迟计数
延迟计数 = 1ms/3*20ns = 16666
但是,该解决方案提供 delaycount 等于12000。有人能证明这是正确的吗?