コード例 #1
0
ファイル: emac.c プロジェクト: peterliu2/FreeRTOS
static unsigned char *prvGetNextBuffer( void )
{
    long x;
    unsigned char *pucReturn = NULL;
    unsigned long ulAttempts = 0;

    while( pucReturn == NULL ) {
        /* Look through the buffers to find one that is not in use by
        anything else. */
        for( x = 0; x < ETH_NUM_BUFFERS; x++ ) {
            if( ucBufferInUse[ x ] == pdFALSE ) {
                ucBufferInUse[ x ] = pdTRUE;
                pucReturn = ( unsigned char * ) ETH_BUF( x );
                break;
            }
        }

        /* Was a buffer found? */
        if( pucReturn == NULL ) {
            ulAttempts++;

            if( ulAttempts >= emacBUFFER_WAIT_ATTEMPTS ) {
                break;
            }

            /* Wait then look again. */
            vTaskDelay( emacBUFFER_WAIT_DELAY );
        }
    }

    return pucReturn;
}
コード例 #2
0
ファイル: emac.c プロジェクト: peterliu2/FreeRTOS
static void prvReturnBuffer( unsigned char *pucBuffer )
{
    unsigned long ul;

    /* Return a buffer to the pool of free buffers. */
    for( ul = 0; ul < ETH_NUM_BUFFERS; ul++ ) {
        if( ETH_BUF( ul ) == ( unsigned long ) pucBuffer ) {
            ucBufferInUse[ ul ] = pdFALSE;
            break;
        }
    }
}
コード例 #3
0
ファイル: EthDev_LPC4088.c プロジェクト: nyatla/mbedJS-dev
static void prevRxDescriptor(void)
{
	int x;
	//デスクリプタの設定
	for( x = 0; x < NUM_RX_FRAG; x++ )
	{
		/* Allocate the next Ethernet buffer to this descriptor. */
		RX_DESC_PACKET(x) = ETH_BUF(x);
		RX_DESC_CTRL(x) = RCTRL_INT | ( ETH_FRAG_SIZE - 1 );
		RX_STAT_INFO(x) = 0;
		RX_STAT_HASHCRC(x) = 0;
	}

	/* Set LPC_EMAC Receive Descriptor Registers. */
	LPC_EMAC->RxDescriptor = RX_DESC_BASE;
	LPC_EMAC->RxStatus = RX_STAT_BASE;
	LPC_EMAC->RxDescriptorNumber = NUM_RX_FRAG - 1;

}
コード例 #4
0
ファイル: emac.c プロジェクト: wugsh/wgs
static void prvInitDescriptors( void )
{
long x, lNextBuffer = 0;

	for( x = 0; x < NUM_RX_FRAG; x++ )
	{
		/* Allocate the next Ethernet buffer to this descriptor. */
		RX_DESC_PACKET( x ) = ETH_BUF( lNextBuffer );
		RX_DESC_CTRL( x ) = RCTRL_INT | ( ETH_FRAG_SIZE - 1 );
		RX_STAT_INFO( x ) = 0;
		RX_STAT_HASHCRC( x ) = 0;

		/* The Ethernet buffer is now in use. */
		ucBufferInUse[ lNextBuffer ] = pdTRUE;
		lNextBuffer++;
	}

	/* Set EMAC Receive Descriptor Registers. */
	EMAC->RxDescriptor = RX_DESC_BASE;
	EMAC->RxStatus = RX_STAT_BASE;
	EMAC->RxDescriptorNumber = NUM_RX_FRAG - 1;

	/* Rx Descriptors Point to 0 */
	EMAC->RxConsumeIndex = 0;

	/* A buffer is not allocated to the Tx descriptors until they are actually
	used. */
	for( x = 0; x < NUM_TX_FRAG; x++ )
	{
		TX_DESC_PACKET( x ) = ( unsigned long ) NULL;
		TX_DESC_CTRL( x ) = 0;
		TX_STAT_INFO( x ) = 0;
	}

	/* Set EMAC Transmit Descriptor Registers. */
	EMAC->TxDescriptor = TX_DESC_BASE;
	EMAC->TxStatus = TX_STAT_BASE;
	EMAC->TxDescriptorNumber = NUM_TX_FRAG - 1;

	/* Tx Descriptors Point to 0 */
	EMAC->TxProduceIndex = 0;
}