是不是任何晶振情况下,SysCtlDelay(SysCtlClockGet() / (1000 * 3));都是延时1MS
还有如果主频是 ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ); //系统时钟设置 16M
那么是否可以直接写SysCtlDelay(16000000 / (1000 * 3));和SysCtlDelay(SysCtlClockGet() / (1000 * 3));效果一样,
还有这种情况下16M的TM4C123的系统时钟是多少?
SysCtlClockGet() 取得的就是系统时钟,像你例子中写的就是 16Mhz,SysCtlDelay(SysCtlClockGet() / (1000 * 3)) 这个既然以系统时钟做为参数,自然与晶振无直接关系了。晶振确定了系统时钟,系统时钟就确定了执行单条指令的时间,SysCtlDelay(SysCtlClockGet())是三秒,因为 SysCtlDelay 执行一轮是 三个时钟。
那么这个运行一轮的时长都是固定的3个时钟吗,我有看过新唐M0的库,里面也是乘以3,这个是Cortex内核决定的吗?
SysCtlDelay(SysCtlClockGet()/3000) 这个函数执行的结果就是延时1ms,无论你的系统时钟是多少,当然
你的系统时钟是不能低于3K的。
SysCtlClockGet()函数返回的值是系统的频率,也就是1S钟的CLOCK个数,这个个数/1000就是1ms系统时钟
的个数,由于SysCtlDelay函数一个循环判断执行需要3个CLOCK时钟,所以系统时钟/3000就表示系统执行
1ms的时间。