A PicoTCP driver for the lpc1768 mbed board
Dependents: lpc1768-picotcp-demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test TCPSocket_HelloWorld_PicoTCP ... more
Diff: pico_dev_mbed_emac.cpp
- 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;