Cortex-M3 - SysTick NVIC 禁用 - 节能 FreeRTOS

问题描述 投票:0回答:1

我在 EFM32GG380F1024 上使用 FreeRTOS。 Cortex-M SysTick 用于 RTOS 时钟。低能耗 RTC (BURTC) 在睡眠期间用于生成定时唤醒呼叫。能量模式为 EM3(仅超低频仍在运行)。

一旦 FreeRTOS 通过

suppressTicksAndSleep
回调调用我,我就会执行以下操作:

  1. 通过调用
    __disable_irq()
    进入关键部分(全局禁用 IRQ)。
  2. 通过调用寄存器来禁用(至少我尝试过;目前无法工作)SysTick 中断
    SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
  3. 设置并启动低能耗RTC (BURTC)。
  4. 输入 EM3。

问题是,在进入能源模式后,SysTick 中断就会启动并唤醒设备。 这应该是不可能的,因为能量模式 3 会禁用 HF 和 LF 时钟,因此 Systick 计数器甚至不应该增加。

为什么这不能正确暂停 SysTick?

注意:下面是我的跟踪器的屏幕截图:

https://i.sstatic.net/c6CUO.jpg

arm embedded interrupt cortex-m freertos
1个回答
5
投票
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk

没有清除

CTRL
中的任何位。那条线应该是这样的

SysTick->CTRL &= ~(SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk)

清除

CLKSOURCE
ENABLE
的所有位。

© www.soinside.com 2019 - 2024. All rights reserved.