mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-06 22:27:49 -04:00
Update the Red Suite LPC1768 project and source to use the latest version of the tools.
This commit is contained in:
parent
19cdcbd681
commit
1677ec5c60
8 changed files with 190 additions and 169 deletions
|
@ -83,6 +83,7 @@
|
|||
descriptor is then used to re-send in order to speed up the uIP Tx process. */
|
||||
#define emacTX_DESC_INDEX ( 0 )
|
||||
|
||||
#define PCONP_PCENET 0x40000000
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
|
@ -162,15 +163,15 @@ unsigned long ulID1, ulID2;
|
|||
if( ( (ulID1 << 16UL ) | ( ulID2 & 0xFFF0UL ) ) == DP83848C_ID )
|
||||
{
|
||||
/* Set the Ethernet MAC Address registers */
|
||||
EMAC->SA0 = ( configMAC_ADDR0 << 8 ) | configMAC_ADDR1;
|
||||
EMAC->SA1 = ( configMAC_ADDR2 << 8 ) | configMAC_ADDR3;
|
||||
EMAC->SA2 = ( configMAC_ADDR4 << 8 ) | configMAC_ADDR5;
|
||||
LPC_EMAC->SA0 = ( configMAC_ADDR0 << 8 ) | configMAC_ADDR1;
|
||||
LPC_EMAC->SA1 = ( configMAC_ADDR2 << 8 ) | configMAC_ADDR3;
|
||||
LPC_EMAC->SA2 = ( configMAC_ADDR4 << 8 ) | configMAC_ADDR5;
|
||||
|
||||
/* Initialize Tx and Rx DMA Descriptors */
|
||||
prvInitDescriptors();
|
||||
|
||||
/* Receive broadcast and perfect match packets */
|
||||
EMAC->RxFilterCtrl = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;
|
||||
LPC_EMAC->RxFilterCtrl = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;
|
||||
|
||||
/* Setup the PHY. */
|
||||
prvConfigurePHY();
|
||||
|
@ -192,11 +193,11 @@ unsigned long ulID1, ulID2;
|
|||
uip_buf = prvGetNextBuffer();
|
||||
|
||||
/* Reset all interrupts */
|
||||
EMAC->IntClear = ( INT_RX_OVERRUN | INT_RX_ERR | INT_RX_FIN | INT_RX_DONE | INT_TX_UNDERRUN | INT_TX_ERR | INT_TX_FIN | INT_TX_DONE | INT_SOFT_INT | INT_WAKEUP );
|
||||
LPC_EMAC->IntClear = ( INT_RX_OVERRUN | INT_RX_ERR | INT_RX_FIN | INT_RX_DONE | INT_TX_UNDERRUN | INT_TX_ERR | INT_TX_FIN | INT_TX_DONE | INT_SOFT_INT | INT_WAKEUP );
|
||||
|
||||
/* Enable receive and transmit mode of MAC Ethernet core */
|
||||
EMAC->Command |= ( CR_RX_EN | CR_TX_EN );
|
||||
EMAC->MAC1 |= MAC1_REC_EN;
|
||||
LPC_EMAC->Command |= ( CR_RX_EN | CR_TX_EN );
|
||||
LPC_EMAC->MAC1 |= MAC1_REC_EN;
|
||||
}
|
||||
|
||||
return lReturn;
|
||||
|
@ -260,12 +261,12 @@ long x, lNextBuffer = 0;
|
|||
}
|
||||
|
||||
/* Set EMAC Receive Descriptor Registers. */
|
||||
EMAC->RxDescriptor = RX_DESC_BASE;
|
||||
EMAC->RxStatus = RX_STAT_BASE;
|
||||
EMAC->RxDescriptorNumber = NUM_RX_FRAG - 1;
|
||||
LPC_EMAC->RxDescriptor = RX_DESC_BASE;
|
||||
LPC_EMAC->RxStatus = RX_STAT_BASE;
|
||||
LPC_EMAC->RxDescriptorNumber = NUM_RX_FRAG - 1;
|
||||
|
||||
/* Rx Descriptors Point to 0 */
|
||||
EMAC->RxConsumeIndex = 0;
|
||||
LPC_EMAC->RxConsumeIndex = 0;
|
||||
|
||||
/* A buffer is not allocated to the Tx descriptors until they are actually
|
||||
used. */
|
||||
|
@ -277,12 +278,12 @@ long x, lNextBuffer = 0;
|
|||
}
|
||||
|
||||
/* Set EMAC Transmit Descriptor Registers. */
|
||||
EMAC->TxDescriptor = TX_DESC_BASE;
|
||||
EMAC->TxStatus = TX_STAT_BASE;
|
||||
EMAC->TxDescriptorNumber = NUM_TX_FRAG - 1;
|
||||
LPC_EMAC->TxDescriptor = TX_DESC_BASE;
|
||||
LPC_EMAC->TxStatus = TX_STAT_BASE;
|
||||
LPC_EMAC->TxDescriptorNumber = NUM_TX_FRAG - 1;
|
||||
|
||||
/* Tx Descriptors Point to 0 */
|
||||
EMAC->TxProduceIndex = 0;
|
||||
LPC_EMAC->TxProduceIndex = 0;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
@ -292,34 +293,34 @@ unsigned short us;
|
|||
long x, lDummy;
|
||||
|
||||
/* Enable P1 Ethernet Pins. */
|
||||
PINCON->PINSEL2 = emacPINSEL2_VALUE;
|
||||
PINCON->PINSEL3 = ( PINCON->PINSEL3 & ~0x0000000F ) | 0x00000005;
|
||||
LPC_PINCON->PINSEL2 = emacPINSEL2_VALUE;
|
||||
LPC_PINCON->PINSEL3 = ( LPC_PINCON->PINSEL3 & ~0x0000000F ) | 0x00000005;
|
||||
|
||||
/* Power Up the EMAC controller. */
|
||||
SC->PCONP |= PCONP_PCENET;
|
||||
LPC_SC->PCONP |= PCONP_PCENET;
|
||||
vTaskDelay( emacSHORT_DELAY );
|
||||
|
||||
/* Reset all EMAC internal modules. */
|
||||
EMAC->MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES;
|
||||
EMAC->Command = CR_REG_RES | CR_TX_RES | CR_RX_RES | CR_PASS_RUNT_FRM;
|
||||
LPC_EMAC->MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX | MAC1_SIM_RES | MAC1_SOFT_RES;
|
||||
LPC_EMAC->Command = CR_REG_RES | CR_TX_RES | CR_RX_RES | CR_PASS_RUNT_FRM;
|
||||
|
||||
/* A short delay after reset. */
|
||||
vTaskDelay( emacSHORT_DELAY );
|
||||
|
||||
/* Initialize MAC control registers. */
|
||||
EMAC->MAC1 = MAC1_PASS_ALL;
|
||||
EMAC->MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
|
||||
EMAC->MAXF = ETH_MAX_FLEN;
|
||||
EMAC->CLRT = CLRT_DEF;
|
||||
EMAC->IPGR = IPGR_DEF;
|
||||
LPC_EMAC->MAC1 = MAC1_PASS_ALL;
|
||||
LPC_EMAC->MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
|
||||
LPC_EMAC->MAXF = ETH_MAX_FLEN;
|
||||
LPC_EMAC->CLRT = CLRT_DEF;
|
||||
LPC_EMAC->IPGR = IPGR_DEF;
|
||||
|
||||
/* Enable Reduced MII interface. */
|
||||
EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM;
|
||||
LPC_EMAC->Command = CR_RMII | CR_PASS_RUNT_FRM;
|
||||
|
||||
/* Reset Reduced MII Logic. */
|
||||
EMAC->SUPP = SUPP_RES_RMII;
|
||||
LPC_EMAC->SUPP = SUPP_RES_RMII;
|
||||
vTaskDelay( emacSHORT_DELAY );
|
||||
EMAC->SUPP = 0;
|
||||
LPC_EMAC->SUPP = 0;
|
||||
|
||||
/* Put the PHY in reset mode */
|
||||
prvWritePHY( PHY_REG_BMCR, MCFG_RES_MII );
|
||||
|
@ -389,26 +390,26 @@ unsigned short usLinkStatus;
|
|||
if( usLinkStatus & emacFULL_DUPLEX_ENABLED )
|
||||
{
|
||||
/* Full duplex is enabled. */
|
||||
EMAC->MAC2 |= MAC2_FULL_DUP;
|
||||
EMAC->Command |= CR_FULL_DUP;
|
||||
EMAC->IPGT = IPGT_FULL_DUP;
|
||||
LPC_EMAC->MAC2 |= MAC2_FULL_DUP;
|
||||
LPC_EMAC->Command |= CR_FULL_DUP;
|
||||
LPC_EMAC->IPGT = IPGT_FULL_DUP;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Half duplex mode. */
|
||||
EMAC->IPGT = IPGT_HALF_DUP;
|
||||
LPC_EMAC->IPGT = IPGT_HALF_DUP;
|
||||
}
|
||||
|
||||
/* Configure 100MBit/10MBit mode. */
|
||||
if( usLinkStatus & emac10BASE_T_MODE )
|
||||
{
|
||||
/* 10MBit mode. */
|
||||
EMAC->SUPP = 0;
|
||||
LPC_EMAC->SUPP = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 100MBit mode. */
|
||||
EMAC->SUPP = SUPP_SPEED;
|
||||
LPC_EMAC->SUPP = SUPP_SPEED;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,21 +438,21 @@ unsigned long ulGetEMACRxData( void )
|
|||
unsigned long ulLen = 0;
|
||||
long lIndex;
|
||||
|
||||
if( EMAC->RxProduceIndex != EMAC->RxConsumeIndex )
|
||||
if( LPC_EMAC->RxProduceIndex != LPC_EMAC->RxConsumeIndex )
|
||||
{
|
||||
/* Mark the current buffer as free as uip_buf is going to be set to
|
||||
the buffer that contains the received data. */
|
||||
prvReturnBuffer( uip_buf );
|
||||
|
||||
ulLen = ( RX_STAT_INFO( EMAC->RxConsumeIndex ) & RINFO_SIZE ) - 3;
|
||||
uip_buf = ( unsigned char * ) RX_DESC_PACKET( EMAC->RxConsumeIndex );
|
||||
ulLen = ( RX_STAT_INFO( LPC_EMAC->RxConsumeIndex ) & RINFO_SIZE ) - 3;
|
||||
uip_buf = ( unsigned char * ) RX_DESC_PACKET( LPC_EMAC->RxConsumeIndex );
|
||||
|
||||
/* Allocate a new buffer to the descriptor. */
|
||||
RX_DESC_PACKET( EMAC->RxConsumeIndex ) = ( unsigned long ) prvGetNextBuffer();
|
||||
RX_DESC_PACKET( LPC_EMAC->RxConsumeIndex ) = ( unsigned long ) prvGetNextBuffer();
|
||||
|
||||
/* Move the consume index onto the next position, ensuring it wraps to
|
||||
the beginning at the appropriate place. */
|
||||
lIndex = EMAC->RxConsumeIndex;
|
||||
lIndex = LPC_EMAC->RxConsumeIndex;
|
||||
|
||||
lIndex++;
|
||||
if( lIndex >= NUM_RX_FRAG )
|
||||
|
@ -459,7 +460,7 @@ long lIndex;
|
|||
lIndex = 0;
|
||||
}
|
||||
|
||||
EMAC->RxConsumeIndex = lIndex;
|
||||
LPC_EMAC->RxConsumeIndex = lIndex;
|
||||
}
|
||||
|
||||
return ulLen;
|
||||
|
@ -494,7 +495,7 @@ unsigned long ulAttempts = 0UL;
|
|||
usSendLen = usTxDataLen;
|
||||
TX_DESC_PACKET( emacTX_DESC_INDEX ) = ( unsigned long ) uip_buf;
|
||||
TX_DESC_CTRL( emacTX_DESC_INDEX ) = ( usTxDataLen | TCTRL_LAST | TCTRL_INT );
|
||||
EMAC->TxProduceIndex = ( emacTX_DESC_INDEX + 1 );
|
||||
LPC_EMAC->TxProduceIndex = ( emacTX_DESC_INDEX + 1 );
|
||||
|
||||
/* uip_buf is being sent by the Tx descriptor. Allocate a new buffer. */
|
||||
uip_buf = prvGetNextBuffer();
|
||||
|
@ -506,13 +507,13 @@ static long prvWritePHY( long lPhyReg, long lValue )
|
|||
const long lMaxTime = 10;
|
||||
long x;
|
||||
|
||||
EMAC->MADR = DP83848C_DEF_ADR | lPhyReg;
|
||||
EMAC->MWTD = lValue;
|
||||
LPC_EMAC->MADR = DP83848C_DEF_ADR | lPhyReg;
|
||||
LPC_EMAC->MWTD = lValue;
|
||||
|
||||
x = 0;
|
||||
for( x = 0; x < lMaxTime; x++ )
|
||||
{
|
||||
if( ( EMAC->MIND & MIND_BUSY ) == 0 )
|
||||
if( ( LPC_EMAC->MIND & MIND_BUSY ) == 0 )
|
||||
{
|
||||
/* Operation has finished. */
|
||||
break;
|
||||
|
@ -537,13 +538,13 @@ static unsigned short prvReadPHY( unsigned char ucPhyReg, long *plStatus )
|
|||
long x;
|
||||
const long lMaxTime = 10;
|
||||
|
||||
EMAC->MADR = DP83848C_DEF_ADR | ucPhyReg;
|
||||
EMAC->MCMD = MCMD_READ;
|
||||
LPC_EMAC->MADR = DP83848C_DEF_ADR | ucPhyReg;
|
||||
LPC_EMAC->MCMD = MCMD_READ;
|
||||
|
||||
for( x = 0; x < lMaxTime; x++ )
|
||||
{
|
||||
/* Operation has finished. */
|
||||
if( ( EMAC->MIND & MIND_BUSY ) == 0 )
|
||||
if( ( LPC_EMAC->MIND & MIND_BUSY ) == 0 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -551,14 +552,14 @@ const long lMaxTime = 10;
|
|||
vTaskDelay( emacSHORT_DELAY );
|
||||
}
|
||||
|
||||
EMAC->MCMD = 0;
|
||||
LPC_EMAC->MCMD = 0;
|
||||
|
||||
if( x >= lMaxTime )
|
||||
{
|
||||
*plStatus = pdFAIL;
|
||||
}
|
||||
|
||||
return( EMAC->MRDD );
|
||||
return( LPC_EMAC->MRDD );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
@ -567,10 +568,10 @@ void vEMAC_ISR( void )
|
|||
unsigned long ulStatus;
|
||||
long lHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
ulStatus = EMAC->IntStatus;
|
||||
ulStatus = LPC_EMAC->IntStatus;
|
||||
|
||||
/* Clear the interrupt. */
|
||||
EMAC->IntClear = ulStatus;
|
||||
LPC_EMAC->IntClear = ulStatus;
|
||||
|
||||
if( ulStatus & INT_RX_DONE )
|
||||
{
|
||||
|
@ -586,7 +587,7 @@ long lHigherPriorityTaskWoken = pdFALSE;
|
|||
only two descriptors the index is set back to 0. */
|
||||
TX_DESC_PACKET( ( emacTX_DESC_INDEX + 1 ) ) = TX_DESC_PACKET( emacTX_DESC_INDEX );
|
||||
TX_DESC_CTRL( ( emacTX_DESC_INDEX + 1 ) ) = ( usSendLen | TCTRL_LAST | TCTRL_INT );
|
||||
EMAC->TxProduceIndex = ( emacTX_DESC_INDEX );
|
||||
LPC_EMAC->TxProduceIndex = ( emacTX_DESC_INDEX );
|
||||
|
||||
/* This is the second Tx so set usSendLen to 0 to indicate that the
|
||||
Tx descriptors will be free again. */
|
||||
|
|
|
@ -144,7 +144,7 @@ extern void ( vEMAC_ISR_Wrapper )( void );
|
|||
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
EMAC->IntEnable = ( INT_RX_DONE | INT_TX_DONE );
|
||||
LPC_EMAC->IntEnable = ( INT_RX_DONE | INT_TX_DONE );
|
||||
|
||||
/* Set the interrupt priority to the max permissible to cause some
|
||||
interrupt nesting. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue