关于LM3S6911以太网的问题



使用的是lwip的协议栈,网络隔离器是HR911105A。现在在个别的板上发现一个问题:在发送数据包时,调用下面的代码等待是否有空间,

    while(!EthernetSpaceAvail(ETH_BASE))
    {
    }

发现CPU一直在这里执行。这样的问题一般是什么原因引起?我开始怀疑是25M的晶振,但是我换了问题还是这样。

  • 说明WHILE条件一直为真,仔细调试检查判断条件是否正常

  • 我当然知道while的条件一直为真,我是想问为甚么EthernetSpaceAvail(ETH_BASE)会一直返回无空闲空间来发送新的数据包?会造成无空闲空间发送新的数据包是否是硬件问题,如果是硬件问题,是那个器件的问题?

  • 您好:

       while(!EthernetSpaceAvail(ETH_BASE))

       {

       }

    这句的条件一直正说明:EthernetSpaceAvail(ETH_BASE)为假了,这个函数的原型函数是:

    EthernetSpaceAvail(unsigned long ulBase)

    {

       //

       // Check the arguments.

       //

       ASSERT(ulBase == ETH_BASE);

       //

       // Return the availability of space.

       //

       return((HWREG(ulBase + MAC_O_TR) & MAC_TR_NEWTX) ? false : true);

    }

    说明ulBase + MAC_O_TR这个寄存器的值为零,说明FIFO中一直没有数据。那么说明你没有给FIFO给数。检查下你的程序、、希望能帮到您。

  • 我今天仔细看了一下6911的数据手册,关于MAC_TR_NEWTX的说明是这样的:

    When set, the NEWTX bit initiates an Ethernet transmission once the

    packet has been placed in the TX FIFO. This bit is cleared once the

    transmission has been completed. If early transmission is being used

    (see the MACTHR register), this bit does not need to be set.

    这说明不是FIFO中没有数据,而是数据没有发送出去。