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.

[参考译文] LAUNCHXL-TMS57004:测量事件之间的持续时间

Guru**** 2482155 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/714891/launchxl-tms57004-measure-the-time-duration-between-the-events

器件型号:LAUNCHXL-TMS57004

尊敬的所有人:

我想使用 TMS 57004测量两个事件之间的持续时间。

我启用了 Gio 和 RTI 驱动程序。

然后、在 sys_maiin.c 中、我编写了以下代码。

rtiInit();

rtiResetCounter (rtiCOUNTER_BLOCK0);

rtiStartCounter (rtiCOUNTER_BLOCK0);

delayms(x);

rtiStopCounter (rtiCOUNTER_BLOCK0);

uint32 t;

t=rtiGetPeriod (rtiCOMPARE0);

甚至在将 x 从1000更改为500之后。 我将获得与 t 相同的值  

请帮助我解决问题。

此致、

单位

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

    rtiGetPeriod (rtiCOMPARE0)的返回值为更新比较0、未更改。 每当比较匹配时、该寄存器保存的值将添加到比较0 (RTICOMP0)寄存器中的值中。 此函数允许在无需软件干预的情况下生成周期性中断。

    请使用 rtiGetCurrentTick (..) 以获取自由运行计数器的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    我使用了 rtiGetCurrentTick()函数,但由于无法执行计时分析。

    当函数运行3次后、即使我更改 delyms 函数中的延迟值、我的函数也会设置为-9985值。

    此外、如果我使用计数器块0和块1、我也看到了差异。 为什么会这样?

    请帮助我解决问题。

    此致、
    Gunit Singh

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

    计数器0和计数器1使用相同的时钟。 如果 CPU0 = CPUC1、则 FRC0应等于 FRC1。

    测量周期的另一种方法是使用 PMU (性能监控单元)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    我仍然无法测量两个事件之间的持续时间。

    实际上,我想测量代码运行所需的时间,我如何才能这么做? 请详细说明

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

    尝试使用 PMU、函数在 sys_PMU.asm 中定义:

    _pmuEnableCountersGlob_();
    _pmuResetCounters_();

    /*启动 PMU 计数器*/
    _pmuResetCounters_();
    _pmuStartCounter_(pmuCYCLE _计数器);

    您的代码...

    /*停止 PMU 计数器*/
    _pmuStopCounter_(pmuCYCLE _计数器);

    /*获取 CPU 周期计数*/
    pmuCount =_pmuGetCycleCount_();

    其中 pmuCount 是 CPU 时钟周期数:

    例如、我的测试需要17476个时钟周期(系统时钟为180Mhz):
    int main (空)

    /*用户代码开始(3)*/
    unsigned int *cppiT、*cppir;
    无符号 ind、pmuCount;

    _pmuEnableCountersGlob_();
    _pmuResetCounters_();

    /*启动 PMU 计数器*/
    _pmuResetCounters_();
    _pmuStartCounter_(pmuCYCLE _计数器);

    cppiT =(无符号 int*)(0xFC520000);
    cppir=(无符号 int*)(0xFC521000);
    对于(ind=0;ind<0x100;ind++){
    *cppiT++= 0x00000000;
    *cppiR++= 0x00000000;

    /*停止 PMU 计数器*/
    _pmuStopCounter_(pmuCYCLE _计数器);
    /*获取 CPU 周期计数*/
    pmuCount =_pmuGetCycleCount_();

    我将了解您的 RTI 为何不能正常工作