在开发板上调试网口,下载了论坛提供的例程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数据没有输出。请问是什么原因。
Kevin Cai:
Hi, 您好!
我在EVM板上单步运行了程序,TX0HDP是可以写进去的。但是因为EMAC硬件工作很快,发送过程很快完成(比人工单步快得多), 描述符写进TX0HDP的瞬间就发出去了, 所以在TX0HDP里看不到描述符, 但是在发送完成寄存器TX0CP(0x02C08640)能够看到描述符 (0x02C0A040), 见附件图
不能将EMAC_DSC_FLAG_OWNER去掉,去掉后EMAC不会处理该包数据(不发送)
谢谢!
Lew Yu:
回复 Kevin Cai:
谢谢答复,我想再问一下,是不是发送操作时,往TX0HDP寄存器写值就启动了数据发送。发送完成TX0HDP为什么会变味0。如此是不是发送字符链表就只有一个包,建表过程跟本就没有实现。谢谢答复
Kevin Cai:
回复 Lew Yu:
Hi, 您好!
是的, 往TX0HDP寄存器写值就启动了数据发送, 发送完成后描述符放到TX0CP, 此时TX0HDP变为0
在一些情况下还是会有建链, 比如DSP持续发包(发包速度比EMAC快的情况)
谢谢
TI中文支持网




