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/TM4C1294NCPDT:用于生成4种频率高达100kHz 的不同频率的计时器

Guru**** 2468460 points
Other Parts Discussed in Thread: TM4C1294NCPDT, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/670108/rtos-tm4c1294ncpdt-timer-to-generate-4-different-frequnecy-up-to-100khz

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件: SYSBIOS

工具/软件:TI-RTOS

我正在开发一个基于 TM4C1294NCPDT 的项目、在该项目中、我检查 TI-RTOS 的正确实施以生成高达100KHz 的可配置频率时钟(用于驱动开关电容滤波器电路)。  

我最初在 PWM4、5、6、7上接多达4个不同的时钟频率(固定50%占空比)、不超过100KHz。

但是、我在数据表中发现 、PWM 模块4和5以及 6和7之间不可能有单独的时钟。 因此、接线会更改为 PWM0、2、4和6、以便 可以实现不同的频率。 但是、这会扰乱 SPI 总线(我尚未使用 PINMUX 进行优化)。  

计划 B 是在 PWM 模式中使用定时器、并让 TxCCPx GPIO 输出。我可以选择 T0CCP0、 T0CCP1、 T1CCP0、 T1CCP1作为不同的频率、不需要 ISR (定时器和 GPIO 之间自由运行)、不需要从固件或 ISR 服务切换 GPIO、不会分散 GPIO 的注意力。 我想这是一个比使用 PWM 更好的选择。  

但是、我需要知道如何使用 TI-RTOS 设置计时器、以及如何使 TI-RTOS 知道不使用计时器0和计时器1。  

我找不到此配置的演示代码。

R.  

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

    最简单的方法是使用四个计时器、每个计时器都有自己的周期。 遗憾的是、没有多少芯片具有这么多的计时器。

    另一种方法是使用比较匹配中断。 本质上,您将计时器设置为自由运行,对于每个比较通道,您会在 ISR 中递增它的匹配点。 因此、每个比较通道的周期将是您对该通道使用的增量。 通过使用不同的增量、您可以从一个计时器获得不同的频率。

    我可以为您提供代码段、以便您快速入门。

    这种方法的优点是能够在一个定时器中有不同的周期。 它的缺点也很明显:您需要 ISR 及其相关的开销。

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

    TM4C1294NCPDT 具有8个通用双定时器(Timer A 和 Timer B)、在 PWM 模式下具有16路输出、这在第962页的数据表中非常清楚、这意味着无需 ISR。 包含 ISR 的方法效率不是很高。 TM4C1294NCPDT 还具有1个 PWM 模块、该模块具有4个子 PWM 及其自己的时钟频率。

    这是为什么我不能编写 c 代码(或非 TI-RTOS 代码)来将定时器配置为运行并使用信标来调整定时器配置以及开/关操作的原因。 如何告诉 TI-RTOS 这个定时器3和5被保留...从而防止时钟库将这个定时器移走或引起冲突。

    我缺少在 PWM 模式下运行的该通用计时器的演示代码(理想情况下在 TI-RTOS 内、但其他情况下也可以)。

    R.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是我用于将计时器配置为 PWM 模式的内容-> github.com/.../LM3S
    ,使用 pwm.c/h 文件。

    它们用于 Luminary LM3S 芯片、并且也应该在 TM4芯片上运行、只需稍作修改-主要是在引脚分配/替代功能上。

    BTW、这些代码使用 CMSIS 启动文件、因此如果您不使用、则需要进行调整-微调。

    "我为什么不能编写 c 代码...?"

    没有-我也做了、其他许多人也做了。 只需为其挖开数据表和代码即可。 希望上面的链接将帮助您快速入门。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Danny
    当新电路板在新的几周内送达时、我会尝试一下。
    BTW:是否需要使 TI-RTOS 意识到这些计时器是保留的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不知道。 除非 RTOS 使用它们-我对此非常怀疑-我不知道如何将它们的使用情况通知 RTOS、或者是否有必要。 这些函数一旦设置、就不需要软件参与-除非您想更改频率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    默认情况下、TM4器件的 SYS/BIOS 使用计时器实例来驱动时钟模块。 时钟模块使用 Timer.create()调用中的任何参数从"ti.sysbios.family.arm.lm4.Timer"模块静态获取计时器实例。

    这意味着时钟模块将使用当前可用的任何定时器实例。 要通知计时器模块您正在使用特定的计时器实例、应相应地设置 Timer.anyMask。 文件中。 'Timer.anyMask'的位0对应于定时器0、依此类推。 通过清除任意掩码中的相应位、您可以通知计时器模块计时器不可用。 这将防止计时器的用户(即时钟模块)。任何参数都无法抓取您正在使用的计时器。

    下面是一个示例、说明如何从使用计时器可获得的计时器列表中删除计时器0。任何参数:

    var lm4Timer = xdc.useModule('ti.sysbios.family.arm.lm4.Timer');
    lm4Timer.anyMask = 0x3E;//从与 Timer.any *配合使用的定时器列表中删除定时器0 

    Alan

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

    非常好的解释和详细的描述-谢谢先生。

    (的确如此)仍然很好奇(几乎)总是-海报提供了"无理由"-他们对 RTOS 的"要求"...   (它肯定会增加一个"复杂层"。)