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:使用 LWIP 的 EMAC 轮询

Guru**** 2443660 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1231883/tms570lc4357-emac-polling-using-lwip

器件型号:TMS570LC4357

使用 LWIP 示例程序进行轮询时出现问题。

如果我直接使用示例程序、则通过按原样调用 RX/TX ISR 函数进行轮询可以正常工作。

当我尝试将这个完全相同的代码集成到我的程序中时、我被卡在 while 环路中的 RX ISR 中

while(hdkif_swizzle_data(curr_bd->flags_pktlen) & EMAC_BUF_DESC_SOP)

它会立即进入 RX 处理程序、因为 rxintstatraw 已设置为1、但它因为

if((hdkif_swizzle_data(curr_bd->flags_pktlen) & EMAC_BUF_DESC_OWNER)
       != EMAC_BUF_DESC_OWNER)

不满足此 if 语句。 因此、它会跳过 RX ISR 处理程序中的所有代码、并使用以下内容更新 CURR_BD:

curr_bd = rxch->active_head;

但 CURR_BD 未更新、并仍设置为相同的值。 即使我尝试向器件发送以太网请求、器件仍然卡在这个循环中、不会进入 if 语句、也不会退出 while 循环。

我认为 rxintstatraw 寄存器可能存在问题、因此我使用了 MACINVECTOR 寄存器的这种票证启用。 但该寄存器也会被设置、我仍然卡住。

对于我可能做错了什么、是否有任何建议? 我当前使用的是静态 IP 设置、它在 SCI 端口上报告成功

uint8 ip_addr[4] = { 172, 16, 0, 246 };
    uint8 netmask[4] = { 255, 255, 0, 0 };
    uint8 gateway[4] = { 172, 16, 0, 1 };
    ipAddr = lwIPInit(0, emacAddress,
        *((uint32_t *)ip_addr),
        *((uint32_t *)netmask),
        *((uint32_t *)gateway),
        IPADDR_USE_STATIC);

我具有与示例程序相同的 lwipots 和 opts.h 设置

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

    您好、Adam、

    很抱歉耽误你的时间、我刚开始研究你的线程、马上就要更新了。

    --

    谢谢。此致、
    Jagadish。

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

    实际上昨晚我解决了 RX ISR 中卡住的问题。 事实证明、当示例程序选择了 RMII 时、我选择了 MII。 当我交换程序以选择 RMII 时、它修复了 ISR 卡住。

    PINMUX_ETHERNET_SELECT(RMII);

    当我试图去 IP 查看网站时,我仍然没有得到回应。 这将是我的新问题。

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

    实际上这是不正确的。 从 MII 切换到 RMII 会导致我根本不接收数据包。 这是为奇数、因为示例程序与在同一硬件上选择 RMII 一起工作。 引脚多路复用与 EMAC/MDIO 引脚相同。 SPI/GPIO/SCI 引脚不同的原因很明显。 唯一的其他主要差异是 VCLK4/VCLK3的频率为100Mhz、而示例程序为75MHz。 但是、我将 MDIO 的 CLKDIV 从74更新为99、以将 MDIO 时钟保持在1MHz。

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

    我进行了检查、示例程序具有75MHz VCLK3和37.5 VCLKA4_DIV、75MHz VCLKA4_S。 我想、如果我没记错、在 TMS570文档中、它指出 EMAC 逻辑被同步到 VCLKA4_DIV 源。 示例程序中的哪个值应该是37.5?

    我现在看到的唯一主要问题是 EMAC 未能取消置位所有权位。 导致我的 RX int 处理程序卡住。 如果我删除寻找所有权位的 if 语句、我可以正确地处理以太网数据包。

    在此票证中看到的反向类型问题似乎是 用户卡在 TX 处理程序中、因为 EMAC 控制器未取消置位所有权位。

    我尝试过33Mhz 和50MHz 的 VCLKA4_DIV、但这也未解决问题。 我担心会忽略我的程序的 RX 处理程序中的 EMAC_BUF_DESC_OWNER 位。

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

    您好、Adam、

    很抱歉耽误了时间、我一直在处理其他问题、我将尽量在星期一之前提供有关此问题的更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好、Adam、

    您能否看一下下面两个线程、这些线程对于这个问题非常有用。

    (12) TMS570LC4357:HDK LwIP 示例。 EMACTxIntHandler 挂起-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (12) RM46 LwIP 演示挂起-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    这两个链路都与由于 VIM 设置而调用错误的 TX ISR 函数相关。 我们的程序使用轮询。 也许我在最初的帖子中会使您感到困惑、因为我曾提到我曾卡在 RX ISR 处理程序中。 我确实从示例程序中删除了 VIM 设置、并通过检查我现在所做的相同标志寄存器对其进行了修改、以使用轮询方法。

    我的意思是、我滞留在 RX ISR 处理程序函数中(示例程序将其用作 ISR)。 我在检查标志寄存器后调用该函数以查看是否有新的 RX 消息。

    一旦我有了新的 RX 消息、程序就会进入 RX 处理程序功能、但在测试 EMAC 是否已取消置位所有权位、表明它已完成接收整个消息时会卡住。 (如果将消息拆分为倍数或仍需要进行一些处理、则 EMAC 仍会设置所有权位。)

    我对我的指针没有问题。 它们正确地指向外设 RAM。 地址为0xFC521004。

    CURR_BD->FLAGS_pktlen = 0x3C0000E0、该函数在混合后仍设置 EMAC_BUF_DESC_OWNER 位。 我检查了缓冲区的初始化、我们所做的就是为分配给 EMAC RX 处理程序的各种数据包设置 EMAC_BUF_DESC_OWNER 位、也在示例程序中完成。

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

    我已将示例程序从默认的 VCLK/HCLK 分别为75MHz 和150Mhz 更改为我的程序使用的 VCLK/HCLK、即100Mhz 和100Mhz、但示例程序仍正确取消设置 EMAC_BUF_DESC_OWNER 位。

    如果我在 RX 处理程序函数中忽略了这个位、EMAC/以太网似乎可以正常工作、但我不想依赖于类似这样的未定义的某种行为、我想要找到它无法工作的原因。

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

    您好、Adam、

    最后、我需要您的完整项目来调试问题。 您可以以私人消息的形式与我共享。

    有可能吗?

    --

    谢谢。此致、
    Jagadish。