卿枫~凌 发表于 2018-12-15 14:57:36

执行__WFI()导致系统滴答中断无法唤醒设备

1、在操作FreeRTOS时,本想着是在空闲钩子中执行__WFI()以降低设备功耗,等系统滴答中断自动唤醒设备继续执行,运行中发现执行__WFI()之后设备无法唤醒,分析应该是__WFI()将CPU内核时钟全部关闭了,导致滴答中断无法触发,不知道是不是这样的原因
2、如果__WFI()无法使用滴答中断唤醒,那能否用普通定时器唤醒,怎么样能够让普通定时器去替代系统滴答呢

希望有高人指点一二:D

stm1024 发表于 2018-12-15 17:35:00

看手册:
Wait for Interrupt WFI:
WFI (Wait For Interrupt) makes the processor suspend execution (Clock is stopped) until one of the following events take place:
An IRQ interrupt
An FIQ interrupt
A Debug Entry request made to the processor.

我的理解是,这个时候时钟是被关闭了,你需要依靠其他的中断来唤醒,而不能用SysTick的中断。
建议测试一下,即打印Systick当前Counter以后,进入WFI,然后在后面再跟一个打印Counter的函数,采用EXTI方式唤醒,看看这两个值是否变化不大(怀疑进入WFI需要几个时钟周期)?

卿枫~凌 发表于 2018-12-16 11:17:42

stm1024 发表于 2018-12-15 17:35
看手册:
Wait for Interrupt WFI:
WFI (Wait For Interrupt) makes the processor suspend execution (Cl ...

去看手册貌似明白了,执行__WFI之后,说是外部中断可以唤醒,我之前理解外部中断这个名字有偏差,看手册是出了前16个中断源之外,其他的所有内核之外的全部看为外部中断
页: [1]
查看完整版本: 执行__WFI()导致系统滴答中断无法唤醒设备