Thread 中讨论的其他器件:SysConfig
我正在使用一 个定制板、它具有甲烷传感器、需要加热 n 秒才能获得准确的读数。 为此、我有一个运行1秒的计时器。 在回调 n 次后 、设置一个标志、读数可被视为有效读数。 我遇到的问题是、调用回调的速度比每1秒要快得多。 该计时是系统的关键部分。
该计时器在.syscfg 中设置为32位计时器。 我的理解是、32位计时器可以实现的最大时间仅超过89秒(2^32个周期/48MHz)、因此我不能完全确定问题是什么。 计时器周期远低于计时器的限制。
定时器初始化:
Timer_Params methaneTimerParams; Timer_Params_init(&methaneTimerParams); //Set the timer parameters methaneTimerParams.period = 1000000; //1 second period methaneTimerParams.periodUnits = Timer_PERIOD_US; methaneTimerParams.timerMode = Timer_CONTINUOUS_CALLBACK; methaneTimerParams.timerCallback = HeaterTimeoutCb;
尝试对此进行调试时、我在 回调函数的开头放置了"uint32_t testCount = Timer_getCount (handle);"。 这种情况造成了巨大的不一致价值,从几百到数千万不等。 我希望这是一个一致的值、因为它是回调函数的第一行。
计时器回调:
void HeaterTimeoutCb
(
Timer_Handle handle,
int_fast16_t status
)
{
uint32_t testCount = Timer_getCount(handle);
timerSeconds.secondsWaited++;
if (timerSeconds.secondsToWait <= timerSeconds.secondsWaited)
{
heaterWarmingComplete = true;
Timer_stop(handle);
}
}
此项目中有另一个计时器控制 LED 闪烁 、该计时器具有相同的确切参数、但其模式为 Timer_OneShot_callback。 该计时器按预期工作、每秒调用一次回调。 我在两个计时器之间交换了计时器外设、它们仍然具有相同的行为。
我不明白这两个计时器的行为为何如此不同、以及加热计时器为何不以正确的间隔调用它的回调。 导致此行为的原因可能是什么? Timer_Continuous_callback 模式是否会导致回调速度快于每秒一次、或者是否存在更深层次的问题?
Tim