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

📄 dm642main.c

📁 TI DSP DM642的以太网测试程序
💻 C
字号:
/********************************************************************/
/*  Copyright 2004 by SEED Incorporated.							*/
/*  All rights reserved. Property of SEED Incorporated.				*/
/*  Restricted rights to use, duplicate or disclose this code are	*/
/*  granted through contract.									    */
/*  															    */
/********************************************************************/
/*
 *---------dm642main.c---------
 * This example uses a timer to read and write the ESAM.
 */



#include <csl_emifa.h>
#include <csl_chip.h>


#include "seeddm642.h"
#include "seeddm642_emac.h"

/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
	   0x00052078,/*gblctl EMIFA(B)global control register value */
	   			  /*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
	   0xffffffd3,/*cectl0 CE0 space control register value*/
	   			  /*将CE0空间设为SDRAM*/
	   0x73a28e01,/*cectl1 CE1 space control register value*/
	   			  /*Read hold: 1 clock;
	   			    MTYPE : 0000,选择8位的异步接口
	   			    Read strobe :001110;14个clock宽度
	   			    TA:2 clock; Read setup 2 clock;
	   			    Write hold :2 clock; Write strobe: 14 clock
	   			    Write setup :7 clock
	   			    --					 ---------------
	   			  	  \		 14c		/1c
	   			 	   \----------------/ */
	   0xac2ab02f, /*cectl2 CE2 space control register value*/
	   			   /*Read hold :
	   			   */
       0x22a28a42, /*cectl3 CE3 space control register value*/
	   0x57115000, /*sdctl SDRAM control register value*/
	   0x0000081b, /*sdtim SDRAM timing register value*/
	   0x001faf4d, /*sdext SDRAM extension register value*/
	   0x00000002, /*cesec0 CE0 space secondary control register value*/
	   0x00000002, /*cesec1 CE1 space secondary control register value*/
	   0x00000002, /*cesec2 CE2 space secondary control register value*/
	   0x00000073 /*cesec3 CE3 space secondary control register value*/	
};
CHIP_Config SEEDDM642percfg = {
	CHIP_VP2+\
	CHIP_VP1+\
	CHIP_VP0+\
	CHIP_I2C+\
	CHIP_MCASP0
};

extern far void vectors();
extern Uint8 MacAddr[6];
extern Uint32 Newdataflag;

Handle hApplication = (Handle)0x66;
Handle hMDIO;
Handle hEMAC;
Uint32 ltmp1;
uint phyAddr = 0;
Uint16 retVal1; 
EMAC_Pkt EmacPacket,*pEmacPacket;
Uint8 TxBuffer[1024];
uint Valret;

/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
	Uint32 i;
/*-------------------------------------------------------*/
/* perform all initializations                           */
/*-------------------------------------------------------*/
	/*Initialise CSL,初始化CSL库*/
	CSL_init();
	CHIP_config(&SEEDDM642percfg);
/*----------------------------------------------------------*/
	/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
	 注,DM642支持的是EMIFA,而非EMIF*/
	EMIFA_config(&Seeddm642ConfigA);
/*----------------------------------------------------------*/
	/*中断向量表的初始化*/
	//Point to the IRQ vector table
    IRQ_setVecs(vectors);
    IRQ_nmiEnable();
    IRQ_map(IRQ_EVT_MACINT,11);
    IRQ_reset(IRQ_EVT_MACINT);	
/*----------------------------------------------------------*/
	/*配置MAC*/
	hMDIO = MDIO_open(MDIO_MODEFLG_FD10 +MDIO_MODEFLG_LOOPBACK );  
	/*搜索并初始化存在的PHY*/
	// Try the next PHY if anything but a MDIOINIT condition
	ltmp1 = MDIO_RGET( ALIVE );
	for( i=0; i<32; i++ )
	{
		if( ltmp1 & (1<<phyAddr) )
		{
			if( MDIO_initPHY( hMDIO,phyAddr ) )
			{
				//read the phy ID
				MDIO_phyRegRead(phyAddr,2, &retVal1 );
				MDIO_phyRegRead(phyAddr,3, &retVal1 );
				MDIO_phyRegRead(phyAddr,0, &retVal1 );
				break; //find a phy device
			}
		}
		if( ++phyAddr == 32 )
		{
			phyAddr = 0;//no phy device
		}
	}
	MDIO_close(hMDIO);  
/*----------------------------------------------------------*/
	/*打开EMAC设备*/
	hEMAC = seeddm642_EmacOpen();
	/*设置接收方式*/
	EMAC_setReceiveFilter(hEMAC,EMAC_RXFILTER_DIRECT);
	//EMAC_setReceiveFilter(hEMAC,EMAC_RXFILTER_BROADCAST);
/*-----------------------------------------------------------*/	
	for(;;)
	{
	/*设置一个数据缓冲区*/
	
	for(i = 0;i<6;i++)//设置源地址
	{
		TxBuffer[i] = MacAddr[i];
	}
	for( i = 6;i<12;i++)//设置目的地址
	{
		TxBuffer[i] = MacAddr[i-6];
	}
	TxBuffer[12]=4;
	TxBuffer[13]=0;
	for(i = 14;i<1024;i++)
	{
		TxBuffer[i] = i;
	}
	/*初始化一个数据包并发送Packet*/
	
	EmacPacket.pNext = 0;
	EmacPacket.pPrev = 0;
	EmacPacket.pDataBuffer = TxBuffer;
	EmacPacket.BufferLen = 1024;
	EmacPacket.Flags = EMAC_PKT_FLAGS_SOP + EMAC_PKT_FLAGS_EOP;
	EmacPacket.ValidLen = 1024;
	EmacPacket.DataOffset = 0;
	EmacPacket.PktChannel = 0;
	EmacPacket.PktLength  = 1024;
	EmacPacket.PktFrags = 1;
	pEmacPacket = &EmacPacket;
	/*初始化一个数据包*/

		Valret = EMAC_sendPacket(hEMAC,pEmacPacket);	 
//	}
	if(Valret != 0)
	{
		for(;;){}//send error
	}
	for(;;)
	{
		if(Newdataflag == 1)
		{
//			for(;;){}//recieve the new packet data
			Newdataflag = 0;
			break;
		}
	}
	}	
}   

⌨️ 快捷键说明

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