我使用的板子是TIVA TM4C123GH6PM。
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);这是时钟频率的配置,80MHZ。
然后我要实现延时,SysCtlDelay(20000000/3); 我计算的延时时间应该是(3*20000000/3)/80000000=0.25s,可是实际测量却是0.5s。
然后我将时钟频率改成了40MHZ. SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
SysCtlDelay(20000000/3); 发现延时是0.5s这个结果是对的。请问这是什么原因呢,我猜测会不会是因为,芯片内部Flash的读取频率最大只能达到40MHZ,当工作频率大于40MHz时,通过预取两个字的指令来达到80MHZ的运行主频。但是,当遇到SysCtlDelay函数这种短跳转时这个特性并不能很好的工作,每次都需要读取指令,所以时间就延长了
请问大家是这样吗?