imx6s

时间:2018-02-21 08:00:09

标签: arm embedded imx6

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

根据technical reference manual for imx6s低功耗模式,处理器将在WFI之后传输,由LPMCLPCR寄存器配置(第855页)。我已将LPM位设置为0x0,即提到的RUN模式。根据我的理解,这应该足以使处理器处于任何类型的睡眠模式(在imx上等待或停止)。

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

假设我使用的是非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

1 个答案:

答案 0 :(得分:0)

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

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

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

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