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:将 CMPSS 配置为 XINT 中断

Guru**** 2522770 points
Other Parts Discussed in Thread: C2000WARE, TMS320F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1038145/tms320f280049c-configure-cmpss-to-xint-interrupt

器件型号:TMS320F280049C
主题中讨论的其他器件:C2000WARE

大家好、TI 团队、

我想使用 c2000Ware 配置 cmpss、如果 cmpss 输入中的值高于定义的值、则触发计数器、以便对随时间变化的事件进行计数。 如果我在时间 y 中有超过 x 个事件、我需要做出反应。 我在引脚18上使用 cmps1。  

我从示例代码开始:

    CMPSS_configDAC(CMPSS1_BASE, CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK |
                    CMPSS_DACSRC_SHDW);
    CMPSS_setDACValueHigh(CMPSS1_BASE, 2048);

    //
    // Configure the output signals. Both CTRIPH and CTRIPOUTH will be fed by
    // the asynchronous comparator output.
    //
    CMPSS_configOutputsHigh(CMPSS1_BASE, CMPSS_TRIP_ASYNC_COMP |
                            CMPSS_TRIPOUT_ASYNC_COMP);

该特定情况是否有任何示例。  

那么、如何配置 Xbar 以连接 cmps1和 xint5呢? 我想避免手动计数事件、因为它们在发生时非常频繁、是否有我可以读取的事件计数寄存器、或者哪种方式最适合对事件进行计数?  

提前感谢。

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

    您好、Jan、

    CMPSS 没有内置的事件计数器、但我认为最好使用 ECAP。 您可以设置 ECAP 为事件设置时间戳。 对于此特定情况、您并不真正关心时间信息、而是事件是否发生。 由于每个 ECAP 都有4个事件、因此您可以利用它在响应之前缓冲事件。

    在4个事件结束时、ECAP 将触发 CPU 中断、您可以在其中将中断累积到事件缓冲区中并相应地继续。 如果你更喜欢一种更具实际性的方法并且让 CLA 可用、 你可以触发一个 CLA 任务、在4个事件后、它将在后台执行此累加、并在 CPU 达到你指定的特定限值时通知 CPU。

    这种方法需要记住的一点是、即使 ECAP 计数器在32位时相当长、它仍然可能溢出。 如果这对您的应用来说是可行的、您可能可以在触发 CLA 以进行累加之前、平衡一次捕获的事件数。 例如、您可以一次捕获2个或1个事件、而不是一次捕获4个事件。 我们在 C2000Ware 中提供了 ECAP 和 CLA 示例、您可以将上述代码片段添加到中。

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

    我的表述可能是错误的。 我不想触发中断、我只想读出计数器。 那么、是否可以每 x 毫秒读取一次 ECAP 的计数器、看看发生了多少个事件、然后再次重置计数器?  我需要通过 GPIO 引脚执行同样的操作、该引脚需要连接到计数上升沿(高达10MHz)的计数器。 在这里、如果我只能每 x 毫秒读取一次 ECAP 计数器值、如果计数器大于 x、我会做出反应、这将是理想情况。 我不想为 CPU 或 CLA 创建任何开销。 CLA 不会被高频事件计数所困扰。  C2000器件似乎不提供此功能。  

    至少我能够实现调用 ISR 并对事件进行计数的第一个示例。 我仍然需要评估我是否正确配置了一切、频率是否适合我的测试输入信号。

    此外、我需要对 GPIO 输入执行类似的操作。 与使用 ECAP 相比、是否有更好的解决方案来计数这些高频事件? 再说一次、我不想在中断中浪费时间。 tms320f280049c 是否不支持事件计数?  

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

    1月、

    也许我不完全理解您最初的问题。 ECAP、CMPSS 等没有内置的硬件事件计数器、因此需要使用一些软件。

    不过、我与我们的 CLB 专家讨论了这一点、他提到 CLB 应该能够满足您在硬件中所需的一切。 我会让他回答更详细的问题。

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

    您可以定义 CLB 中的边沿计数。 您可以启用 CLB 输入滤波器来捕获上升沿或下降沿。 然后、您可以将输入信号连接到 CLB 计数器0的使能端、并对边沿进行计数。

    NIMA

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

    是否有一个如何将 cmpss 路由到 CLB 的示例? 到目前为止、我没有使用 CLB 模块。 此外、将 GPIO 输入重新链接到 CLB 的简单示例也很完美。  

    当我学习手册时、似乎可以将 cmpss 信号与 CLB 进行重新链接。  

    必须指出的是、我无法在我的公司中使用未经认证的工具、因此无法使用 CLB 工具。 由于 CLB 模块的复杂性、计算 cmpss 高电平事件和 GPIO 上升沿这两个任务非常简单、至少对于我第一次使用此模块而言是如此。

    提前感谢。

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

    您有一个 CLB XBAR。 您可以在 CLB XBAR 中选择信号源、并在 AUXSIGx 上将其取出。 然后、在 CLB 全局和本地多路复用器中、您可以选择 CLB 的输入信号。 AUXSIGx 可在全局/本地多路复用器中选择。

    NIMA