This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我将我的系统时钟频率设置为80MHz、不知道为什么 SysCtlDelay (10000000);延迟了750ms、而不是375ms。
我使用逻辑分析仪测试了 SPIWritePacket 函数、如下图所示、延迟为750ms、而不是375ms。
这是用于测试 SPIWritePacket()和 SysCtlDelay(10000000)的代码。
我用于设置系统频率的代码是 SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
这是用于测试 SPIWritePacket()和 SysCtlDelay(10000000)的代码。
Scott、您好!
SysCtlDelay()执行需要三个周期。 因此、如果你调用 SysCtlDelay (SysCtlClockGet ())、它将得到1s * 3、等于3s 的延迟。 如果你想获得1s 延迟、你应该调用 SysCtlDelay (SysCtlClockGet ()/3)。 如果你想得到375ms、那么你应该调用 SysCtlDelay (SysCtlClockGet ()/3 * 375/1000)。 尝试对所有三个调用进行实验、以了解延迟是如何工作的。
SysCtlDelay (SysCtlClockGet ())
SysCtlDelay (SysCtlClockGet ()/3)
SysCtlDelay (SysCtlClockGet ()/3 * 375/1000)
尊敬的 Charles:
是的、我知道这一点、但我要说的是理论与实验值不匹配、我想知道是什么导致了它。
理论上、SysCtlDelay (10M)应该是1/ 80MHz * 10M * 3 = 0.375s、但在逻辑分析仪上、我得到的是0.75、而不是0.375
Scott、您好!
请使用 ROM_SysCtlDelay、而不是 SysCtlDelay。 当 SysCtlDelay 被执行时、由于编译器优化、延迟可能会变化。 请使用 ROM_SysCtlDelay、因为函数在 ROM 存储器中所用周期的数量是固定的。