\r
/* Demo includes. */\r
#include "EthDev_LPC17xx.h"\r
-#include "LED.h"\r
+#include "EthDev.h"\r
+#include "ParTest.h"\r
\r
#include "LPC17xx.h"\r
#include "core_cm3.h"\r
\r
/*-----------------------------------------------------------*/\r
\r
-/*\r
- * Send the uIP buffer to the MAC.\r
- */\r
-static void prvENET_Send(void);\r
-\r
/*\r
* Setup the MAC address in the MAC itself, and in the uIP stack.\r
*/\r
/*-----------------------------------------------------------*/\r
\r
/* The semaphore used by the ISR to wake the uIP task. */\r
-extern xSemaphoreHandle xEMACSemaphore;\r
+xSemaphoreHandle xEMACSemaphore = NULL;\r
\r
/*-----------------------------------------------------------*/\r
\r
\r
( void ) pvParameters;\r
\r
- /* Create the semaphore used by the ISR to wake this task. */\r
- vSemaphoreCreateBinary( xEMACSemaphore );\r
-\r
/* Initialise the uIP stack. */\r
timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
uip_setnetmask( xIPAddr );\r
httpd_init();\r
\r
+ /* Create the semaphore used to wake the uIP task. */\r
+ vSemaphoreCreateBinary( xEMACSemaphore );\r
+\r
/* Initialise the MAC. */\r
while( Init_EMAC() != pdPASS )\r
{\r
\r
portENTER_CRITICAL();\r
{\r
- ETH_INTENABLE = INT_RX_DONE;\r
+ ETH_INTENABLE = ( INT_RX_DONE | INT_TX_DONE );\r
/* set the interrupt priority */\r
NVIC_SetPriority( ENET_IRQn, configMAX_SYSCALL_INTERRUPT_PRIORITY );\r
/* enable the interrupt */\r
for( ;; )\r
{\r
/* Is there received data ready to be processed? */\r
- uip_len = uiGetEMACRxData( uip_buf );\r
+ uip_len = ulGetEMACRxData();\r
\r
- if( uip_len > 0 )\r
+ if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
{\r
/* Standard uIP loop taken from the uIP manual. */\r
if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
if( uip_len > 0 )\r
{\r
uip_arp_out();\r
- prvENET_Send();\r
+ vSendEMACTxData( uip_len );\r
}\r
}\r
else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
uip_len is set to a value > 0. */\r
if( uip_len > 0 )\r
{\r
- prvENET_Send();\r
+ vSendEMACTxData( uip_len );\r
}\r
}\r
}\r
else\r
{\r
- if( timer_expired( &periodic_timer ) )\r
+ if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
{\r
timer_reset( &periodic_timer );\r
for( i = 0; i < UIP_CONNS; i++ )\r
if( uip_len > 0 )\r
{\r
uip_arp_out();\r
- prvENET_Send();\r
+ vSendEMACTxData( uip_len );\r
}\r
}\r
\r
}\r
/*-----------------------------------------------------------*/\r
\r
-static void prvENET_Send(void)\r
-{\r
- RequestSend();\r
-\r
- /* Copy the header into the Tx buffer. */\r
- CopyToFrame_EMAC( uip_buf, uipTOTAL_FRAME_HEADER_SIZE );\r
- if( uip_len > uipTOTAL_FRAME_HEADER_SIZE )\r
- {\r
- CopyToFrame_EMAC( uip_appdata, ( uip_len - uipTOTAL_FRAME_HEADER_SIZE ) );\r
- }\r
-\r
- DoSend_EMAC( uip_len );\r
-\r
- RequestSend();\r
-\r
- /* Copy the header into the Tx buffer. */\r
- CopyToFrame_EMAC( uip_buf, uipTOTAL_FRAME_HEADER_SIZE );\r
- if( uip_len > uipTOTAL_FRAME_HEADER_SIZE )\r
- {\r
- CopyToFrame_EMAC( uip_appdata, ( uip_len - uipTOTAL_FRAME_HEADER_SIZE ) );\r
- }\r
-\r
- DoSend_EMAC( uip_len );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
static void prvSetMACAddress( void )\r
{\r
struct uip_eth_addr xAddr;\r