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 循环控制本身也有几条汇编指令,只能用于大致的计时使用。

相关文章:

  • 2022-01-29
  • 2022-03-10
  • 2021-10-20
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
  • 2021-06-25
猜你喜欢
  • 2021-09-01
  • 2021-12-04
  • 2021-08-27
  • 2021-10-11
  • 2022-02-18
  • 2021-12-29
  • 2021-10-12
相关资源
相似解决方案