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