www.pudn.com > ARM_RTL8019.rar > mac.c


#define HARDWARE_GLOBALS 
#include "config.h" 
#include "cfg_net.h" 
 
uint8  N0_DATA[]=  "No data received\n"; 
uint8  FALL_DATA[]="Fall data received\n"; 
uint8  NEX_PROL[]="Right data received,next protol is\n"; 
//unit8  PRO_ARP[]=" Arp request data received "; 
 
#define   NET_RST   		0X00000040//0x20000000 
#define   NET_BASE_ADDR   	0X83400000//0x20000000 
 
extern My_Ip_1ID[4]; 
 
EX_RAM uint16 iic=0; 
static  uint8  SrcMacID[6] = MY_Mac_1ID; 
 
 
union  REC_BUFF_UNION	REC_BUFF[MAX_REC_BUFF]; 
/**************************************************************************** 
* Ãû³Æ£ºWriteToNet() 
* ¹¦ÄÜ£º°ÑÊý¾ÝдÈëRTL8019AS 
* Èë¿Ú²ÎÊý£º	ADDR		дÈëµØÖ· 
WRITEDATA   дÈëÊý¾Ý 
* ³ö¿Ú²ÎÊý£ºÎÞ 
****************************************************************************/ 
 
void  WriteToNet(uint8 ADDR_16,uint16 WRITEDATA) 
{ 
	 
	(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16))=WRITEDATA;//0x83400000	  
	 
} 
 
 
/**************************************************************************** 
* Ãû³Æ£ºReadFromNet() 
* ¹¦ÄÜ£º´ÓRTL8019AS°ÑÊý¾Ý¶Á³ö 
* Èë¿Ú²ÎÊý£º	ADDR		¶Á³öµØÖ· 
* ³ö¿Ú²ÎÊý£º	READDATA   	¶Á³öÊý¾Ý 
****************************************************************************/ 
uint16  ReadFromNet(uint8 ADDR_16) 
{ 
	uint16 temp; 
	temp=(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16));//0x83400000 
	return (temp); 
} 
/********************************************************************** 
**º¯ÊýÔ­ÐÍ£º    void  page(uchar pagenumber) 
**Èë¿Ú²ÎÊý:º	uchar	pagenumber: ÒªÇл»µÄÒ³ 
**³ö¿Ú²ÎÊý:		ÎÞ 
**·µ »Ø Öµ£º	ÎÞ       
**˵    Ã÷£º	Ñ¡ÔñÒ³,¿ÉÑ¡Ôñ0,1,2ÈýÒ³,µÚËÄÒ³ne000¼æÈÝоƬ±£Áô  
************************************************************************/ 
void page(uint8 pagenumber)   
{ 
	uint8 temp; 
	temp=ReadFromNet(0);//command register 
	temp=temp&0x3B ;//×¢Òâtxpλ²»ÄÜÒª 
	pagenumber=pagenumber <<6; 
	temp=temp | pagenumber; 
	WriteToNet(0,temp); 
} 
 
/********************************************************************** 
**º¯ÊýÔ­ÐÍ£º    void 	SetMacID() 
**Èë¿Ú²ÎÊý:		 
**·µ »Ø Öµ£º	ÎÞ             
**˵    Ã÷£º	ÉèÖÃоƬÎïÀíµØÖ· 
************************************************************************/ 
void SetMacID(uint8 * mac_ptr)    
{ 
	//°ÑMACµØÖ·Ð´ÈëMY¡ª¡ªMAC¡ª¡ªIDÖÐ 
	page(1); 
	WriteToNet(1 , mac_ptr[0]); 
	//mac_ptr++; 
	WriteToNet(2 , mac_ptr[1]); 
	//mac_ptr++; 
	WriteToNet(3 , mac_ptr[2]); 
	//mac_ptr++; 
	WriteToNet(4 , mac_ptr[3]); 
	//mac_ptr++; 
	WriteToNet(5 , mac_ptr[4]); 
	//mac_ptr++; 
	WriteToNet(6 , mac_ptr[5]); 
	page(0); 
} 
/********************************************************************** 
**º¯ÊýÔ­ÐÍ£º    void 		Send_Packet(struct _pkst *TxdData) 
**Èë¿Ú²ÎÊý:		struct _pkst *TxdData	:Ö¸ÏòÒª·¢ËÍÊý¾ÝµÄ½á¹¹Ö¸Õë 
**³ö¿Ú²ÎÊý:		ÎÞ 
**·µ »Ø Öµ£º	ÎÞ               
**˵    Ã÷£º	·¢ËÍÊý¾Ý°ü,ÒÔÌ«Íøµ×²ãÇý¶¯³ÌÐò,ËùÓеÄÊý¾Ý·¢ËͶ¼ÒªÍ¨¹ý¸Ã³ÌÐò 
************************************************************************/ 
void Send_Packet(struct _pkst *TxdData)//   
{ 
	static uint8 Tx_Buff_Sel=0; 
	struct _pkst *ExPtr;// 
	//uint16 i; 
	uint8 *TEPTR; 
	union send_temp{ 
		uint16 words; 
		uint8	bytes[2]; 
				}send_buff; 
	uint16 ii,length=0; 
	 
	//i=0;//¼Ç¼·¢ËÍÊÇ·ñСÓÚ60¸ö×Ö½Ú 
	page(0);//Çл»ÖÁµÚ0Ò³ 
	length=length+TxdData->length; 
	ExPtr=TxdData->STPTR; 
	while(ExPtr!=NULL)//¼ÆËã³öÒª·¢Ë͵ÄÊý¾ÝµÄ×ܳ¤¶È 
	{	 
		length=length+ExPtr->length; 
		ExPtr=ExPtr->STPTR; 
	} 
	ii=length; 
	Tx_Buff_Sel=Tx_Buff_Sel^1;//·¢ËÍ»º³åÇøµÄÇл» 
	if(Tx_Buff_Sel) 
	{ 
		WriteToNet(0x09,0x40);			//ÉèÖ÷¢ËÍÒ³µØÖ· 
	}			 
	else 
	{ 
		WriteToNet(0x09,0x46);			//ÉèÖ÷¢ËÍÒ³µØÖ· 
    	} 
	 
	WriteToNet(0x08,0x00); 			//дÈëRSAR0 DMAÆðʼµØÖ·µÍλread page address low 
	WriteToNet(0x0b,ii>>8);			//дÈëRSCR1 DMA ¼ÆÊýÆ÷¸ßλread count high 
	WriteToNet(0x0a,ii&0x00ff);		//дÈëRSCR0 DMA ¼ÆÊýÆ÷µÍλread count low; 
	WriteToNet(0,0x12);				//Æô¶¯DMAдwrite dma, page0 
	TEPTR=TxdData->DAPTR; 
	for(ii=0;ii<(((TxdData->length)+1)/2);ii++) 
	{ 
		send_buff.bytes[0]=*TEPTR; 
		TEPTR++; 
		send_buff.bytes[1]=*TEPTR; 
		TEPTR++; 
		WriteToNet(0x10,send_buff.words); 
	} 
	ExPtr=TxdData->STPTR; 
	while(ExPtr!=NULL) 
	{ 
		TEPTR=ExPtr->DAPTR; 
		for(ii=0;ii<((ExPtr->length+1)/2);ii++) 
		{ 
			send_buff.bytes[0]=*TEPTR; 
			TEPTR++; 
			send_buff.bytes[1]=*TEPTR; 
			TEPTR++; 
			WriteToNet(0x10,send_buff.words);	 
		} 
		ExPtr=ExPtr->STPTR; 
	} 
	//Èç¹ûÉÙÓÚ60 
	 
	/***************************************/ 
	//ÒÔÏÂΪÖÕÖ¹DMA²Ù×÷ 
	WriteToNet(0x0b,0x00);  
	WriteToNet(0x0a,0x00); 
	WriteToNet(0x00,0x22);			//½áÊø»ò·ÅÆúDMA²Ù×÷ 
	 
	WriteToNet(0x07,0xff); 
	if(Tx_Buff_Sel) 
	{ 
		WriteToNet(0x04,0x40);   //txd packet start; 
	} 
	else 
	{ 
		WriteToNet(0x04,0x46);  //txd packet start; 
    	} 
	ii=length; 
	if(length<60) 
	{		//Èç¹ûÊý¾Ý³¤¶È<60×Ö½Ú,ÉèÖó¤¶ÈΪ60×Ö½Ú 
		ii=60; 
	} 
	 
	WriteToNet(0x06,ii>>8);	//high byte counter 
	WriteToNet(0x05,ii&0x00ff);//low byte counter 
	WriteToNet(0x07,0xff); 
	WriteToNet(0x00,0x1e);       //Æô¶¯Íø¿¨ÖØÐ·¢ËÍÊý¾Ý°ü; 
	/***************************************/ 
	//ÖØ·¢Êý¾ÝµÄ´¦Àí 
	 
	for(length=0;length<6;length++)	//×î¶àÖØ·¢6´Î 
	{ 
		for(ii=0;ii<1000;ii++) 
		{//¼ì²éCR¼Ä´æÆ÷µÄtxpλÊÇ·ñΪµÍ,Ϊ1˵Ã÷ÕýÔÚ·¢ËÍ,Ϊ0˵Ã÷·¢Íê»ò³ö´í·ÅÆú 
			if((ReadFromNet(0x00)&0x04)==0)   break;  
        	} 
		if(ReadFromNet(0x04)&0x01)//¶Á·¢ËÍ״̬¼Ä´æÆ÷TSR£¬ÅжÏÊÇ·ñÎÞ´í·¢ËÍ 
		                       break;  //ÎÞ´í·¢ËÍÔòÍ˳ö·ñÔòÖØ·¢                                 
		WriteToNet(0x00,0x1e);       //Æô¶¯Íø¿¨ÖØÐ·¢ËÍÊý¾Ý°ü 
	} 
	 
	/**************************************/ 
} 
 
/********************************************************************** 
**º¯ÊýÔ­ÐÍ£º    unsigned char * Rec_Packet() 
**Èë¿Ú²ÎÊý:º	ÎÞ 
**³ö¿Ú²ÎÊý:		·µ»ØÊý¾ÝÖ¸Õë			unsigned char *  
**·µ »Ø Öµ£º	0	ûÓÐÐÂÊý¾Ý°ü»ò³ö´í 
2     4    ipÊý¾Ý°ü        
**              unsigned char *         ½ÓÊÕµ½ÐÂÊý¾Ý°ü 
**˵    Ã÷£º	²éѯÊÇ·ñÓÐÐÂÊý¾Ý°ü²¢½ÓÊÕ½ø»º³åÇø 
½ÓÊÕÊý¾Ý°üÓÐЧÔò×öÊý¾Ý´¦Àí 
************************************************************************/ 
uint8 Rec_Packet()  
{ 
	static uint8 REC_BUFF_NUM=0; 
	static uint8 bnry,curr;  // 
	static uint16 tmp[2]; 
	//static uint16 crt=0; 
	uint16 * REC_BUFF_PTR_WORDS; 
	uint8 * REC_BUFF_PTR_BYTES; 
	uint8 i,temp; 
	uint16 ii,length; 
	 
	page(0); 
	temp=ReadFromNet(0x07); 
	if((temp&&0x01)==0)   return 0; 
	page(1); 
	curr=ReadFromNet(0x07);		//curr writepoint 8019дҳָÕë 
      page(0); 
	bnry=ReadFromNet(0x03);		//bnry page have read ¶ÁÒ³Ö¸Õë 
	bnry++;//bnry=bnry++; 
	if(bnry>0x7f) 
	{ 
		bnry=0x4c; 
		//crt++;//ͳ¼ÆÄÚ²¿16KÑ­»·Á˶àÉٴΣ¨·ÂÕæÆ÷29´Îºó³ö´í£©52¡¢ 
	} 
	WriteToNet(0x00,0x22);//Í£Ö¹DMA¶Áд²Ù×÷ 
	 
	if(bnry==curr)	 
		{ 
	    //    UartSendStr(N0_DATA); 
		        return 0;    //»º³åÇøÎÞÊý¾Ý·µ»Ø0 
		} 
	else//´Ëʱ±íʾÓÐеÄÊý¾Ý°üÔÚ»º³åÇøÀï 
   	{			//ÔÚÈκβÙ×÷¶¼×îºÃ·µ»Øpage0 
		if(REC_BUFF_NUM==MAX_REC_BUFF)//½ÓÊÕ»º³åÇøºÅÇåÁã 
		{ 
			REC_BUFF_NUM=0; 
		} 
		REC_BUFF_PTR_WORDS=REC_BUFF[REC_BUFF_NUM].words;//É趨½ÓÊÕ»º³åÇøµÄÆðʼµØÖ· 
		//======================================= 
		 
		WriteToNet(0x09,bnry);	//RSAR1дÈëÒ³µØÖ·µÄ¸ß×Ö½Ú 
		WriteToNet(0x08,0x00); //RSAR0дÈëÒ³µØÖ·µÄµÍ×Ö½Ú 
		WriteToNet(0x0b,0x00);	//RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú 
		WriteToNet(0x0a,0x04);   //RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú 
		WriteToNet(0x00,0x0a); //Æô¶¯Remote DMA¶Á²Ù×÷ 
		//¶Áȡһ°üµÄǰ4¸ö×Ö½Ú:4×Ö½ÚµÄ8019Í·²¿ 
		//temp[0]µ±Ç°Ð´µØÖ·(16bit);temp[1]°ü³¤(×Ö½Ú³¤) 
		for(i=0;i<2;i++) 
		{ 
			*REC_BUFF_PTR_WORDS=ReadFromNet(0x10); 
			tmp[i]=*REC_BUFF_PTR_WORDS; 
			REC_BUFF_PTR_WORDS++; 
		} 
		//0:½ÓÊÕ״̬£»1:ÏÂÒ»°üµÄÖ¸Õ룻2:±¾°üµÍλ£»3:±¾°ü¸ßλ£» 
		//=======================================ÖÐÖ¹DMA²Ù×÷ 
		WriteToNet(0x0b,0x00);	//RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú 
		WriteToNet(0x0a,0x00);	//RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú 
		WriteToNet(0x00,0x22);	//½áÊø»ò·ÅÆúDMA²Ù×÷ 
		//======================================= 
		tmp[1]=tmp[1]-4;//È¥µô4¸ö×Ö½ÚµÄCRC 
		REC_BUFF[REC_BUFF_NUM].words[1]=tmp[1];	//°ÑÕæÕýµÄ½ÓÊÕµÄÖ¡µÄ³¤¶È±£´æµ½»º³åÇø 
		//=====================ÒÔÉϸ÷²½²Ù×÷±íʾ¶ÁÈëµÄÊý¾Ý°üÓÐЧ 
			if(((tmp[0]&0x0001)==0)||((tmp[0]&0xff00)>0x7f00) 
			||((tmp[0]&0xff00)<0x4c00)||(tmp[1]>0x0600)) 
		{//½ÓÊÕ״̬´íÎó»òÏÂÒ»Êý¾Ý°üµÄÆðʼҳµØÖ·´íÎó»ò½ÓÊÕµÄÊý¾Ý°ü³¤¶È>1536×Ö½Ú 
			page(1); 
			curr=ReadFromNet(0x07); 	//page1¶ÁÈ¡CURRµÄÖµ 
			page(0);		//Çл»»Øpage0 
			bnry = curr -1;	//°Ñbnry»Ö¸´ÎªÏÂ16KÖеĿÕÓಿ·Ö 
			if(bnry < 0x4c)  
			{ 
				bnry =0x7f; 
			} 
			WriteToNet(0x03,bnry); 	//°ÑBNRY»Ö¸´µ½Ö¸ÏòÏÂÒ»Ö¡write to bnry		 
			WriteToNet(0x07,0xff);		//Çå³ýÖжϱêÖ¾ 
			//UartSendStr(FALL_DATA); 
			return 0; 
		}//end of if(((tmp[0]&0x0001) 
		//============================================= 
		else//±íʾÊý¾Ý°üÊÇÍêºÃµÄ.¶ÁȡʣϵÄÊý¾Ý 
		{ 
			WriteToNet(0x09,bnry);   	//RSAR1дÈë¶ÁÒ³µØÖ·µÄ¸ß×Ö½Ú 
			WriteToNet(0x08,4);      	//RSAR0дÈë¶ÁÒ³µØÖ·µÄµÍ×Ö½Ú 
			WriteToNet(0x0a,tmp[1]);  	//RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊýµÍ×Ö½Ú//read count high 
			WriteToNet(0x0b,tmp[1]>>8);	//RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count low; 
			 
			WriteToNet(0x00,0x0a); 	//Æô¶¯Remote DMA¶Á²Ù×÷ 
			//read dma 
			length=tmp[1];//¼ÆËã³öÒª¶ÁÈ¡µÄÖ¡µÄ³¤¶È 
			 
			for(ii=0;ii<((length+1)/2);ii++) 
			{ 
				*REC_BUFF_PTR_WORDS=ReadFromNet(0x10); 
				REC_BUFF_PTR_WORDS++; 
			} 
			//================ÖÕÖ¹DMA²Ù×÷ 
			WriteToNet(0x0b,0x00);			//RSCR1дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count high    
			WriteToNet(0x0a,0x00);			//RSCR0дÈë¶ÁÈ¡×Ö½Ú¼ÆÊý¸ß×Ö½Ú//read count low; 
			WriteToNet(0x00,0x22);			//½áÊø»ò·ÅÆúDMA²Ù×÷//½áÊø»ò·ÅÆúDMA 
			//============================ 
		}//end of else 
		//========================================= 
		bnry=(tmp[0]/256)-1;	//tmp[0]Êǵ±Ç°ÓÐЧµÄCURR 
		if(bnry<0x4c) 
			bnry=0x7f; 
		WriteToNet(0x03,bnry);   	//дÈëÓÐЧµÄBNRY   //write to bnry 
		WriteToNet(0x07,0xff);		//Çå³ýÖжϱêÖ¾	 
		REC_BUFF_PTR_BYTES=REC_BUFF[REC_BUFF_NUM].bytes; 
		REC_BUFF_PTR_BYTES=REC_BUFF_PTR_BYTES+4;//°ÑÖ¸Õë»Ö¸´µ½Êý¾Ý°üµÄÆðʼ 
#ifdef Little_End 
		if((((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0008)//¿ÉÒÔ¼õÉÙ¶ÔÊý¾Ý»º³åÈ¡µÄÀûÓà 
			||(((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0608))//²»¹ýÈç¹û»º³åÇø×ã¹»´ó¾Í×îºÃ²»Òª 
#endif 
#ifdef Big_End 
		if((((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0800)//¿ÉÒÔ¼õÉÙ¶ÔÊý¾Ý»º³åÈ¡µÄÀûÓà 
			||(((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal==0x0806))//²»¹ýÈç¹û»º³åÇø×ã¹»´ó¾Í×îºÃ²»Òª 
#endif 
		{ 
			REC_BUFF_NUM++;       //ͳ¼Æ½ÓÊÜÓÐЧ°üµÄÊýÄ¿ 
			//UartSendStr(NEX_PROL); 
			//UartSendStr((ipethernet*)REC_BUFF_PTR_BYTES)->NextProtocal); 
			Rec_Ethernet_Packed(REC_BUFF_PTR_BYTES,0); 
			return  1;//¿ÉÒÔÖ±½ÓÍ˳ö¡£ 
		} 
		return 0; 
	}//end of if(bnry!=curr) 
   
} 
 
/********************************************************************** 
**º¯ÊýÔ­ÐÍ:     void 	InitNic() 
**Èë¿Ú²ÎÊý:num ÍøÂç¶Ë¿ÚºÅ  
         
**˵    Ã÷:º	¶ÔоƬµÄ¹¤×÷¼Ä´æÆ÷½øÐÐÉèÖà 
************************************************************************/ 
void InitNic(uint8 num)   
{ 
	uint8  i; 
	uint8  j; 
	 
	PINSEL0 = 0x00000000;		// ÉèÖÃËùÓйܽÅÁ¬½ÓGPIO 
	PINSEL0 &= 0xffffffbf;            //ÉèÖõÚ6λΪ0 
	//PINSEL1 = 0x00000000; 
	//IODIR=IODIR|(NET_DATA+NET_CS+NET_WR+NET_ALE+NET_RD+NET_RST); 
	//IOSET=NET_DATA+NET_CS+NET_WR+NET_ALE+NET_RD+NET_RST; 
	IODIR=IODIR|NET_RST;  //ÀûÓø´Î»¶Ë¿ÚÀ临λ 
	IOCLR=NET_RST; 
	for(i=0;i<200;i++) 
	{ 
		for(j=0;j<200;j++); 
	} 
	IOSET=NET_RST; 
	for(i=0;i<200;i++) 
	{ 
		for(j=0;j<200;j++); 
	} 
	IOCLR=NET_RST; 
	for(i=0;i<200;i++) 
	{ 
		for(j=0;j<200;j++); 
	}	 
	WriteToNet(0x1f,0x00); 	//ÀûÓø´Î»¼Ä´æÆ÷Èȸ´Î» 
	for(i=0;i<200;i++) 
	{ 
		for(j=0;j<200;j++); 
	} 
	 
	/********************************************************************** 
	 
	  1.Reg00ÃüÁî¼Ä´æÆ÷: CR,ÃüÁî¼Ä´æÆ÷,µØÖ·Æ«ÒÆÁ¿00H,Ϊһ¸ö×Ö½Ú 
	  λ:  7   6   5   4   3   2   1   0  
	  Ãû×Ö: PS1 PS0 RD2 RD1 RD0 TXP STA STP  
	  //============================================ 
	  2. 
	  RD2,RD1,RD0: Õâ3¸öλ´ú±íÒªÖ´ÐеŦÄÜ¡£ 
	  0   0   1 : ¶ÁÍø¿¨ÄÚ´æ 
	  0   1   0 : Ð´Íø¿¨ÄÚ´æ 
	  0   1   1 : ·¢ËÍÍø¿¨Êý¾Ý°ü 
	  1   *   * : Íê³É»ò½áÊøDMAµÄ¶Áд²Ù×÷ 
	  //============================================ 
	  3.TXPλÖÃ1ʱ·¢ËÍÊý¾Ý°ü£¬·¢Íê×Ô¶¯ÇåÁã 
	  //============================================ 
	  4. 
	  STA,STP:	ÕâÁ½¸öλÓÃÀ´Æô¶¯ÃüÁî»òÍ£Ö¹ÃüÁî 
	  1   0 		Æô¶¯ÃüÁî 
	  0   1 		Í£Ö¹ÃüÁî 
	  //============================================ 
	********************************************************/ 
	WriteToNet(0x00,0x21);   //ʹоƬ´¦ÓÚֹͣģʽ,Õâʱ½øÐмĴæÆ÷ÉèÖà 
	 
	for(i=0;i<200;i++) 
	{ 
		for(j=0;j<200;j++); 
	} //ÑÓʱ10ºÁÃë,È·±£Ð¾Æ¬½øÈëֹͣģʽ 
	page(0); 
	WriteToNet(0x0a,0x00);   //Çårbcr0 
	WriteToNet(0x0b,0x00);   //Çårbcr1 
	WriteToNet(0x0c, 0xe0);  //RCR,¼àÊÓģʽ,²»½ÓÊÕÊý¾Ý°ü 
	WriteToNet(0x0d, 0xe2);  //TCR,loop backģʽ 
	page(0); 
	WriteToNet(0x01,0x4c);		//PSTART=0X4C 
	WriteToNet(0x02,0x80);		//PSTOP=0X80 
	WriteToNet(0x03,0x4c);	  //bnry=0x4c; 
	WriteToNet(0x04,0x40);  //TPSR,·¢ËÍÆðʼҳ¼Ä´æÆ÷ 
	WriteToNet(0x07,0xff);  //Çå³ýËùÓÐÖжϱê־룬ÖжÏ״̬¼Ä´æÆ÷ 
	WriteToNet(0x0f,0x01);  //ÖÐ¶ÏÆÁ±Î¼Ä´æÆ÷£¬Ê¹ÄÜÎÞ´í½ÓÊÜÖÐ¶Ï 
	WriteToNet(0x0e,0xc9);  // Êý¾ÝÅäÖüĴæÆ÷£¬16λdma·½Ê½ 
	 
	page(1); 
	WriteToNet(0x07,0x4d);  //curr=0x4d 
	WriteToNet(0x08,0x00); 
	WriteToNet(0x09,0x41); 
	WriteToNet(0x0a,0x00); 
	WriteToNet(0x0b,0x80); 
	WriteToNet(0x0c,0x00); 
	WriteToNet(0x0d,0x00); 
	WriteToNet(0x0e,0x00); 
	WriteToNet(0x0f,0x00); 
	//WriteToNet(0x00,0x22);  //ÕâʱÈÃоƬ¿ªÊ¼¹¤×÷ 
	//SetMacID(NetPort[0].My_Mac);  //½«Ð¾Æ¬ÎïÀíµØÖ·Ð´Èëµ½MAR¼Ä´æÆ÷ 
	SetMacID(SrcMacID); 
	 
	page(0); 
	WriteToNet(0x0c,0xcc);  //½«Ð¾Æ¬ÉèÖóÉÕý³£Ä£Ê½,¸úÍâ²¿ÍøÂçÁ¬½Ó 
	WriteToNet(0x0d,0xe0); 
	WriteToNet(0x07,0xff);  //Çå³ýËùÓÐÖжϱê־λ 
	WriteToNet(0x00,0x22);  //Æô¶¯Ð¾Æ¬¿ªÊ¼¹¤×÷ 
				 
} 
 
uint16 swap_int16(uint16 temp) 
{uint16 temp1; 
temp1=(temp&0xff00)>>8; 
temp=(temp&0x00ff)<<8; 
return(temp+temp1); 
} 
uint32 swap_int32(uint32 temp) 
{ 
	union   w  temp232,temp132; 
	temp232.dwords=temp; 
	temp132.bytes.byte0=temp232.bytes.byte3; 
	temp132.bytes.byte1=temp232.bytes.byte2; 
	temp132.bytes.byte2=temp232.bytes.byte1; 
	temp132.bytes.byte3=temp232.bytes.byte0; 
	return(temp132.dwords); 
} 
 
uint16 Char2ToInt16(uint8 * temp) 
{ 
	uint16 temp16; 
	temp16=((uint16)(*temp))<<8; 
	temp++; 
	temp16=temp16+(uint16)(*temp); 
	return(temp16); 
} 
 
uint32 Char4ToInt32(uint8 * temp) 
{ 
	uint32 temp32; 
	temp32=((uint32)(*temp))<<24; 
	temp++; 
	temp32=temp32+(((uint32)(*temp))<<16); 
	temp++; 
	temp32=temp32+(((uint32)(*temp))<<8); 
	temp++; 
	temp32=temp32+(uint32)(*temp); 
	return(temp32); 
}