请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 时、此操作才有效。