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.

[参考译文] TMS320F28388D:在 USB 通信期间不能执行 ePWM 中断

Guru**** 2551110 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1287628/tms320f28388d-epwm-interrupts-may-not-be-executed-during-usb-communication

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

您好!

使用 ePWM 向上/向下模式、每50us 切换一次 PWM 输出。 它在没有 USB 通信的情况下正常运行、但是如果你在 USB 通信正在进行时监视 PWM 输出、有时中断不会发生并且 PWM 输出不会反转、通常每秒10次。

如果没有 USB 连接、它将在50us 上下波动、而不会产生任何干扰、所以 USB 通信似乎会受到影响。 有可能与中断的优先级相关、但可以获得一些建议吗?

谢谢。

科诺

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

    尊敬的 Conor:

    感谢您的提问。 你碰巧在使用任何机会嵌套吗? 我想知道这是否是一些嵌套启用/禁用问题。

    我提出问题的原因是、USBA 位于比 ePWM 优先级低得多的组中、因此它不会妨碍 ePWM。

    除非通过"USB"、否则表示 CCS 调试器(JTAG)。 这实际上可能会导致 ePWM 出现问题、因为在某些情况下它的优先级比 ePWM 高、并可能导致项目丢失。

    此致、

    文斯

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

    您好、 Vince。

    您是否碰巧使用嵌套? 我想知道这是否是一些嵌套启用/禁用问题。

    使用中断嵌套意味着什么? 如您所述、USBA 具有比 ePWM 更低的中断优先级、因此我们认为由中断嵌套不会干扰 PWM。 我的理解是否正确?

    谢谢。

    科诺

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

    尊敬的 Conor:

    感谢您的跟进。 我所指的嵌套是指您启用其他中断以出现在另一个中断中的时候。 例如、如果您在 ePWM 内部启用其他中断、则可能会导致 ePWM 延迟。 有关如何实现这一操作的说明、请参阅下面的嵌套指南。 基本来说:如果把"EINT"放在 ePWM ISR 中、则表示您允许发生其他中断、这可能是您看到的情况。

    https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html

      

    现在、如果您连接到调试器也可能会发生这种情况(我认为、调试器可以暂停 PWM 输出)

    此致、

    文斯

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

    您好、 Vince。

    经过我们的调查、我们认为问题在于 API 的使用方式。

    与所使用的 USB 相关的・API
    (1) USBBufferRead ()・・・通过 USB 读取数据
    (2) USBBufferDataWriten ()...通过 USB 写入数据


    当调用 USB 相关 API 而未执行 ePWM 引起的中断处理(50us)时、出现此问题。


    当执行 USB 写入或读取操作时、当处理大数据时会占用中断、并且 ePWM 中断未被赋予优先级、这使得 ePWM 实时处理变得不可能。

    我想做以下一件事、但有什么办法吗?

    〇 通过多个中断使 ePWM 中断成为最高优先级的处理
    〇 使用 USB API 处理作为后台处理而不占用中断。 换句话说、我们希望防止 USB 处理使 ePWM 处理时间延迟。

    谢谢。

    科诺

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

    尊敬的 Conor:

    要回答您的问题、建议的两种方法实际上都是可行的!

    对于第一个示例、我们提供了有关如何执行名为"interrupt_ex3_sw_priitation.c"的"软件中断优先级"的示例、该示例位于您的器件的 C2000Ware 的"interrupt"文件夹中。 这使您能够按照需要的方式对中断重新排序。

    对于第二个问题:理论上而言、您可以自行修改 API 版本、当 USB 中发生中断时、立即将数据移动到 RAM、以便稍后通过较慢的低优先级任务进行处理。 我们没有这方面的示例、但可以直接将原始函数拆分为两个函数(函数1=将数据移动到 RAM、函数2=处理数据)。

    此致、

    文斯

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

    您好、Vince。

    USB 设备初始化过程中执行以下中断。
    ・Interrupt_register (INT_USBA、&F28x_USB0DeviceIntHandler);

    当使用 H/W 将 USB 线连接到 PC 时会执行该中断处理、但这是否需要该中断处理? 此外、是否可以忽略此中断处理? 以下两个函数在相应的中断处理中被调用。
    ・USB0DeviceIntHandler ();
    ・Interrupt_clearACKGroup (interrupt_ACK_group9);

    "USB0DeviceIntHandler ();"函数的内部作用是什么? 我通过操纵嵌套设置尝试了各种方法、但我没有找到基本的解决方案。 我能想到的是、出于某种原因 USB 处理中断会中断和干扰 ePWM 处理。

    谢谢。

    科诺

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

    尊敬的 Conor:

    我已经联系 USB 专家来回复这个问题。 我不是 USB 专家、但我假设在连接到 PC 时 USB 中断处理绝对是必需的。

    对于前面提到的其他问题、我将请 USB 专家进行评论。

    此致、

    文斯

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

    您好、Vince。

    谢谢、我期待收到我们的 USB 专家的回复。

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

    Conor、  

    连接到 PC 时、需要进行 USB 中断处理、在此期间完成枚举过程以确定所连接的器件/主机类型。  

    正如 Vince 建议的、您可以允许在另一个中断内部发生其他中断、以便 ePWM 中断可以是来自 USB 中断的触发器。

    此致

    西达尔特

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

    尊敬的  Siddharth 和 Vince:

    我知道需要 USB 中断。 我将问题区域的波形整理到了 PDF 中。

    e2e.ti.com/.../7848.Waveforms.pdf

    底部的黄色波形为 PWM 控制、此处理必须以最高优先级执行。
    若要使 PWM 中断优先于 USB 中断、软件需要进行什么处理?

    谢谢。

    科诺

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

    Conor、  

      有关中断嵌套的详细信息、请参阅链接- software-dl.ti.com/.../index.html。

    默认情况下,当中断发生时,其他中断将被自动禁用。  因此、在 USB ISR 中、 必须启用中断  来允许具有较高用户优先级的 CPU 中断被服务。 您可以参考 C2000Ware 中包含的"interrupt_ex3_sw_Prioritation"示例。  在本例中, 计时器 ISR 设置全局和组优先级以允许 具有较高优先级的 CPU 中断。  

    此致

    西达尔特

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

    尊敬的 Siddharth:

    根据您的回答、我们明白我们需要做两件事情。

    1.在 ePWM ISR 中禁用"EINT"以防止其他中断发生。 这防止了 ePWM ISR 内中断处理的延迟。

    2.在 USB ISR 中启用"EINT"以允许发生其他中断。 这将防止 ePWM ISR 内的中断处理因 USB ISR 而延迟。

    关于1.、这是默认设置、因此我认为没有必要更改。

    2、有必要添加一个说明来使能 USB ISR 内的其它中断。 我查看了示例代码、但不明白如何为 EPWM 中断指定优先级。 我需要更改什么? 由于 ePWM 可能具有比 USB 更高的中断优先级、所以可以在 USB ISR 中启用 IER 和 INTM 吗?

    谢谢。

    科诺

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

    Conor、

    由于 ePWM 具有较高的优先级、应该可以在 USB ISR 内启用中断。一般规则是、任何已启用的中断(较高优先级)挂起(设置了其标志)都将立即中断您所在的任何 ISR 例程 (同样、假设所有使能位和屏蔽都已使能)

    此致

    西达尔特  

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

    尊敬的 Siddharth:

    即使我们正确设置了中断、包括多个中断、问题仍然存在。 从波形可以看出、在 PWM ISR 正在运行时、USB ISR 正在等待中断、并按配置运行。

    下面是我认为的问题是:
    由于 TI 提供的文档中没有有关函数的详细信息、您是否可以回答以下问题?

    问题1:
    "USB0DeviceIntHandler"到底执行了什么? 假设在连接 USB 时执行该函数、为什么会定期执行一个中断、大约每100us 一次?

    问题2.
    为什么从更高级别传输数据时"USB0DeviceIntHandler"的访问频率增加? 当主机发出命令以通过 USB 发送数据时、"USB0DeviceIntHandler"的访问频率不固定地增加。 该函数是否通过轮询来查看某些内容?

    谢谢。

    科诺

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

    Siddharth、

    对于终端客户的请求给您带来的不便、我们深表歉意、如果您今天能向我们提供意见、我们将不胜感激。

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

    Conor、  

    "USB0DeviceIntHandler"用于处理 SOF 中断。  主机定期发送一个 SOF、因此调用该 ISR 来对其进行处理。  这些信号可作为一种"保持活动"信号。  传输数据时,会触发其他中断,因此"USB0DeviceIntHandler"的频率将增加,因为这是 USB 中断处理程序的入口点

    针对 USB 库的源代码可从以下位置获得:  如果您想看一看、请单击\libraries\communications\usb\f2838x。  

    此致

    西达尔特

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

    尊敬的 Siddharth:

    我了解到 USB0DeviceIntHandler ()使用 SOF 信号定期检查与主机的连接。

    USB0DeviceIntHandler ()的响应极有可能延迟,因为 ePWM 的优先级比 USB 高,ePWM 中断的处理需要很长时间。 这会是个问题吗?

    另外,从波形可以看出,在向 PC (主机)端发送数据时会经常调用 USB0DeviceIntHandler ()。 您能否提供有关何时调用 USB0DeviceIntHandler ()的详细信息?

    谢谢。

    科诺

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

    Conor、  

    USB0DeviceIntHandler 是  USB 设备中使用的主要 USB 中断处理程序入口点。  此 ISR 将根据当前中断状态确定中断并分支到相应的应用程序或栈处理程序。  

    此致

    西达尔特

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

    尊敬的 Siddharth

    ,问题已解决。 原因是 USB 中断不允许其它的中断。
    通过启用 USB 中断内的其他中断、ePWM 中断现在获得优先级。 感谢您的答复。

    谢谢。