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.

[参考译文] TMS320F28P550SJ:FreeRTOS 如何将 CPU Timer0 或 RTOS 中断用作周期源

Guru**** 2894990 points

Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1638320/tms320f28p550sj-freertos-how-to-use-cpu-timer0-or-rtos-interrupt-as-tick-source

器件型号: TMS320F28P550SJ
Thread 中讨论的其他器件: SysConfigC2000WARE

您好、  

我们目前正在由 SysConfig 配置的 F28P55 上使用 FreeRTOS;

我们的问题是:

  • SysConfig 仅允许将 CPU Timer2 作为 FreeRTOS 的节拍源;
  • CPU 计时器 2 的优先级较低
  • CPU TimerX 没有要清除的中断标志、因此如果未在正确的时间处理中断、CPU 将在下一个周期处理中断
  • 因此、FreeRTOS 节拍通常被其他中断屏蔽并跳过周期

我的问题是:是否可以使用另一个具有更高优先级的计时器作为 FreeRTOS 节拍?

谢谢

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

    您好、  
    深入探讨一下。
    会返回到您的位置

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

    您好 Agostino、

    对延迟回复表示歉意。
    它会有意保持在低优先级。
    我们强烈建议您不要进行更改。

    如果您仍需要使用其他时间、则需要在中进行更改  

    \kernel\freertos\Source\portable\ccs\c2000_c28x\port.c

    您能分享这样做背后的原因吗?


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

    尊敬的 Lakshya:  

    感谢您的回答;

    我将尝试解释我们遇到的问题:

    1. Timer2 每 1ms 中断一次分配给 FreeRTOS 嘀嗒信号(使用 vApplicationTickHook 在每个周期切换 GPIO);
    2. Timer0 每 0.1ms 中断一次、分配给我们的控制例程、该例程需要 35us(每 1ms 切换一次 GPIO)
    3. 我们有一个 FreeRTOS 软件计时器以 1ms 的频率运行(每个周期切换 GPIO);
    4. 我们有一个 FreeRTOS 任务以 1ms 的频率运行、需要 200us 的时间来执行(每个周期切换 GPIO)。

    上述每一个都将切换 GPIO。

    a.当一切正常工作时、每个 GPIO 将每 1ms 切换一次;

    b.有时会发生 GPIO 1。 3.和 4. (SO Timer2 中断)跳过整个周期并在下一个 ms 周期触发。

    有时会发生 GPIO 1。 3.和 4. 如上所述、停止长时间切换(例如 700ms)、每 15-16 秒切换一次、而 2. Timer0 保持正常运行

    我的想法:

    • B 点建议、如果 CPU 在中断标志为高电平时不为 Timer2 ISR 提供服务、则该标志将丢失(我想它将在 1 个 Timer2 时钟周期内处于高电平)

    • C 点建议、如果某些中断临时与 Timer2 周期结束对齐、则可以将 Timer2 ISR 屏蔽更长时间。

    我也可以从示波器发送屏幕截图、其中显示了上述内容、但无法在此论坛上附加文件。

    感谢您的支持! Slight smileμ s 

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

    你好 Lakshya Verma 

    我们进行了进一步调查、发现:

    • Timer2 FreeRTOS 节拍未触发似乎与 portYIELD_FROM_ISR 函数的使用相关联

    详细信息:

    • 当我们添加 portYIELD_FROM_ISR 来执行(例如,延迟中断处理和唤醒等待中断完成的任务(在我们的例子中为 SPI TX/RX 完成)时、有时 Timer2 不会获得服务、跳过一个或多个周期。

    当使用 portYIELD_FROM_ISR 的 ISR 每秒调用次数增加时、情况更糟。

    此外、我在上一次答复中提到的情况 C.是由以下原因造成的:

    • 等待 Timer0 ISR 任务通知的高优先级任务  
    • 将 portYIELD_FROM_ISR 添加到 Timer0 ISR

    在这种情况下、Timer0 和 Timer2 的频率略有不同、我认为这可能是 Timer2 ISR 屏蔽 700ms 的原因(如频率拍)。

    但是、从 Timer0 ISR 中删除 portYIELD_FROM_ISR 解决了这种情况、突出显示在 CPU 级别可能不会丢失中断、这与我在上一个答案结论中所述的不同。

    如果我能进一步解释情况、请告诉我、  

    感谢您的支持、

    阿戈斯蒂诺

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

    您好 Agostino、

    我可以知道您使用的是哪个版本的 C2000Ware 吗? 从 v6.00 开始、我们修改了 Yield 中断以映射到未使用的 PIE 中断线路(而不是相同的 CPUTIMER2 中断)。 您能否验证在 v6.00 或更高版本中是否看到这些缺失的 CPUTIMER2 中断?

    此致、
    Arnav