Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.

We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.

Thank you for your understanding.


This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

EMAC Receive Problem

DWORD EMACReceive( DWORD *EMACBuf )
{
  DWORD RxProduceIndex, RxConsumeIndex;
  DWORD RxLength = 0;
  DWORD Counter = 0;

  /* the input parameter, EMCBuf, needs to be word aligned */
  RxProduceIndex = MAC_RXPRODUCEINDEX;
  RxConsumeIndex = MAC_RXCONSUMEINDEX;

  if ( RxProduceIndex == EMAC_RX_DESCRIPTOR_COUNT )
  {
        /* reach the limit, that probably should never happen */
        MAC_RXPRODUCEINDEX = 0;
        CurrentRxPtr = EMAC_RX_BUFFER_ADDR;
  }

  /* a packet has arrived. */
  if ( RxProduceIndex != RxConsumeIndex )
  {
        if ( RxProduceIndex < RxConsumeIndex )       /* Wrapped around already */
        {
          /* take care of unwrapped, RxConsumeIndex to EMAC_RX_DESCERIPTOR_COUNT */
          RxLength += EMACReceiveFractions( RxConsumeIndex, EMAC_RX_DESCRIPTOR_COUNT );
          Counter++;
          PacketReceived = TRUE;

          /* then take care of wrapped, 0 to RxProduceIndex */
          if ( RxProduceIndex > 0 )
          {
                RxLength += EMACReceiveFractions( 0, RxProduceIndex );
                Counter++;
          }
        }
        else                                    /* Normal process */
        {
            RxLength += EMACReceiveFractions( RxConsumeIndex, RxProduceIndex );
                Counter++;
        }
  }
  return( RxLength );
}

This is my EMACReceive function and

#define MAC_RXPRODUCEINDEX  (*(volatile unsigned long *)(MAC_BASE_ADDR + 0x114)) /* Rx produce index reg (RO) */
#define MAC_RXCONSUMEINDEX  (*(volatile unsigned long *)(MAC_BASE_ADDR + 0x118)) /* Rx consume index reg */

Execution skip the receiving portion bescause RxProduceIndex = RxConsumeIndex = 0

What wil be the problem

Thank you

Parents Reply Children
No data