]> git.sur5r.net Git - freertos/commitdiff
Work in progress.
authorRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 28 May 2009 20:40:12 +0000 (20:40 +0000)
committerRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 28 May 2009 20:40:12 +0000 (20:40 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@742 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/.cproject
Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/FreeRTOSConfig.h
Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/Makefile
Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/main.c
Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/webserver/emac.c
Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/webserver/uIP_Task.c

index dc9ebb52837477c9f3b6f32fc8e7d1fe67e36801..02b7045ccd5e4fd2a95e71f46f229bf098bba936 100644 (file)
 <projectStorage>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13;\r
 &lt;TargetConfig&gt;&#13;\r
 &lt;Properties property_0="" property_1="" property_2="" property_3="NXP" property_4="LPC1766ENG" property_count="5" version="1"/&gt;&#13;\r
-&lt;infoList vendor="NXP"&gt;&lt;info chip="LPC1766ENG" match_id="0x00033f33" name="LPC1766ENG"&gt;&lt;chip&gt;&lt;name&gt;LPC1766ENG&lt;/name&gt;&#13;\r
+&lt;infoList vendor="NXP"&gt;&#13;\r
+&lt;info chip="LPC1766ENG" match_id="0x00033f33" name="LPC1766ENG"&gt;&#13;\r
+&lt;chip&gt;&#13;\r
+&lt;name&gt;LPC1766ENG&lt;/name&gt;&#13;\r
 &lt;family&gt;LPC17xx&lt;/family&gt;&#13;\r
 &lt;vendor&gt;NXP (formerly Philips)&lt;/vendor&gt;&#13;\r
 &lt;reset board="None" core="Real" sys="Real"/&gt;&#13;\r
 &lt;peripheralInstance derived_from="MPU" determined="infoFile" id="MPU" location="0xE000ED90"/&gt;&#13;\r
 &lt;peripheralInstance derived_from="LPC1x_WDT" determined="infoFile" id="WDT" location="0x40000000"/&gt;&#13;\r
 &lt;/chip&gt;&#13;\r
-&lt;processor&gt;&lt;name gcc_name="cortex-m3"&gt;Cortex-M3&lt;/name&gt;&#13;\r
+&lt;processor&gt;&#13;\r
+&lt;name gcc_name="cortex-m3"&gt;Cortex-M3&lt;/name&gt;&#13;\r
 &lt;family&gt;Cortex-M&lt;/family&gt;&#13;\r
 &lt;/processor&gt;&#13;\r
 &lt;link href="nxp_lpcxxxx_peripheral.xme" show="embed" type="simple"/&gt;&#13;\r
index a92a5ba2f96241a7d3ec4804c2c9a36d3bf97e11..262648ffd83debda68a51d6303b7017eb217e503 100644 (file)
@@ -97,6 +97,26 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 \r
 \r
+/* MAC address configuration. */\r
+#define configMAC_ADDR0        0x00\r
+#define configMAC_ADDR1        0x12\r
+#define configMAC_ADDR2        0x13\r
+#define configMAC_ADDR3        0x10\r
+#define configMAC_ADDR4        0x15\r
+#define configMAC_ADDR5        0x11\r
+\r
+/* IP address configuration. */\r
+#define configIP_ADDR0         192\r
+#define configIP_ADDR1         168\r
+#define configIP_ADDR2         0\r
+#define configIP_ADDR3         200     \r
+\r
+/* Netmask configuration. */\r
+#define configNET_MASK0                255\r
+#define configNET_MASK1                255\r
+#define configNET_MASK2                255\r
+#define configNET_MASK3                0\r
+\r
 /* Use the system definition, if there is one */\r
 #ifdef __NVIC_PRIO_BITS\r
        #define configPRIO_BITS       __NVIC_PRIO_BITS\r
index dedc05353f63f3f127c9e784ddeadccf6a02abd2..cc78af7fd38d89a2417857d411559fe65d61f4cb 100644 (file)
@@ -108,7 +108,6 @@ FreeRTOS_OBJS=                      $(OUTPUT_DIR)/port.o \
 # The demo app source files.\r
 Demo_OBJS=                             $(OUTPUT_DIR)/main.o \\r
                                                $(OUTPUT_DIR)/BlockQ.o \\r
-                                               $(OUTPUT_DIR)/death.o \\r
                                                $(OUTPUT_DIR)/integer.o \\r
                                                $(OUTPUT_DIR)/PollQ.o \\r
                                                $(OUTPUT_DIR)/semtest.o \\r
index 1eeff86195164f8564899647e2aafef865e7f0f9..cb412c4430ddd9185077f8034b63b2a940e8a78a 100644 (file)
@@ -69,7 +69,6 @@
 \r
 /* Demo app includes. */\r
 #include "BlockQ.h"\r
-#include "death.h"\r
 #include "integer.h"\r
 #include "blocktim.h"\r
 #include "flash.h"\r
@@ -162,13 +161,8 @@ long l;
        xLCDQueue = xQueueCreate( mainQUEUE_SIZE, sizeof( xLCDMessage ) );\r
 \r
        /* Start the tasks defined within this file/specific to this demo. */\r
-       xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );\r
+       xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE * 2, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );\r
     \r
-       /* The suicide tasks must be created last as they need to know how many\r
-       tasks were running prior to their creation in order to ascertain whether\r
-       or not the correct/expected number of tasks are running at any given time. */\r
-    vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
-\r
     /* Start the scheduler. */\r
        vTaskStartScheduler();\r
 \r
@@ -292,6 +286,7 @@ void vConfigureTimerForRunTimeStats( void )
 void vLCDTask( void *pvParameters )\r
 {\r
 xLCDMessage xMessage;\r
+char cIPAddr[ 17 ]; /* To fit max IP address length of xxx.xxx.xxx.xxx\0 */\r
 \r
        ( void ) pvParameters;\r
 \r
@@ -301,6 +296,9 @@ xLCDMessage xMessage;
     LCD_cls();    \r
     LCD_gotoxy( 1, 1 );\r
     LCD_puts( "www.FreeRTOS.org" );\r
+    LCD_gotoxy( 1, 2 );\r
+    sprintf( cIPAddr, "%d.%d.%d.%d", configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+    LCD_puts( cIPAddr );\r
 \r
        for( ;; )\r
        {\r
index 91a353a9511ca856da0430b84a712dd3a213bfc7..472265f05b90695f695683bc8c8ceecb95afcf9d 100644 (file)
@@ -43,16 +43,18 @@ static unsigned short SwapBytes(unsigned short Data)
 void write_PHY (int PhyReg, int Value)\r
 {\r
   unsigned int tout;\r
+  const unsigned int uiMaxTime = 10;\r
 \r
   MAC_MADR = DP83848C_DEF_ADR | PhyReg;\r
   MAC_MWTD = Value;\r
 \r
   /* Wait utill operation completed */\r
   tout = 0;\r
-  for (tout = 0; tout < MII_WR_TOUT; tout++) {\r
+  for (tout = 0; tout < uiMaxTime; tout++) {\r
     if ((MAC_MIND & MIND_BUSY) == 0) {\r
       break;\r
     }\r
+    vTaskDelay( 2 );\r
   }\r
 }\r
 \r
@@ -61,16 +63,18 @@ void write_PHY (int PhyReg, int Value)
 unsigned short read_PHY (unsigned char PhyReg) \r
 {\r
   unsigned int tout;\r
+  const unsigned int uiMaxTime = 10;\r
 \r
   MAC_MADR = DP83848C_DEF_ADR | PhyReg;\r
   MAC_MCMD = MCMD_READ;\r
 \r
   /* Wait until operation completed */\r
   tout = 0;\r
-  for (tout = 0; tout < MII_RD_TOUT; tout++) {\r
+  for (tout = 0; tout < uiMaxTime; tout++) {\r
     if ((MAC_MIND & MIND_BUSY) == 0) {\r
       break;\r
     }\r
+    vTaskDelay( 2 );\r
   }\r
   MAC_MCMD = 0;\r
   return (MAC_MRDD);\r
@@ -135,15 +139,15 @@ portBASE_TYPE xReturn = pdPASS;
   PINSEL3 = (PINSEL3 & ~0x0000000F) | 0x00000005;\r
 \r
   /* Power Up the EMAC controller. */\r
-  PCONP |= 0x40000000;\r
-  vTaskDelay( 1 );\r
+  PCONP |= PCONP_PCENET;\r
+  vTaskDelay( 2 );\r
 \r
   /* Reset all EMAC internal modules. */\r
   MAC_MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES;\r
-  MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES;\r
+  MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES | CR_PASS_RUNT_FRM;\r
 \r
   /* A short delay after reset. */\r
-  vTaskDelay( 1 );\r
+  vTaskDelay( 2 );\r
 \r
   /* Initialize MAC control registers. */\r
   MAC_MAC1 = MAC1_PASS_ALL;\r
@@ -157,9 +161,10 @@ portBASE_TYPE xReturn = pdPASS;
 \r
   /* Reset Reduced MII Logic. */\r
   MAC_SUPP = SUPP_RES_RMII;\r
+  vTaskDelay( 2 );\r
   MAC_SUPP = 0;\r
 \r
-  /* Put the DP83848C in reset mode */\r
+  /* Put the PHY in reset mode */\r
   write_PHY (PHY_REG_BMCR, 0x8000);\r
   write_PHY (PHY_REG_BMCR, 0x8000);\r
 \r
@@ -173,6 +178,21 @@ portBASE_TYPE xReturn = pdPASS;
     }\r
   }\r
 \r
+  /* Set the Ethernet MAC Address registers */\r
+  MAC_SA0 = (emacETHADDR0 << 8) | emacETHADDR1;\r
+  MAC_SA1 = (emacETHADDR2 << 8) | emacETHADDR3;\r
+  MAC_SA2 = (emacETHADDR4 << 8) | emacETHADDR5;\r
+\r
+  /* Initialize Tx and Rx DMA Descriptors */\r
+  rx_descr_init ();\r
+  tx_descr_init ();\r
+\r
+  /* Receive Broadcast and Perfect Match Packets */\r
+  MAC_RXFILTERCTRL = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;\r
+\r
+  /* Create the semaphore used ot wake the uIP task. */\r
+  vSemaphoreCreateBinary( xEMACSemaphore );  \r
+  \r
   /* Check if this is a DP83848C PHY. */\r
   id1 = read_PHY (PHY_REG_IDR1);\r
   id2 = read_PHY (PHY_REG_IDR2);\r
@@ -235,21 +255,6 @@ portBASE_TYPE xReturn = pdPASS;
       MAC_SUPP = SUPP_SPEED;\r
     }\r
 \r
-    /* Set the Ethernet MAC Address registers */\r
-    MAC_SA0 = (emacETHADDR0 << 8) | emacETHADDR1;\r
-    MAC_SA1 = (emacETHADDR2 << 8) | emacETHADDR3;\r
-    MAC_SA2 = (emacETHADDR4 << 8) | emacETHADDR5;\r
-\r
-    /* Initialize Tx and Rx DMA Descriptors */\r
-    rx_descr_init ();\r
-    tx_descr_init ();\r
-\r
-    /* Receive Broadcast and Perfect Match Packets */\r
-    MAC_RXFILTERCTRL = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;\r
-\r
-    /* Create the semaphore used ot wake the uIP task. */\r
-    vSemaphoreCreateBinary( xEMACSemaphore );\r
-\r
     /* Reset all interrupts */\r
     MAC_INTCLEAR  = 0xFFFF;\r
 \r
index 7f98cadb93074a93cad5be17696e5d6357ddb306..a2b02d21fcdfbcdbc3f02f5e2927120e3bdbd20a 100644 (file)
 #include "core_cm3.h"\r
 /*-----------------------------------------------------------*/\r
 \r
-/* MAC address configuration. */\r
-#define uipMAC_ADDR0   0x00\r
-#define uipMAC_ADDR1   0x12\r
-#define uipMAC_ADDR2   0x13\r
-#define uipMAC_ADDR3   0x10\r
-#define uipMAC_ADDR4   0x15\r
-#define uipMAC_ADDR5   0x11\r
-\r
-/* IP address configuration. */\r
-#define uipIP_ADDR0            192\r
-#define uipIP_ADDR1            168\r
-#define uipIP_ADDR2            0\r
-#define uipIP_ADDR3            200     \r
-\r
 /* How long to wait before attempting to connect the MAC again. */\r
 #define uipINIT_WAIT    100\r
 \r
@@ -150,8 +136,10 @@ extern void ( vEMAC_ISR_Wrapper )( void );
        timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
        timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
        uip_init();\r
-       uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 );\r
+       uip_ipaddr( xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
        uip_sethostaddr( xIPAddr );\r
+       uip_ipaddr( xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( xIPAddr );      \r
        httpd_init();\r
 \r
        /* Initialise the MAC. */\r
@@ -277,12 +265,12 @@ static void prvSetMACAddress( void )
 struct uip_eth_addr xAddr;\r
 \r
        /* Configure the MAC address in the uIP stack. */\r
-       xAddr.addr[ 0 ] = uipMAC_ADDR0;\r
-       xAddr.addr[ 1 ] = uipMAC_ADDR1;\r
-       xAddr.addr[ 2 ] = uipMAC_ADDR2;\r
-       xAddr.addr[ 3 ] = uipMAC_ADDR3;\r
-       xAddr.addr[ 4 ] = uipMAC_ADDR4;\r
-       xAddr.addr[ 5 ] = uipMAC_ADDR5;\r
+       xAddr.addr[ 0 ] = configMAC_ADDR0;\r
+       xAddr.addr[ 1 ] = configMAC_ADDR1;\r
+       xAddr.addr[ 2 ] = configMAC_ADDR2;\r
+       xAddr.addr[ 3 ] = configMAC_ADDR3;\r
+       xAddr.addr[ 4 ] = configMAC_ADDR4;\r
+       xAddr.addr[ 5 ] = configMAC_ADDR5;\r
        uip_setethaddr( xAddr );\r
 }\r
 /*-----------------------------------------------------------*/\r