Thread 中讨论的其他器件:SYSBIOS
您好-快速问题:
在 DRA75x A15内核上查找时间戳提供器的*。cfg 设置、以便所选的计时器以内核时钟周期(即内部 PMU)为单位。
因此使用 Timestamp_get32()可以得到内核的分辨率。
谢谢、
Eric
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Yordan、您好!
Eric 可能使用以下(类似) SDK 之一:
此致、
莱斯特
Eric、
有一个看起来基于 PMU 的模块 ti.sysbios.family.arm.v7a.Timer。 从模块说明中:
[引用]此模块利用 ARM v7A 处理器的性能监视器单元计数器来实现计时器。 PMU 计数器0配置为使用周期事件。 这会影响以 CPU 频率为事件计数器计时。 该计时器只能用于将 PMU 中断连接到处理器中断控制器的系统。[/QUERP]
在 DRA75x 上、针对 MPU 内核0和1、PMU 中断分别被映射至 MPU_IRQ_131 (ID163)和 MPU_IRQ_132 (ID164)。 因此、本模块应该适用、虽然我自己尚未对此进行实验、但我建议从这里开始。
我发现奇怪的是、这个模块不包含在 SYS/BIOS API 参考中。 我不知道这是故意的还是错误、因此我将跟进团队以了解更多信息。
谢谢、
斯蒂芬
Eric、
为了跟进这一点、我对该计时器进行了快速测试、并将其与使用 PMU 模块 API 获得的结果进行了比较。 我已经确认它们位于同一个棒球场中(最多相差+/-几%)。 设置非常基本:
配置文件:
计时器= xdc.useModule('ti.sysbios.family.arm.v7a.Timer');
C 代码:
/*创建计时器*/ Timer_Params timerParams; Timer_Handle timerHandle; Timer_Params_init (&timerParams); timerHandle = Timer_create (Timer_any、myTimerFxn、 &timerParams、NULL); /*调用两次以预热指令高速缓存*/ Timer_getCount (timerHandle); Timer_getCount (timerHandle); /*获取计时器调用的开销*/ start = Timer_getCount (timerHandle); stop = Timer_getCount (timerHandle); 开销=停止-启动;
谢谢、
斯蒂芬
Eric、
我的坏-我给了你计时器、而不是时间戳提供器。 有一个模块 ti.sysbios.family.arm.a15.TimestampProvider、它使用 ARM 的 PMCCNTR 寄存器(PMU 的子集)提供时间戳(无 PMU 中断等、通过该寄存器可以公开)。 您可以将其映射到配置文件中 XDC 的 Timestamp 支持代理、并在 C 代码中使用 Timestamp_get32来获取基于 CCNT 的时间戳。
.cfg:
VAR 时间戳= xdc.useModule('xdc.runtime.Timestamp');
时间戳。支持代理= xdc.useModule('ti.sysbios.family.arm.a15.TimestampProvider');
C:
#include uint32_t 启动、停止、开销; ... /*获取计时器调用的开销*/ start = Timestamp_get32 (); stop = Timestamp_get32 (); 开销= stop - start;
谢谢、
斯蒂芬