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.

[参考译文] TMS320F280049C:DELAY_US (A) 无法正常运行

Guru**** 2519770 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549043/tms320f280049c-delay_us-a-does-not-operate-correctly

器件型号:TMS320F280049C


工具/软件:

您好:

我对  C2000 源文件中定义的 DELAY_US (A) 宏有疑问。

宏定义如下:

//请勿修改此行。
#define DELAY_US (A) F28x_usDelay (((( long double) a * 1000.0L)/(long double) CPU_RATE)- 9.0L)/ 5.0L)

我面临的问题是我在示波器上看到的实际延迟是我插入为“A"的“的参数量的 1.6 倍。
我已经在 10 μ s 和 1 秒内尝试过它。

需要注意的是、我知道 MCU 时钟频率为 100MHz、根据该数字、我正确获得了所需的 PWM 频率。

因此、我想其他内容有误或设置不正确。

谢谢你

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

    您好:

    您如何调用 delay_us()?  

    您正在编码 DELAY_US(常量)吗? 如果是、编译器会在编译时评估参数计算。 但是、如果您编写代码 Delay_US (variable)、则参数计算必须由 C28x 在运行时执行。 您会注意到这些都是浮点计算、包括除法。 它们的执行需要很长时间、尤其是在使用定点 C28x 器件时。

    此致、
    马特

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

    您好 Matt、

    感谢您的答复。

    我将其称为常量、如下所示:
     DELAY_US (1000000);   

    这里的情况是如果我插入 10 或 1000000(两者都作为常量插入)、实际延迟时间是比常量大 1.6 倍的时间。

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

    您好:

    如何测量延迟(driverlib GPIO 切换等)?  我怀疑 GPIO 切换的驱动程序有一些调试开销、这在这里是不理想的。

    如果您右键点击工程并选择“Properties",“,然后、然后转到“Build"->"C2000 Compiler"->"Predefined“ Compiler"->"Predefined Symbols"“ Symbols":“:是否“是否可以“可以检查是否将“debug"视为“视为预定义符号?  如果是,让我们现在删除它,重新编译,看看你的时间是否更合理。  

    “调试“预定义对驱动程序函数进行许多预检查、以确保在调用函数之前传递的变量处于范围内。  对于最终版本代码、我们希望消除这种开销。

    此致、

    马特

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

    您好、  

    其他一些详细信息:

    我们的示例中定义了两个延迟函数、这会让问题更加困惑。 在 device.h 中、有一个名为  SysCtl_delay  的函数、该函数应从 device.h 获取输入以确保时钟/延迟时间正确。   f28004x_sysctrl.c 中有另一个名为 f28x_usDelay 函数 、其从 f28004x_examples.h 文件获取时钟速率信息。

    SysCtl_delay 在 driverlib 中定义、 f28x_usDelay 用于基于 bitfield 的示例中。 两者完全相同、并将循环计数作为输入。  您是否尝试使用 SysCtrl_delay 或按比例调整 CPU_RATE?  

    此致、

    马特

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

    您好:

    由于是一个月没有回复、我会假设问题已解决并关闭主题。

    此致、

    马特

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

    您好、很抱歉、您的回复太晚。
    实际上、使用上述函数时、我无法获得数学上稳定的延迟函数。 但我可以继续。 您可以关闭螺纹。
    谢谢你

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

    您好:

    我理解、我现在将关闭该主题。 如果出现任何其他问题、请重新打开新主题。  

    此致、

    马特