A PicoTCP driver for the lpc1768 mbed board

Dependents:   lpc1768-picotcp-demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test TCPSocket_HelloWorld_PicoTCP ... more

Revision:
8:0b675bdd074f
Parent:
7:608779751f85
Child:
9:1ef61e7465a5
Child:
12:dc845268281a
--- a/pico_dev_mbed_emac.cpp	Wed Jul 03 08:00:05 2013 +0000
+++ b/pico_dev_mbed_emac.cpp	Tue Jul 16 06:57:10 2013 +0000
@@ -543,8 +543,18 @@
   
   if (txfree == 0)
   {
+    int retries = 2;
+    // block until an index gets free
+    while((LPC_EMAC->TxConsumeIndex -1)== LPC_EMAC->TxProduceIndex && (retries--))
+        Thread::wait(1);
+    
+    if((LPC_EMAC->TxConsumeIndex -1)== LPC_EMAC->TxProduceIndex)
+        return 0;
+    else
+        bufferIndex = LPC_EMAC->TxProduceIndex;
     //printf("p%i c%i stat:%d\r\n",prod,cons,LPC_EMAC->TxStatus);
-    return 0;
+    //printf("Sending returned 0 : %x :%x\n",LPC_EMAC->IntStatus,LPC_EMAC->IntEnable);
+    
   }
   
   // set tx descriptors for send
@@ -561,10 +571,8 @@
 
   // send data, no interrupt needed I see, for now
   mbdev->dma_data->p_tx_desc[bufferIndex].Ctrl &= ~0x7FF;
-  mbdev->dma_data->p_tx_desc[bufferIndex].Ctrl = (((uint32_t)size -1) & 0x7FF) | TCTRL_LAST | TCTRL_INT;
+  mbdev->dma_data->p_tx_desc[bufferIndex].Ctrl = (((uint32_t)size -1) & 0x7FF) | TCTRL_INT | TCTRL_LAST;
   
-  //printf("ETH> sent %d bytes\r\n",data_sent);
-
   // advance the TxProduceIndex
   bufferIndex = (bufferIndex+1)%NUM_TX_FRAG;
   LPC_EMAC->TxProduceIndex = bufferIndex;