Cortex-R5 PMU周期计数器未正确计数时间

时间:2019-06-26 02:42:44

标签: arm

我为PMCCNTR正确配置了PMU,以便在运行FreeRTOS的Cortex-R5上打勾。我将省略配置代码,因为在许多其他StackOverflow问题上已经重复了该配置代码。我认为配置正确,因为我尝试运行

__asm__ volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr))

周期性地,我能够看到pmccntr变量单调增加并在(2 ^ 32-1)之后翻转。

CPU运行速度为800Mhz,因此我希望,如果我在1Hz任务中读取PMCCNTR,我会注意到该值会增加800Mhz。但是,在1Hz任务调用之间PMCCNTR之间的差异更像是7200万。我还尝试过使用64时钟分频器,以确保观察结果合理。

我的数学正确吗?还是我使用了错误的数字作为CPU频率?确定PMCCNTR应该以什么频率计数的确定方法是什么?

这是没有公开文档的定制硅片,因此800 MHz以上是标称值。

更新:根本原因是@Sean Houlihane指出的WFI

1 个答案:

答案 0 :(得分:1)

只要未禁用计数器且内核未处于调试状态,PMCCNTR便会以内核时钟运行。如果您计算72 MHz / 1.125 MHz,那么您的内核很有可能以外部晶振频率运行,而不是内部PLL。

另一个可能的解释是,内核在大多数时间都处于WFI状态且时钟已停止-在这种情况下,您测量的结果将受到操作系统完成工作量的影响。