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.

[参考译文] DRA756:内核时钟周期中时间戳提供器的 A15示例

Guru**** 2540720 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/617492/dra756-a15-example-of-timestamp-provider-in-core-clock-cycles

器件型号:DRA756
Thread 中讨论的其他器件:SYSBIOS

您好-快速问题:

在 DRA75x A15内核上查找时间戳提供器的*。cfg 设置、以便所选的计时器以内核时钟周期(即内部 PMU)为单位。

因此使用 Timestamp_get32()可以得到内核的分辨率。

谢谢、

Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:

    您使用哪款 SDK?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!

    Eric 可能使用以下(类似) SDK 之一:

    此致、
    莱斯特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:

    我已与 Processor SDK RTOS 汽车专家进行了联系。
    如果您使用的 SDK 不是 Lester 发布的 SDK、请告诉我。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    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
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Stephen:

    很抱歉、我从假期回来很快就看到了这一点。  目标是使用时间戳提供器和 Timestamp_get32()函数。  这是为了与不同内核之间使用的代码兼容(此函数与 C66一同使用)。  是否有任何关于使用 TimestampProvider 模块实现此分辨率的想法?  

    谢谢、

    Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    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; 

    谢谢、
    斯蒂芬