实验目标
利用timer使ACT灯闪烁
背景补充
timer的相关地址与其功能
根据流程图我们可以知道,timer实际上是每隔1s钟自加1,直到与其比较的寄存器相同时结束。
代码分析
ldr r0,=100000 |
在main.s文件中我们可以看到,这两句代码是通过r0设置等待时间,然后调用新函数实现timer的计时等待功能。
delay r2 |
在systemTimer.s中的Wait函数中,将r0传入的参数保存到r2中
.globl GetSystemTimerBase |
通过这个函数在r0中获取到timer的基地址,并使用lr返回。
ldrd r0,r1,[r2,#4] |
在这里我们使用的计数器counter有8字节,但是实际上每个寄存器只有4字节大小,所以每个counter都需要2个寄存器,所以使用ldrd指令,一次可以向一个地址中加载两个寄存器的值,r1是高字节,r0是低字节,非常方便。
此时我们就可以通过loop函数进行逐次比较了。
结果展示
与上个实验现象相同