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.

[参考译文] RTOS/TM4C1292NCPDT:定时器配置

Guru**** 2480775 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/700583/rtos-tm4c1292ncpdt-timer-configuration

器件型号:TM4C1292NCPDT

工具/软件:TI-RTOS

您好!

我为我的应用配置了一个计时器、如下所示。

默认情况下、该计时器配置为32位、对吧?

我需要长达65秒的周期。 我  使用函数 Timer_setPeriodMicroSec()来设置周期65535000。 但在32秒后、会发生超时。 当周期高达32768000时、计时器按预期工作。 我是否需要进行任何其他配置才能获得长达65秒的周期?

我使用 CCS v7.4.0 、TI RTOS v2.16.01.14和 TivaWare_C_Series-2.1.4.178。

谢谢

Sandra

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

    抱歉、我现在要附加配置文件。

     e2e.ti.com/.../project.cfg

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


    当您使用函数调用 Timer_setPeriodMicroSec()时,请检查返回值。 如果为 false、则表示定时器周期寄存器不能支持请求的周期。

    如果我假设您以120 MHz 的频率运行、我认为这个问题是由于您的要求的总计数会是这样的
    = 65535000 x 120 = 7864200000;这更多是32位寄存器可以容纳的内容(4294967296)。

    顺便说一下、为什么不试试计时器 GUI 中记录的周期(您现在保留了1个)?

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

    您好 Pranav、

    [引用用户="Pranav Saraswala "]
    如果我假设您以120 MHz 运行[/QUESY]是。 我们以120MHz 的频率运行。 这个 频率的方式 将与 Timer_setPeriodMicroSecs() API 计数直接相关。 在这里、如果频率为120MHz、则时间大约为8.33纳秒。 65535000 * 8.33 = 545906550仅限边界内。

    同时、我还尝试将计时器周期增加到1000。 但它仍然不会超出限制。

    此致

    Sandra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    函数 Timer_setPeriodMicroSecs()加载到计时器计数寄存器中的值取决于运行频率。
    在120MHz 时、对于1微秒的周期、所需的时钟周期(和计时器计数)为120。 因此、对于65、000、000微秒(65秒)的周期、您需要计数65、000、000x120 = 7800000、000。 32位寄存器中不能容纳这么多的计数。
    您是否检查了函数调用 Timer_setPeriodMicroSec()的返回值?

    您上面所做的计算是错误的;请稍等片刻、您就会明白。

    在我的上述帖子中、当我说过已提交的试用期限时、您需要输入确切的"否" 微秒的时间。 在 GUI 中使用此字段,您不再需要调用函数 Timer_setPeriodMicroSec()。 这是定义计时器周期的更简单方法。

    如果您需要较高的延时时间、我建议您使用场周期的单位作为"时钟"、而不是"以微秒为单位的周期"。
    在这种情况下、您必须在应用中添加"时钟"模块。
    请观看此视频、了解如何使用 RTOS 的时钟模块: training.ti.com/ti-rtos-workshop-series-7-10-using-clk

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

    您好 Pranav、

    [引用 USER="Pranav Saraswala ]]\n 您是否检查了函数调用 Timer_setPeriodMicroSecs()的返回值?是。 返回错误。

    [引用 USER="Pranav Saraswala ]]在这种情况下,您必须在应用程序中添加'clock'模块。[/引用]感谢您的建议。 通过更改为时钟模块、它可以在更高的计时器值下正常工作。

    此致、

    Sandra