]> git.sur5r.net Git - freertos/blobdiff - Demo/CORTEX_LPC1768_GCC_Rowley/webserver/uIP_Task.c
Update EMAC driver.
[freertos] / Demo / CORTEX_LPC1768_GCC_Rowley / webserver / uIP_Task.c
index a88e4ee030d11e2611703cc76e757cc4b2953988..4d8f9cb2025b6c438becb62ef5b97c02413b770e 100644 (file)
@@ -66,7 +66,8 @@
 \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
@@ -102,7 +98,7 @@ clock_time_t clock_time( void );
 /*-----------------------------------------------------------*/\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
@@ -127,9 +123,6 @@ extern void ( vEMAC_ISR_Wrapper )( void );
 \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
@@ -140,6 +133,9 @@ extern void ( vEMAC_ISR_Wrapper )( void );
        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
@@ -148,7 +144,7 @@ extern void ( vEMAC_ISR_Wrapper )( void );
 \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
@@ -161,9 +157,9 @@ extern void ( vEMAC_ISR_Wrapper )( void );
        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
@@ -177,7 +173,7 @@ extern void ( vEMAC_ISR_Wrapper )( void );
                                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
@@ -189,13 +185,13 @@ extern void ( vEMAC_ISR_Wrapper )( void );
                                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
@@ -208,7 +204,7 @@ extern void ( vEMAC_ISR_Wrapper )( void );
                                        if( uip_len > 0 )\r
                                        {\r
                                                uip_arp_out();\r
-                                               prvENET_Send();\r
+                                               vSendEMACTxData( uip_len );\r
                                        }\r
                                }\r
 \r
@@ -232,32 +228,6 @@ extern void ( vEMAC_ISR_Wrapper )( void );
 }\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