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.

[参考译文] TMS320F28386S:CM CPUTIMER 延迟问题

Guru**** 2535150 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1525305/tms320f28386s-cm-cputimer-delays-issue

部件号:TMS320F28386S
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

下午好!

请帮助我理解:

我需要一个毫秒延迟例程来执行使用 CM 内核的工程。

当我使用 DEVICE_DELAY_US(毫秒* 1000)时、结果似乎是合理的。  

但当我尝试使用 CPU 计时器来获得更准确的延迟时、如下所示:

    CPUTimer_setPeriod(CPUTIMER2_BASE, (CM_CLK_FREQ / 1000) * milliSeconds - 1);
    CPUTimer_setPreScaler(CPUTIMER2_BASE, 0);
    CPUTimer_stopTimer(CPUTIMER2_BASE);
    CPUTimer_reloadTimerCounter(CPUTIMER2_BASE);
    CPUTimer_setEmulationMode(CPUTIMER2_BASE, CPUTIMER_EMULATIONMODE_RUNFREE);
    CPUTimer_startTimer(CPUTIMER2_BASE);
    CPUTimer_clearOverflowFlag(CPUTIMER2_BASE);
    while(!CPUTimer_getTimerOverflowStatus(CPUTIMER2_BASE));
    CPUTimer_stopTimer(CPUTIMER2_BASE);

实际延迟似乎要 短得多。

错误在哪里?

更新:我找到了原因。

SysConfig 工具出错、它会忽略 CM CLK 分频器、并且总是会将代码放在 device.c 中:

    //
    // Set up CMCLK to use AUXPLL as the clock source and set the
    // clock divider to 1.
    //
    SysCtl_setCMClk(SYSCTL_CMCLKOUT_DIV_1,SYSCTL_SOURCE_AUXPLL);

阈值下保持高精度。

CM 内核以惊人的频率在 250MHz 下运行。

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

    嗨、Oleg!
    感谢您提请我们注意、我们正在检查这一点、

    我们会尽快答复您

    此致、

    Tanmay

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

    您好、Oleg、

    对延迟深表歉意。 我们已经解决了这个问题、并提交了 JIRA 来跟踪此情况、并在下一个 C2000Ware SDK 版本中对其进行更新。

    请替换以下位置处的文件 :C2000WARE\driverlib\.meta\device\functions_cClocktree\PLL_DIRE.xdt Ctl_Dividers、并告诉我您是否能够在生成的文件中看到更新后的分频器。

    谢谢

    Aswin


    e2e.ti.com/.../PLL_5F00_Ctl_5F00_Dividers.xdt