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.

[参考译文] USB库:中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/581179/usb-library-interrupt

主题:controlSUITE中讨论的其他部件

您好,

我使用的是控制卡F2837x。

我的项目是从多个开发套件TMDDSIDv 2.0 中获得的用于控制无刷电机的问题。

然后我有一个主ISR中断来计算ADC/PWM中断的电机控制环路(设置为"LPI"低优先级)问题

我还有一个来自PWM的它,用于控制设置为"HPI"的解析器反馈。

现在,我已经从USB_DEP_SERIAL exemple集成了USB。

USB使用也中断。

问题是此中断始终发生,并且就像我的MainISR允许中断(EINT)被解析器中断抢占一样,此MainISR也被USB中断抢占。

仅当我连接到计算机时,此USB中断会占用很长时间1.8µs或15µs,而不会产生任何干扰。

USB传输不是我的应用程序的优先级。

1-即使没有交通信号,中断的精确时间也是1毫秒吗? (从这个1毫秒的确切时间起,哪里来?)

2-我们是否可以将USB堆栈配置为在“轮询模式”而不是中断模式下工作?

3-如果中断模式是必需的,那么哪种方法更好地避免在不丢弃任何USB帧的情况下通过USB中断我的MainISR?

谢谢

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

    1)是的,每隔1毫秒中断一次是正常的。 它来自主机发送的SOF (帧开始)数据包,以确保设备仍然处于活动状态。

    2)您可以使用轮询。 这显然需要对软件进行一些修改。

    3)由于维修USB中断需要很长时间,因此最好使用重量更轻的串行通信。

    您使用USB通信的用途是什么? 多少数据? 您需要的吞吐量是多少?

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

    你好

    我尝试在轮询模式下使用:我禁用了USB中断(IER寄存器组9)并在后台循环中调用USB句柄中断。

    但这不起作用。

    我们无法更换通用串行链路的USB链路,因为当今许多计算机都没有串行端口!... 因此,我们的产品必须由大型工业公众使用。

    目前,我只是在主ISR 100µs中禁用USB中断,然后它不会被USB中断。 但是,如果USB中断发生在之前,则可能会延迟。 :-(.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在controlCARD上,SCI或UART通信可以通过卡上的FTDI和USB连接器完成。

    您可以通过FTDI芯片和USB连接器使用UART通信,这些连接器连接到您的PC。 这可能是一个不错的选择。

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

    是的,对于controlCARD,这是一个很好的解决方案,但我们目前使用此“演示卡”来等待自己的板。
    在这个定制板中,我们将不会有FTDI芯片!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以选择此类选项? www.amazon.com/.../B008AGDTA4

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的努力,
    但我们的产品必须配备"Micro USB"连接器。
    最终用户必须使用标准电缆"Micro USB"<->"USB-A"来连接到其计算机
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只要设备能够以足够快的速度响应SOF数据包和数据输入及数据输出请求数据包,就应该可以进行轮询。

    如果您的MainISR需要多长时间? 您能描述一下您所说的"它不能发挥更大作用"吗?

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

    你好

    简单地说,我的Soft基于IDDK示例。

    然后,我拥有一个维护ISR,期限为100µs。 在该ISR中花费的时间从1µs º C到50µs º C不等(电机控制环路,轨迹计算等...)

    我有另一个ISR (具有高优先级) 6,25µs期限。 与IDDK示例一样,此ISR负责管理电机反馈解析器并计算电机位置角度。 此ISR花费的时间为600ns (每2,34µs 100µs μ s,对应于Sinus输出波形周期)
     
    之后,我们将有一个后台任务,我猜在其中管理USB。

    因此,解析器ISR中断了MainISR,但对2.5µs µ s的600ns是可以接受的。

    现在,如果MainISR被USB ISR中断,则该数据可能会上升到16µs µ s,这在我的应用程序中是不能接受的
     
    我测试编译和闪存USB批量示例。 这是正常的,但当我运行并将USB连接到计算机时,没有发生任何事情。 计算机未检测到USB。 我没有做过其他的操纵!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先,您可以禁用SOF中断触发器以节省一些处理能力。 它用于可选的定时同步;默认情况下不使用。

    我建议使用中断嵌套来允许您的主ISR中断USB ISR。 我们在此提供了一个指南:

    processors.wiki.ti.com/.../Interrupt_Nesting_on_C28x

    您还可以查看controlSUITE中的sw_优 级_中断示例。

    如果您使用的是F2837xD,则可以将主ISR移至CPU 2,以完全避免USB开销。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我听从了你的建议,下面是一个反馈:

    -1)嵌套中断: 与组9一样,仅由USB使用,请输入以下代码:

    在 函数开始时的MainISR (100µs句点)中:

    IER &=~M_INT9;
    EINT;
    

    在USB ISR中,在函数开头:

    EINT; 

    这样,USB中断就可以被MainISR抢占,但反之则不行。 这可以正常工作,因此我没有在MainISR上抖动。 =>正常

    -2)禁用SOF。

    使用调试器,我在寄存器视图/ UsbaRegs/USB_is_IE/ USBIE中从1111.1111万设置为1111.0111万 (启用SOF位)

    这样,USB可以正常工作,但中断时间不会改变(1毫秒的时间,以及在2.6µs到16.8µs之间的时间,如果我的主ISR没有中断)

    SOF位设置为1或0不会更改这些时间

    -3)我有一个CPU2,因为控制卡上的是377D。 但在我的最终定制板上,我们将使用单核(377S)

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

    我很高兴听到抖动消失了。

    您的1ms中断可能是轮询USB设备以获取更新的主机(PC)。 如果您监控USB流量,您应该能够知道发生了什么。 我们在这里使用硬件总线分析器,但也有免费的Windows软件,如USBPcap。