大家好!
我正在进行一个使用 TM4C123BH6PGE 微控制器的项目、遇到了一个奇怪的时序延迟问题。 我正在利用`SysCtlDelay`执行一个简单的延迟函数、但我观察到、在我注释掉了一些 LED 闪烁代码后、延迟持续时间意外增加了一倍。 我希望获得一些有关可能导致此行为的见解或建议。
时钟配置:
我的系统时钟配置如下:
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
```
系统时钟初始化:
g_ui32SysClock = SysCtlClockGet ();//这获取了系统时钟速率
延迟功能:
void Timer_Simple ay(Uint32_t 毫秒)
{
uint32_t sleep =(g_ui32SysClock / 3000)*毫秒;
SysCtlDelay (睡眠);
}
我`此函数来创建一个延迟、例如、`í n Timer_Simple (3000); í n 为3秒的延迟。 但是、测量结果显示等待时间为6秒、而不是3秒。
当我注释掉 LED 闪烁代码时、这种计时差异开始、代码如下所示:
void MainLoopLedRunner()
{
if (u8LedDelayCount % 40 == 0)
{
if (!bLedStatus)
{
GPIOPinWrite (GPIO_PORTK_BASE、GPIO_PIN_1、GPIO_PIN_1);
bLedStatus = true;
}
否则
{
GPIOPinWrite (GPIO_PORTK_BASE、GPIO_PIN_1、0x0);
bLedStatus = false;
}
u8LedDelayCount = 0;
}
u8LedDelayCount++;
}
有人能解释`SLED 闪烁函数为什么会导致` ysCtlDelay 时序加倍? 乍一看,这似乎是不相关的,但问题始终是可重复的。 我在这里遗漏了什么?
提前感谢您提供任何建议或见解!