SysCtlDelay 实现延时

SysCtlDelay 实际上由 3 条汇编指令实现,一次可以延时 3 个 clock.

例如,初始化系统时钟:

SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_OSC), 16000000);

那么,可以实现毫秒延时函数为:

void delay_ms(uint32_t ms)
{
  SysCtlDelay(ms*16000/3);
}

但是,这个延时函数有个限制,最多只能延时 805 秒多,因为 最多 0xFF FF FF FF * 3 个 clock,秒数更大的话就溢出了。

要实现更多秒数的延时,可以用循环来实现,例如:

void delay_sec(uint32_t s)
{
  int i;
  for(i=0;i<s;i++)
    SysCtlDelay(16000000/3);
}

但是这样有误差,因为 for 循环控制本身也有几条汇编指令,只能用于大致的计时使用。

原文地址:https://www.cnblogs.com/elodio/p/SysCtlDelay.html