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.

[参考译文] TMS570LC4357:EMAC 决定在它设置 EOQ 之前停止。

Guru**** 2482225 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/720959/tms570lc4357-emac-decides-to-stop-well-before-it-sets-the-eoq

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我设计了一个围绕 EMAC 本身的测试线束、以确定 EOQ 标志的生命周期。  以下是我的调查结果:

只有在 EMAC 停止时、才会在最后一次传输完成时置位所有者和 EOQ 位。

2. EMAC 在传输开始时决定它是否在当前传输后停止(即在传输完成后它不会重新检查描述符的下一个)。

当我查看 LwIP Halcogen 实现时、驱动程序会等待前一个传输链完成(即轮询 EOQ)、而不是链接到活动传输。  对该变通办法的需求与上述结果相符。  遗憾的是、等待时间可能很长、在我们的实时设计中不起作用。

/*等待 EOQ 位被置位*/*SAFETYMCUSW
28 D MR:NA "硬件状态位读取检查"*/
/* SAFETYMCUSW 134 S MR:12.2 "LDRA 工具问题"*/
/* SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
while (EMAC_BUF_DESC_EOQ!=(EMACSwizleData (CURR_BD->FLAGS_pktlen)& EMAC_BUF_DESC_EOQ)
{
} 

根据我在上面的发现、我相信、在使用中断完成传输后、可以检测 EMAC 是否已停止的最早点是正确的。  然后、如果 ISR 检测到 EMAC 已决定停止、它可以重新启动链。

我的问题是:

我在上面的发现是否描述了硬件的行为方式?

* 技术参考资料

对比赛条件的讨论并不能确定在检查 EOQ 之前必须完成所有先前的转让。  讨论确实表明应该可以连接到有源链、但实际上、我发现只有在我连接到无源链并在检测到 EOQ 后重新启动 EMAC 时、此操作才有效。

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

    我将与我们的设计工程师核实、并让他回答您的问题。 明天我将出差、无法及时回复您的帖子。