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

📄 ge_test.c

📁 程序是一个vxworks下对PMC公司3386千兆MAC芯片的驱动和配置
💻 C
📖 第 1 页 / 共 5 页
字号:
}
/*************************************************************************************/
void read_flag()
{	
	unsigned  long  flag,flag20,flag26,flag27;
	flag  = *(ULONG*)(0x13020014); 
	flag26=flag & 0x20;
	flag27=flag & 0x10;
	flag20=flag & 0x800;
	if(flag26==0x20)
	{
		printf("flag26=1");

	}
	if(flag26!=0x20)
	{
		printf("flag26=0");

	}
	if(flag27==0x10)
	{
		printf("flag27=1");

	}	
	if(flag27!=0x10)
	{
		printf("flag27=0");

	}
	if(flag20=0x800)
	{
		printf("flag20=1\n");

	}
	if(flag20!=0x800)
	{
		printf("flag20=0\n");

	}
	return;
}
/*************************************************************************************/
STATUS  L10b()
{
	PM3386Write(0x708,0xd055);
	taskDelay(10);
	PM3386Write(0x708,0x5055);
	PM3386Write(0x718,0xd055);
	taskDelay(10);
	PM3386Write(0x718,0x5055);
	PM3386Write(0x300,0x0200);
	PM3386Write(0x400,0x0200);
	PM3386Write(0x303,0x5000);
	PM3386Write(0x403,0x5000);
	
	PM3386Write(0x302,0x0133);
	PM3386Write(0x402,0x0133);
	
	PM3386Write(0x301,0x8000);
	PM3386Write(0x401,0x8000);
	
	PM3386Write(0x301,0x000);
	PM3386Write(0x401,0x000);

	PM3386Write(0x122,0x0008);
	PM3386Write(0x142,0x0008);
	PM3386Write(0x103,0x0003);
	return OK;			
}
STATUS  L32b()
{
	/*taskDelay(600);*/

	PM3386Write(0x708,0xd055);
	taskDelay(10);
	PM3386Write(0x708,0x5055);
	PM3386Write(0x718,0xd055);
	taskDelay(10);
	PM3386Write(0x718,0x5055);
	PM3386Write(0x300,0x0100);
	PM3386Write(0x400,0x0100);
	PM3386Write(0x303,0x5000);
	PM3386Write(0x403,0x5000);
	
	PM3386Write(0x302,0x0133);
	PM3386Write(0x402,0x0133);
	
	PM3386Write(0x301,0x8000);
	PM3386Write(0x401,0x8000);
	
	PM3386Write(0x301,0x000);
	PM3386Write(0x401,0x000);

	PM3386Write(0x122,0x0008);
	PM3386Write(0x142,0x0008);
	PM3386Write(0x103,0x0003);
	return  OK;		
}
STATUS  Fibre()
{	
		taskDelay(6);

		PM3386Write(0x122,0x0008);
		PM3386Write(0x142,0x0008);
		PM3386Write(0x103,0x0003);
		
		PM3386Write(0x310,0x05F6);
		PM3386Write(0x410,0x05F6);
		PM3386Write(0x336,0x05F6);
		PM3386Write(0x436,0x05F6);

	
		/*PM3386Write(0x300,0x0200);
		PM3386Write(0x400,0x0200);*/
		/*将0x300,0x400设为0100为MAC控制层打环,0200为8B-10B编码处打环*/

		PM3386Write(0x310,0x05F6);
		PM3386Write(0x410,0x05F6);
		PM3386Write(0x336,0x05F6);
		PM3386Write(0x436,0x05F6);
		PM3386Write(0x302,0x1733);
		PM3386Write(0x402,0x1733);
 	      	PM3386Write(0x301,0x8000);
      		PM3386Write(0x301,0x0000);
      		PM3386Write(0x401,0x8000);
      		PM3386Write(0x401,0x0000);

		/*写Station Address*/
		PM3386Write(0x308,0x3412);
		PM3386Write(0x309,0x0056);
		PM3386Write(0x30A,0x4062);
		PM3386Write(0x408,0x3412);
		PM3386Write(0x409,0x0056);
		PM3386Write(0x40A,0x4162);
	

		/*写DA  */
		PM3386Write(0x339,0x6240);
		PM3386Write(0x33A,0x5600);
		PM3386Write(0x33B,0x1234);
		PM3386Write(0x439,0x6241);
		PM3386Write(0x43A,0x5600);
		PM3386Write(0x43B,0x1234);
		/*写SA*/
		PM3386Write(0x33C,0x6240);
		PM3386Write(0x33D,0x5600);
		PM3386Write(0x33E,0x1234);
		PM3386Write(0x43C,0x6241);
		PM3386Write(0x43D,0x5600);
		PM3386Write(0x43E,0x1234);

     		PM3386Write(0x359,0xFFFF);
       		 PM3386Write(0x35A,0xFFFF);
       		PM3386Write(0x35B,0xFFFF);
		PM3386Write(0x35C,0xFFFF);
		PM3386Write(0x459,0xFFFF);
       		 PM3386Write(0x45A,0xFFFF);
       		 PM3386Write(0x45B,0xFFFF);
		PM3386Write(0x45C,0xFFFF);




		PM3386Write(0x35D,0x39);
		PM3386Write(0x35F,0x01);
		PM3386Write(0x360,0x01);
		PM3386Write(0x45D,0x39);
		PM3386Write(0x45F,0x01);
		PM3386Write(0x460,0x01);
		
		
		PM3386Write(0x303,0x5000);
		PM3386Write(0x403,0x5000);
		taskDelay(1);
		return  OK;		
}

      	
/*******************************************************************************************/
STATUS spa()/*port in bit 24,padNum in bit 30,31*/
{
	int		i,count=0;
	ULONG 		errorTimes=0;
        ULONG           flag;

        ULONG 		exPort;
        ULONG 		port;
        ULONG 		padNum;
        ULONG 		cData;
        
        padNum =4 - testLength%4; 
        port=0x0;
        exPort=(ULONG)GE_swiport<<16;
        cData=port|exPort|(padNum<<8);  


    		taskLock();     
        	flag=outfpgaRead(0x2A);   
     		taskUnlock();	
 
	    	if ((flag&0x80000000)!=0x80000000)
 	   	{
  	  		errorTimes++;
   	 		if(errorTimes==3)
    			{
    			    outfpgaWrite(0x10,0x0);
			
      	 		}
    		errorTimes=0;
    		return  ERROR;
    	}  	 
    	else
	{    
	   outfpgaWrite(0x18,0xE25C4B89);
           testPacketBefore[0] = 0xE25C4B89;

	   outfpgaWrite(0x18,cData);
	   testPacketBefore[1] = cData;

	 /* for(i = 0; i<( (testLength % 4 == 0)? testLength / 4 : (testLength / 4 + 1) ); i++)*/
	/*printf("\n*========================send pkt to outfpga profifo======================*\n");*/
	for(i=0;i<18;i++)
        {
		outfpgaWrite(0x18,testPacket1[i]);
		/*intf("%8x =*= %8lx",i,testPacket1[i]);*/
		count+=1;
		/*if(count%3==0)
			printf("\n");*/
	}
	/*printf("\n*=================================THE END================================*\n");       */
	outfpgaWrite(0x18,0x1DA3B476);
        testPacketBefore[i+1] = 0x1DA3B476;
        testPacketBeforeLength = 4*i + 16;
     }
               bcopy((UCHAR*)&testPacket1[0],(UCHAR*)&testPacketBefore[2],testPacketBeforeLength);
	return OK;
 }
/*******************************************************************************************/
STATUS  spb(char unit, ULONG ip)/*port in bit 24,padNum in bit 30,31*/
{
	int		i;
	ULONG 		errorTimes=0;
        ULONG           flag;

        ULONG 		exPort;
        ULONG 		port;
        ULONG 		padNum;
        ULONG 		cData;
        
        padNum =4 - testLength%4; 
        port=(ULONG)unit;
        exPort=(ULONG)GE_swiport<<16;
        cData=port|exPort|(padNum<<8);  
	testPacket2[7]=ip;

    		taskLock();     
        	flag=outfpgaRead(0x2A);   
     		taskUnlock();	
 
	    	if ((flag&0x80000000)!=0x80000000)
 	   	{
  	  		errorTimes++;
   	 		if(errorTimes==3)
    			{
    			    outfpgaWrite(0x10,0x0);
			
      	 		}
    		errorTimes=0;
    		return ERROR;
    	}  	 
    	else
	{    
	   outfpgaWrite(0x18,0xE25C4B89);
           testPacketBefore[0] = 0xE25C4B89;

	   outfpgaWrite(0x18,cData);
	   testPacketBefore[1] = cData;

	 /* for(i = 0; i<( (testLength % 4 == 0)? testLength / 4 : (testLength / 4 + 1) ); i++)*/

	for(i=0;i<17;i++)

            {
		outfpgaWrite(0x18,testPacket2[i]);
		printf("%8x  =*=%8lx  \n",i,testPacket2[i]);
	
	    }

	       
	       outfpgaWrite(0x18,0x1DA3B476);
               testPacketBefore[i+1] = 0x1DA3B476;
               testPacketBeforeLength = 4*i + 16;
     }
               bcopy((UCHAR*)&testPacket2[0],(UCHAR*)&testPacketBefore[2],testPacketBeforeLength);

     return  OK;
}
/******************************************************************************************/
STATUS infpgaInit()
{
	ULONG   exPort,ipAddr;
	ipAddr=0x12345678;

        exPort=(ULONG)GE_swiport;
	/*写本路由器的32个IP地址,转发不调试,这里没办法写,故在这里只写了一个IP地址供调试使用。*/
	infpgaWrite(0x10,ipAddr);
	infpgaWrite(0x14,(ULONG)(exPort>>2));
	return OK;
}
STATUS outfpgaInit()
{
  	ULONG  macAddrLow0;
  	ULONG  macAddrHigh0;
	ULONG  macAddrLow1;
  	ULONG  macAddrHigh1;
	unsigned char macAddr[6];
	macAddrHigh0=0x12345678;
	macAddrLow0=0x9ABC0000;

        outfpgaWrite(0x00, macAddrHigh0);/*port 0  mac address*/
       	outfpgaWrite(0x04, macAddrLow0);
       	
	macAddrHigh1=0x66666666;
	macAddrLow1=0x66660000;        
 
        outfpgaWrite(0x08, macAddrHigh1);/*port 1 mac address*/
       	outfpgaWrite(0x0C, macAddrLow1);

   	return OK;	
}
/**************************************************************************************/
void  count_reg_r(ULONG  offset)
{
	ULONG data;	
	PM3386Write(0x500,0x1);
	PM3386Write(0x600,0x1);
	
	data=PM3386Read(offset);
	printf("  0x%lx%6lx",offset,data);
	return;	
}

void  r_stsReg()
{
	ULONG   i,j,k;
	printf("*************CHANNEL0****************//*****************CHANNEL1***************************\n\n");	
	for(i=0x510,j=0x610;(i<=0x5e2)&&(j<=0x6e2);)
	{
		for(k=0;k<3;k++)
		{
		
			count_reg_r(i+k);
					
		}
		printf("   **   ");
		for(k=0;k<3;k++)
		{
			count_reg_r(j+k);
		}
			
		printf("\n\n");
		i+=4;
		j+=4;
	}    
}

STATUS 	ReadProtoFifo()
{    
 
    ULONG	 	    InBuf[512];
     ULONG                   flag;
    ULONG        i;
    
    taskLock();  
    flag  = *(ULONG*)(0x13020014);  

    taskUnlock();
    if((flag & 0x10) != 0x10)
    {
	printf("GE_ReadProtoFifo:flag invalid!\n");
	return  ERROR;
    }
    else
    {
    	printf("GE_ReadProtoFifo:flag valid ,fifo allow to read\n");
        for(i=0;i<20;i++)
        {

        	InBuf[i] = *(ULONG *)0x1302000C; 
      		printf("%8lx\n",InBuf[i]);     
	 	        	 
  	 }
     }
   return OK;	
}
/************************************************************************************/
/*from 0 to 1*/
STATUS  senda(unsigned int num,unsigned int count)/*num为发包的个数;count为循环发包的次数;length为包的长度*/
{
	unsigned int i;
	for(i=0;i<count;i++)
	{
		sspa(num);
	}
	return  OK;
}
/***************************************************************************/
/*from 1 to 0*/
STATUS  sendb(unsigned int num,unsigned int count)/*num为发包的个数;count为循环发包的次数;length为包的长度*/
{
	unsigned int i;
	for(i=0;i<count;i++)
	{
		sspb(num);
	}
	return  OK;
}
/******************************************************************************/
STATUS  sspa(unsigned int num)
{
						 	
	static   ULONG 		packet1[500]={ 	0x66666666,0x66661234,0x56789abc,0x08060001,
		       			 	0x08000604,0x0000aabb,0xccddeeff,0x03040507,
						0xFFFFFFFF,0xCCCCCCCC,0xFFFFFFFF,0xDDDDDDDD,
					 	0xCCCCCCCC,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFEFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000};
			      
	static   ULONG 		packet2[500]={  0x66666666,0x66661234,0x56789abc,0x08060001,
		       			 	0x08000604,0x0000aabb,0xccddeeff,0x0304050f,
						0xFFFFFFFF,0xCCCCCCCC,0xFFFFFFFF,0xDDDDDDDD,
					 	0xCCCCCCCC,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFEFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,
					 	0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,

⌨️ 快捷键说明

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