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