⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 DM642上的TCP/IP代码 LWIP 是TCP/ IP 在嵌入式系统中应用很多的代码
💻 BAK
字号:
#include "initial.h"


//---------Raw Data Buffers----------
//
// This program uses internal memory, so buffer size is 
// just 1518 In order to make sure buffers are cache 
// aligned, if each were in cacheable external memory 
// the size should be at least 1536 so as to fill enitre 
// cache line.

#define PKT_MAX 32

#pragma DATA_SECTION(packet_header, ".ExtDat1");
EMAC_Pkt packet_header[PKT_MAX];

#pragma DATA_SECTION(packet_buffer, ".ExtDat1");
Uint8 packet_buffer[PKT_MAX][1536];

#pragma DATA_SECTION(packet_sourcedata, ".ExtDat1");
Uint8 packet_sourcedata[1536];

extern EMAC_Config g_emacConfig;


// Declare packet queues
PKTQ     FreeQueue;             // Free packets for RX or TX 
PKTQ     RxQueue;               // Received packets 


// Declare some local status variables
Handle    hEMAC = 0;       		// Handle to our EMAC instance
volatile uint   LinkStatus = 0; // Current link status 
volatile uint   LocalTicks = 0; // Current time in 100ms ticks

void main()
{
	Uint32      i,j,size;
    Uint32      TxCount=0, RxCount=0;
    Uint32		aliveValue = 0;
    Uint32		linkValue = 0;
    Uint16		*pData = (void *)0;
    EMAC_Pkt    *pPkt;
	
	// Basic Test Initialization    
    CSL_init();

    puts("EMAC Test\n");
	
	Initial();
	
	 // Init packet data array
    for( i=0; i<100; i++ )
   	{
        packet_sourcedata[i] = i;
    }
    
    // Initialize our buffer pool
    memset( &FreeQueue, 0, sizeof(PKTQ) );
    memset( &RxQueue, 0, sizeof(PKTQ) );
    for( i=0; i<PKT_MAX; i++ )
    {
        // Init the buffer headers. Note that the 
        // buffer pointer and buffer length are fixed
        memset( &packet_header[i], 0, sizeof(EMAC_Pkt) );
        packet_header[i].pDataBuffer = packet_buffer[i];
        packet_header[i].BufferLen   = 1518;
        pqPush( &FreeQueue, &packet_header[i] );
    }

    // Open EMAC instance 
    i = EMAC_open( 1, (Handle)0x12345678, &g_emacConfig, &hEMAC );
    if(i)
   	{
       	puts("Returned error %08x\n",i);
       	return;
    }
    // Send a packet            
    // First get a packet buffer from our private queue
    for( j=0; j<PKT_MAX; j++ )
    {
    	pPkt = pqPop( &FreeQueue );
    	if( pPkt )
    	{
        	// Fill buffer with a pattern
        	size = 100;
        	memcpy( pPkt->pDataBuffer, packet_sourcedata, size);

        	// Send the packet 
        	pPkt->Flags      = EMAC_PKT_FLAGS_SOP | EMAC_PKT_FLAGS_EOP ;
        	pPkt->ValidLen   = size;
        	pPkt->DataOffset = 0;
        	pPkt->PktChannel = 0;
        	pPkt->PktLength  = size;
        	pPkt->PktFrags   = 1;

        	// Must mask DSP mapped EMAC ISR when calling EMAC functions
			IRQ_disable( IRQ_EVT_MACINT );
        	i = EMAC_sendPacket( hEMAC, pPkt );
			IRQ_enable( IRQ_EVT_MACINT );

        	if(i)
        	{
           		puts("EMAC_sendPacket() returned error %08x\n",i);
            	return;
        	}
     	}
    }
    
    //puts("Calling EMAC_close()\n");
    i = EMAC_close( hEMAC );
   
   	hEMAC = 0;
   	if(i)
   	{
  		puts("Returned error %08x\n",i);
		return;
   	}
        
	return;
}

/*
 *----------TimerTick-----------
 *
 * Timer tick service routine - called from 100mS PRD
 */
void TimerTick(void)
{
    Uint32 intmask;

    /* Keep track of time for local timeout loops */
    LocalTicks++;

    /* Poll the EMAC */
    if( hEMAC )
    {
        //OUREMAC_enter();
        EMAC_timerTick( hEMAC );
        //OUREMAC_exit();
    }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -