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:以太网驱动器/模块使 TX 中断

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1264698/tms320f28388d-ethernet-driver-module-dropping-tx-interrupts

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

我正在实施一个简单的以太网应用。 目前、我只处理 ARP 和 ICMP 部分(基本上是  ping)。 我正在使用 C2000Ware 为 CM 提供的驱动程序、并连接到提供的以太网驱动程序中。

我为 RX (用于数据包解析)和 TX (用于释放缓冲区)添加了自定义回调。 这两个定制的回调函数也会调用驱动程序标准回调函数(Ethernet_receivePacketCallback 和 Ethernet_releaseTxPacketBuffer)。

代码会 ARP 并在一段时间内处理 ping 流量而不会出现问题。 最后、我注意到我缺少一些为 TX 分配的缓冲区。 我使用 Wireshark 检查流量并查看所有 ping 都已得到响应、并验证缺少缓冲区中的数据是否与传输响应的 ID 匹配。 似乎没有调用 TX 中断来释放缓冲区资源。 TX 描述符/缓冲区管理器中有用于分配和释放的计数器、表明从未返回过资源。 这些计数器也与驱动程序层中的计数器匹配。

这种情况发生在10到6000个 ping 之间的任何位置。 我从两个单独的终端窗口对器件执行 Ping 操作、以对系统施加压力。 从 Wireshark 来看、似乎通信是按顺序传输的、因为在上一个 ping 得到响应之前会收到新的 ping。 我注意到这个缺少中断的事件。 如上所述、响应是100%被发送、但是资源释放(来自 TX 中断)缺失。

我的线程模型为:

-接收 ISR

  -禁用中断(INT_EMAC_RX0和 INT_EMAC_TX0 )

  -解析数据包

  -从池中分配 TX 描述符和缓冲区

  -传输响应

  -启用中断

- TX ISR

  -禁用中断

  -免费的 TX 描述符和缓冲器

  -启用中断

 

我搞砸了中断优先级、认为 TX 中断被 RX 中断改编并清除、但尚未找到问题所在。 是否有关于以太网驱动程序的社区想法/经验? 我在流程中遗漏了什么? 提前感谢。