This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

我使用的是80M的时钟频率,使用示波器看 SysCtlDelay(13333);     延时的时间是1ms,但是为什么SysCtlDelay(266660);     延时的时间才10ms左右,而不是20ms呢?

  • 你测的延时时间是否是单纯测的延时程序,有没有把其它的程序段的运行时间也当作延时程序的一部分计算进去了?

  • 楼主能把代码贴上来吗?

     

    对于SysCtlDelay这个函数,大概的估算,执行SysCtlDelay(1)的话,需要3个时钟周期。

    所以,产生1ms的话,应该是SysCtlDelay((80M)/ 3000);应该是SysCtlDelay(26666)。

    产生10ms的话,应该是SysCtlDelay((80M)/ 300);应该是SysCtlDelay(266666)。

    看起来你的第二个写法和结论是正确的,反倒是1ms的写法不对。

    建议写一个最简单的主函数,里面只执行初始化时钟、GPIO和翻转IO的操作,来测试延时。

     

  • 你好,你可以参考如下链接

    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,我想你应该是算错了!

  • 我原来计算的1mS确实是SysCtlDelay(266666)。但是就是用IO口翻转的时候测试发现(133333)为1ms。