Arm Cortex-R5 PMU循环计数器计数时间不正确

Arm Cortex-R5 PMU循环计数器计数时间不正确,arm,Arm,我已正确配置PMU,以便在运行FreeRTOS的Cortex-R5上勾选PMCCNTR。我将省略配置代码,因为它已在许多其他StackOverflow问题上重复。我相信配置是正确的,因为我尝试运行 \uuuu asm\uuuuuuuuuuuuuuu volatile(“mrc p15,0,%0,c9,c13,0”:“=r”(pmccntr)) 周期性地,我能够看到pmccntr变量单调增加,并在(2^32-1)之后滚动 CPU的运行频率为800Mhz,因此我预计如果在1Hz任务中读取PMCCNT

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

\uuuu asm\uuuuuuuuuuuuuuu 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
计数频率的确定方法是什么


更新:根本原因是WFI,正如@Sean Houlihane所指出的那样

只要计数器未被禁用且内核未处于调试状态,PMCCNTR就会以内核时钟运行。如果你计算72兆赫/1.125兆赫,那么很有可能你的核心运行在外部晶体频率,而不是从内部锁相环


另一种可能的解释是,内核处于WFI状态,时钟在大部分时间内都会停止-在这种情况下,您测量的结果将受到操作系统所做工作量的影响。

我只能说,应该可以在IO引脚上输出内部cpu时钟,因为您没有给出任何关于cpu时钟的详细信息这个平台。@SeanHoulihane的cpu频率可能有那么高:粗略搜索:TI的运行频率为330MHz和。R核:
速度等级为-3时的最大RPU时钟频率600
。所以800MHz并不遥远,它实际上是开发者的ARM页面。你不能从你的信息中获得更多的第一方信息。你说的“72 MHz/1.125 MHz”是指72 MHz还是1.125 MHz?还是1.125-72Mhz范围内的任何数字?这些频率有什么特别之处?你编造的数字很烦人。div64位产生除法,仅此而已。你应该知道晶体的频率。