<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: lwip LPC176x EMAC in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547121#M9974</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by NXP_Europe on Thu Dec 22 07:52:32 MST 2011&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;If you aren't aware of it, you may want to have a look at the LWIP port for the LPC17xx available on lpcware.com here:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://"&gt;http://www.lpcware.com/content/project/lightweight-ip-lwip-networking-stack&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This is not the final release, but looking at the links on the right-hand side there is some useful information on configuring lwip, etc.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 00:35:35 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T00:35:35Z</dc:date>
    <item>
      <title>lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547119#M9972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nkarakotas on Wed Dec 21 07:37:55 MST 2011&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After using uIP I decided to try out lwip as it's designed for 32 bit and offer better performance. Im having a few problems with the EMAC drivers. I keep on receiving corrupted packets unless there is somewhere problems when copying the data to the pbuf. Below is the EMAC.c and the part of the ethernetif.c. Does anyone have any clues?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
static void ethernetif_input( void * pvParameters )
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; struct ethernetif&amp;nbsp;&amp;nbsp; *ethernetif;
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct eth_hdr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ethhdr;
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p;
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct netif *netif;


&amp;nbsp;&amp;nbsp;&amp;nbsp; netif = (struct netif*) pvParameters;

&amp;nbsp;&amp;nbsp;&amp;nbsp; for( ;; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ethernetif = netif-&amp;gt;state;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* move received packet into a new pbuf */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = low_level_input( netif );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( p == NULL )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No packet could be read.&amp;nbsp; Wait a for an interrupt to tell us
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; there is more data available. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vEMACWaitForInput();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while( p == NULL );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* points to packet payload, which starts with an Ethernet header */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ethhdr = p-&amp;gt;payload;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch( htons( ethhdr-&amp;gt;type ) )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* IP packet? */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_IP:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_ARP:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (netif-&amp;gt;input(p, netif)!=ERR_OK){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf_free(p);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;static struct pbuf *low_level_input( struct netif *netif )
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static xSemaphoreHandle xRxSemaphore = NULL;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Parameter not used. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; ( void ) netif;

&amp;nbsp;&amp;nbsp;&amp;nbsp; if( xRxSemaphore == NULL )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vSemaphoreCreateBinary( xRxSemaphore );

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Access to the emac is guarded using a semaphore. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( xSemaphoreTake( xRxSemaphore, netifGUARD_BLOCK_TIME ) )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( EMAC_CheckReceiveIndex() == TRUE )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = EMAC_ReadPacketBuffer( NULL );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(p != NULL){

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if LINK_STATS
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwip_stats.link.recv++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif /* LINK_STATS */

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // drop packet();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if LINK_STATS
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwip_stats.link.memerr++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwip_stats.link.drop++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif /* LINK_STATS */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xSemaphoreGive( xRxSemaphore );
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; return p;
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;Part of [B]emac.c[/B]&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;/*--------------------------- rx_descr_init ---------------------------------*/
/*********************************************************************//**
 * @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initializes RX Descriptor
 * @param[in]&amp;nbsp;&amp;nbsp; None
 * @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None
 ***********************************************************************/
static void rx_descr_init (void)
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i;

&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; EMAC_NUM_RX_FRAG; i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RX_DESC_PACKET(i)&amp;nbsp; = RX_BUF(i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RX_DESC_CTRL(i)&amp;nbsp;&amp;nbsp;&amp;nbsp; = EMAC_RCTRL_INT | (EMAC_ETH_FRAG_SIZE-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RX_STAT_INFO(i)&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RX_STAT_HASHCRC(i) = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set EMAC Receive Descriptor Registers. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;RxDescriptor&amp;nbsp;&amp;nbsp;&amp;nbsp; = RX_DESC_BASE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;RxStatus&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = RX_STAT_BASE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;RxDescriptorNumber = EMAC_NUM_RX_FRAG-1;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Rx Descriptors Point to 0 */
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;RxConsumeIndex&amp;nbsp; = 0;
}

struct pbuf* EMAC_ReadPacketBuffer(EMAC_PACKETBUF_Type *pDataStruct)
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf* p;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t size;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t Index;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* init p pointer */
&amp;nbsp;&amp;nbsp;&amp;nbsp; p = NULL;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Index = LPC_EMAC-&amp;gt;RxConsumeIndex;

&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Index != LPC_EMAC-&amp;gt;RxProduceIndex)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size = (RX_STAT_INFO(Index) &amp;amp; 0x7ff)+1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (size &amp;gt; EMAC_ETH_FRAG_SIZE) size = EMAC_ETH_FRAG_SIZE;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* allocate buffer */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = pbuf_alloc(PBUF_LINK, size, PBUF_RAM);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (p != NULL)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf* q;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t *ptr;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ptr = (uint8_t*)RX_BUF(Index);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (q = p; q != NULL; q= q-&amp;gt;next)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy(q-&amp;gt;payload, ptr, q-&amp;gt;len);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ptr += q-&amp;gt;len;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* move Index to the next */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(++Index &amp;gt; LPC_EMAC-&amp;gt;RxDescriptorNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Index = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set consume index */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;RxConsumeIndex = Index;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp; return p;
}

void ENET_IRQHandler( void )
{
unsigned long ulStatus;
long lHigherPriorityTaskWoken = pdFALSE;

&amp;nbsp;&amp;nbsp;&amp;nbsp; ulStatus = LPC_EMAC-&amp;gt;IntStatus;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear the interrupt. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EMAC-&amp;gt;IntClear = ulStatus;

&amp;nbsp;&amp;nbsp;&amp;nbsp; if( ulStatus &amp;amp; EMAC_INT_RX_DONE )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Ensure the uIP task is not blocked as data has arrived. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xSemaphoreGiveFromISR( xSemaphore, &amp;amp;lHigherPriorityTaskWoken );
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; if( ulStatus &amp;amp; EMAC_INT_TX_DONE )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EMAC_UpdateTxProduceIndex();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; portEND_SWITCHING_ISR( lHigherPriorityTaskWoken );
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;DEBUG OUTPUT:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;netif_set_ipaddr: netif address being changed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;netif: IP address of interface 192.168.1.16&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;netif: netmask of interface 255.255.255.0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;netif: GW address of interface 192.168.1.30&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;netif: added interface em IP addr 192.168.1.16 netmask 255.255.255.0 gw 192.168.1.30&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pbuf_alloc(length=64)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pbuf_alloc(length=64) == 0x10005e8c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tcpip_thread: PACKET 0x10001a10&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IP packet dropped due to bad version number 15&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IP header:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;|15 |15 |&amp;nbsp; 0xff |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 65535&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (v, hl, tos, len)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; 65535&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |000|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26&amp;nbsp;&amp;nbsp; | (id, flags, offset)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;|&amp;nbsp; 146&amp;nbsp; |&amp;nbsp; 224&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x824b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (ttl, proto, chksum)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp; | (src)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp; | (dest)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;+-------------------------------+&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pbuf_free(0x10005e8c)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pbuf_free: deallocating 0x10005e8c&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547119#M9972</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:34Z</dc:date>
    </item>
    <item>
      <title>Re: lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547120#M9973</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nkarakotas on Thu Dec 22 07:09:33 MST 2011&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After double checking everything I was sure I was receiving packets but most frequently they where ARP packets and the tcp_input function wasnt parsing them. In code it was casting the p-&amp;gt;payload to an IP struct, but was an ARP packet thus giving this error. After setting the correct flags below, the ARP messages are parsed ok.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;/* device capabilities */
&amp;nbsp; /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */
&amp;nbsp; netif-&amp;gt;flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547120#M9973</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:35Z</dc:date>
    </item>
    <item>
      <title>Re: lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547121#M9974</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by NXP_Europe on Thu Dec 22 07:52:32 MST 2011&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;If you aren't aware of it, you may want to have a look at the LWIP port for the LPC17xx available on lpcware.com here:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://"&gt;http://www.lpcware.com/content/project/lightweight-ip-lwip-networking-stack&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This is not the final release, but looking at the links on the right-hand side there is some useful information on configuring lwip, etc.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547121#M9974</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:35Z</dc:date>
    </item>
    <item>
      <title>Re: lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547122#M9975</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nkarakotas on Thu Dec 22 08:43:55 MST 2011&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes I have looked at it. But when using many references you get lost. It also not in using an OS. The nice thing is the zero copy buffers implemented. In time I will have a proper working port.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Nick&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547122#M9975</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:36Z</dc:date>
    </item>
    <item>
      <title>Re: lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547123#M9976</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by alpha on Mon Jun 11 20:14:29 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: NXP_Europe&lt;/STRONG&gt;&lt;BR /&gt;If you aren't aware of it, you may want to have a look at the LWIP port for the LPC17xx available on lpcware.com here:&lt;BR /&gt; &lt;BR /&gt;&lt;A href="http://"&gt;http://www.lpcware.com/content/project/lightweight-ip-lwip-networking-stack&lt;/A&gt;&lt;BR /&gt; &lt;BR /&gt;This is not the final release, but looking at the links on the right-hand side there is some useful information on configuring lwip, etc.&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi this post seems to be from last year but the website still does not show a lpc17xx port. It only shows the port for LPC177x_8x or LPC18xx/43xx. However the information/docs on lwIP at the webpage is quite good. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone have a port for lpc17xx, better still for lpc1769 with LAN8720?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547123#M9976</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:37Z</dc:date>
    </item>
    <item>
      <title>Re: lwip LPC176x EMAC</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547124#M9977</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ex-kayoda on Tue Jun 12 01:23:15 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: alpha&lt;/STRONG&gt;&lt;BR /&gt;Does anyone have a port for lpc17xx, better still for lpc1769 with LAN8720?&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are several examples in your Example folder (like RDB1768cmsis2), a lot of them can detect LAN8720 or DP83848 and work with both of them:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp; if ((phy_id != DP83848C_ID) &amp;amp;&amp;amp; (phy_id != LAN8720_ID))
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:35:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/lwip-LPC176x-EMAC/m-p/547124#M9977</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:35:37Z</dc:date>
    </item>
  </channel>
</rss>

