我使用的是80M的时钟频率,使用示波器看 SysCtlDelay(13333); 延时的时间是1ms,但是为什么SysCtlDelay(266660); 延时的时间才10ms左右,而不是20ms呢?
Michael Sun:
楼主能把代码贴上来吗?
对于SysCtlDelay这个函数,大概的估算,执行SysCtlDelay(1)的话,需要3个时钟周期。
所以,产生1ms的话,应该是SysCtlDelay((80M)/ 3000);应该是SysCtlDelay(26666)。
产生10ms的话,应该是SysCtlDelay((80M)/ 300);应该是SysCtlDelay(266666)。
看起来你的第二个写法和结论是正确的,反倒是1ms的写法不对。
建议写一个最简单的主函数,里面只执行初始化时钟、GPIO和翻转IO的操作,来测试延时。
peng huifeng:
你好,你可以参考如下链接
http://home.eeworld.com.cn/my/space-uid-166710-blogid-39342.html
SysCtlDelay()函数采用三个汇编指令实现精确延时,
SysCtlDelay(unsigned long ulCount){ subs r0, #1; bne SysCtlDelay; bx lr;};
针对你所说的情况,应该是3*13333/(80*10-6) = 0.4999875ms,所以 SysCtlDelay(13333)延时的时间应该是0.5ms,我想你应该是算错了!
user3770609:
回复 Michael Sun:
我原来计算的1mS确实是SysCtlDelay(266666)。但是就是用IO口翻转的时候测试发现(133333)为1ms。