我在 EFM32GG380F1024 上使用 FreeRTOS。 Cortex-M SysTick 用于 RTOS 时钟。低能耗 RTC (BURTC) 在睡眠期间用于生成定时唤醒呼叫。能量模式为 EM3(仅超低频仍在运行)。
一旦 FreeRTOS 通过
suppressTicksAndSleep
回调调用我,我就会执行以下操作:
__disable_irq()
进入关键部分(全局禁用 IRQ)。SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
。问题是,在进入能源模式后,SysTick 中断就会启动并唤醒设备。 这应该是不可能的,因为能量模式 3 会禁用 HF 和 LF 时钟,因此 Systick 计数器甚至不应该增加。
为什么这不能正确暂停 SysTick?
注意:下面是我的跟踪器的屏幕截图:
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk
您没有清除
CTRL
中的任何位。那条线应该是这样的
SysTick->CTRL &= ~(SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk)
清除
CLKSOURCE
和 ENABLE
的所有位。