0

我想让基于 imx6s 的板上的 CPU 频率不变。即使是 WFI 呼叫也不应该受到影响。到目前为止,我看到处理器处于 WFI 模式期间 CPU 频率显着下降。

根据imx6s 低功耗模式的技术参考手册,处理器将在 之后被转移,由寄存器的位WFI配置(第 855 页)。我已将 LPM 位设置为 0x0,即所谓的 RUN 模式。据我了解,这应该足以不将处理器置于任何类型的睡眠模式(imx 上的等待或停止)。LPMCLPCR

这背后还有别的什么吗?我在这里错过了什么吗?

假设我使用非 linux 自定义环境。


附录(我测量的方式和内容):

实验如下: 1. 使用 WFI

p1 = ArmPmuGetCpuCycles()
Sleep(100 miliseconds)   <- here it goes to WFI
p2 = ArmPmuGetCpuCycles()
p2 - p1 = 600 microseconds

2. 没有 WFI

p1 = ArmPmuGetCpuCycles()
Sleep(100 miliseconds)   <- WFI is removed
p2 = ArmPmuGetCpuCycles()
p2 - p1 = 100 miliseconds
4

1 回答 1

0

CPU 睡眠模式和 DVFS 频率设置通常是正交省电技术。

WFI 通常可以触发时钟门控(停止时钟逻辑,已知空闲等待中断,但通常不会改变频率或电压,因为这些操作可能非常缓慢)。动态变化的电压和频率通常由 Cpufreq 等更高级别的内核驱动程序处理。

驱动动态 CPU 频率的 DVFS 策略的主要输入之一是利用率,因此如果您的软件在操作系统空闲循环中花费大量时间(它将在内部调用 WFI),那么更高级别的逻辑将决定您处于利用 CPU 并开始降低频率以节省电力。

更新鉴于您正在使用 PMU 测量频率,那么您看到的是 PMU 由于时钟门控而不是频率变化而停止增加。通常,如果您想保留一些系统时间的概念,您将需要一个不会进入低功耗模式的定时器外围设备;这些对于这个用例来说是广泛可用的,但可能有一个更粗略的测量粒度。

于 2018-02-21T22:24:35.413 回答