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.

[参考译文] TMS320F28379D:28379D 大容量 USB 中断嵌套

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1309507/tms320f28379d-28379d-bulk-usb-interrupt-nesting

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

我们正在使用 TMS320F28379D 并使用 USB 作为批量器件来发送状态信息(每80us~48字节)。

CPU1具有2个中断:

           ADCB1中断(INT1.2)

           USBA 中断(INT9.15)

我们的 A/D 中断每80us 发生一次、USB 中断有时与 A/D 中断异步使用多达16us。

在实时 USB 中断干扰实时 A/D 中断导致 USB 中断短路时、我们就会遇到问题。

我们需要嵌套中断、以便可以通过 A/D 中断来中断 USB 中断。

 

我认为我只需要修改如下所示的函数 F28x_USB0DeviceIntHandler ():

 

_interrupt void F28x_USB0DeviceIntHandler (void)

{

           USB0DeviceIntHandler ();

           INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);

 

我进行了以下修改:

 

_interrupt void F28x_USB0DeviceIntHandler (void)

{

           IER = M_INT1;//仅允许 ADCB INT1.2进行中断

           PieCtrlRegs.PIEACK.all = 0xFFFF;

           ASM (" NOP"      );

           eINT;//启用所有可屏蔽中断  

           USB0DeviceIntHandler ();

           dint;//禁用所有可屏蔽中断

 

我希望这一变化只会减慢我们可以发送的数据量。

当我查看示波器时、我发现 USB 不再与 A/D 中断干扰、但是

即使 A/D 中断没有占用太多的时间、USB 也似乎没有获得太多数据。

我所做的操作有问题吗、或者 USB 批量函数不允许嵌套中断吗?

另外一种想法是、当我查看示波器时、USB 中断的发生速率几乎与 A/D 中断相同、 是否可以在 A/D 中断结束时消除 USB 中断并将其转换成轮询进程,因为它的发生速度似乎永远不会超过80us?

感谢您的任何建议... John

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

    John:

               以下帖子具有您需要的有关嵌套的所有信息:

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

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/801076/how-to-change-interrupt-priority-tms320f2837xd

    [quote userid="78581" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1309507/tms320f28379d-28379d-bulk-usb-interrupt-nesting 是否可以消除 USB 中断并在 A/D 中断结束时将其转换为轮询进程?

    这是一个应用级决策。 您最 有能力对此做出决定。

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

    这个中断嵌套链接更加有用并能够直接解决这些问题。
    在实施所做的更改之前、我再次回顾了这些内容。
    software-dl.ti.com/.../index.html

    这是我完成的具有中断嵌套的第5个28x 项目、其中只有2个中断。
    这些项目正在被海军、陆军甚至空间站使用,因此它们一直在工作。
    嵌套似乎正在发生、我的问题更是 USB 库代码在被中断时似乎不能正常工作。

    或许熟悉 C2000Ware USB 代码的人可能会建议在嵌套 USB 代码时出现一些问题或进行一些变通。

    关于轮询 USB 的想法;我希望熟悉 USB 库的人可能会指出一些方法来修改现有的库代码、以便允许它用于轮询 USB、而不是使用中断。
    如果 C2000Ware 代码中的某些内容不像是被中断了、这将允许不中断 USB 代码。

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

    John:

       我将请我们的 USB 专家进行称重。

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

    USB 专家在明日之前不在办公室、他们返回后会得到回复。

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

    您好!  

    我认为对现有库或 USB 堆栈使用轮询不会很容易。 它是由中断驱动的。  当接收到数据和发送数据时触发中断。  

    最佳方法是使用中断嵌套。  

    此致

    西达尔特

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

    为了执行中断嵌套、我更改了函数 F28x_USB0DeviceIntHandler ()、如我的原始问题中所示。
    这使我能够在不改变 USB 库的情况下实现中断嵌套。
    当我这么做时、我的 ADC 中断不再被干扰、但是即使 USB 中断未被中断、它似乎也快速进入和退出。
    这看起来像 USB 中断中的某些东西不像在 F28x_USB0DeviceIntHandler ()中所做的更改,因此不再发送数据。
    它与 PIE 确认有什么关系吗?

    谢谢。。。John

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

    您好、John:

    您能检查 ADC 中断是否被正确清除吗?或者是否有挂起的中断导致 USB 中断立即退出吗?

    此致

    西达尔特

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

    ADC 中断在返回前已将 PIE 组1清零。 另外、耗时约为7us 的 USB 中断没有立即退出。 我还注意到、当我启用嵌套 USB 中断变得大约每1ms 周期性的、而不是通常高得多的速率。

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

    是否有人在 Delfino 处理器上嵌套了 USB 中断而 USB 仍然工作?

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

    您好!

    已在 F28388器件上完成此操作、请参阅以下文章。

    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/4940597#4940597

    应该在 F2837x 器件上使用类似的方法。

    此致

    西达尔特