主题中讨论的其他器件:HALCOGEN
工具与软件:
在 Hercules 开发套件上进行 EMAC 测试实施期间、当 RX 数据速率接近最大速度时会发生一些错误。
尤其是以最大速度传输最小尺寸的帧、需要通过 μ µC 完全停止帧接收。 在完成一些测量之后、我发现该行为是由 RX ISR 引起的、它所花费的时间比下一帧到达所花费的时间更长。 为此、μ µC 超出了缓冲区、并将 RX 报头描述符指针设置为0。 如参考手册中所述、EOQ 位应指示这一点。 但是、在我的例子中、似乎有时 HDP 在不设置 EOQ 位的情况下会得到零。 这将导致不再执行 ISR。 我们为什么不看到 EOQ 位?
我们通过测试 EMACReceive 函数的 HDP 是否为零来部分解决此问题。 如果 HDP 为零、我们将其设置为 free_head 指针。 因此、μ µC 可以在发生过载后恢复。
执行此操作后、出现了一个稍微不同的错误:我们显示新帧、它们按预期触发 ISR。 但出于某种原因、仍会在 ACTIVE_HEAD 帧中设置 owner 位。
我的目标不是,完全防止封装丢失,因为这是不可能的,但 μ µC 可以从这种过载在每种情况下恢复。
此致
Georg Hermann