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.

C6657 EMAC例程调试



在开发板上调试网口,下载了论坛提供的例程C6657_EMAC_Example.zip,运行发送程序通过,并在WireShark上得到发送的数据。但有个问题:

 单步运行程序,当运行到EMAC_Send函数时,发现运行语句

if (0 == EMAC_REGS->TX0HDP)
{
EMAC_REGS->TX0HDP = (Uint32)newDesc;
} 无效,也就是,TX0HDP寄存器写不进去,所以后面的((EMAC_Desc *) emac_mcb.lasttxhdp)->pNext = newDesc;语句一直得不到运行,也就是发送的发送符链表根本就建立不了。

尝试把语句newDesc->PktFlgLen = EMAC_DSC_FLAG_SOP | EMAC_DSC_FLAG_EOP | EMAC_DSC_FLAG_OWNER | len;中的EMAC_DSC_FLAG_OWNER去掉,则TX0HDP寄存器可以写入,但是wireShark上抓不到数据,即EMAC数据没有输出。请问是什么原因。

  • Hi, 您好!

    我在EVM板上单步运行了程序,TX0HDP是可以写进去的。但是因为EMAC硬件工作很快,发送过程很快完成(比人工单步快得多), 描述符写进TX0HDP的瞬间就发出去了, 所以在TX0HDP里看不到描述符, 但是在发送完成寄存器TX0CP(0x02C08640)能够看到描述符 (0x02C0A040), 见附件图

    不能将EMAC_DSC_FLAG_OWNER去掉,去掉后EMAC不会处理该包数据(不发送)

    谢谢!

     

  • 谢谢答复,我想再问一下,是不是发送操作时,往TX0HDP寄存器写值就启动了数据发送。发送完成TX0HDP为什么会变味0。如此是不是发送字符链表就只有一个包,建表过程跟本就没有实现。谢谢答复
  • Hi, 您好!

    是的, 往TX0HDP寄存器写值就启动了数据发送, 发送完成后描述符放到TX0CP, 此时TX0HDP变为0

    在一些情况下还是会有建链, 比如DSP持续发包(发包速度比EMAC快的情况)

    谢谢