TI中文支持网
TI专业的中文技术问题搜集分享网站

关于延时函数的问题SysCtlDelay();

我使用的是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。

赞(0)
未经允许不得转载:TI中文支持网 » 关于延时函数的问题SysCtlDelay();
分享到: 更多 (0)