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

📄 ge_test.c

📁 程序是一个vxworks下对PMC公司3386千兆MAC芯片的驱动和配置
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifdef SYS_LOOP
	if(L10b()!=OK)
	{
		printf("test_config:set PM3386 L10b failes!\n");
		return ERROR;
	}
	if(L32b()!=OK)
	{
		printf("test_config:set PM3386 L32b failes!\n");
		return ERROR;
	}
#ifdef NO_LOOP
	if(Fibre()!=OK)
	{
		printf("test_config:set PM3386 L10b failes!\n");
		return ERROR;
	}
#endif
	if(PM3386RegCheck()!=OK)
	{
		printf("test_config:PM3386 Reg state is wrong!\n");
		return ERROR;
	}
	
	if (infpgaInit()!=OK)
	{
		printf("test_config:(ERROR)infpga init failed!\n");
		return ERROR;
	}
         return OK;
#endif
}

/*************************End of GE_SelfTest.c**********************************************/
STATUS self_test1()
{
	cfg();
	infpgaWrite(0x18,0x20+GE_swiport);
	taskDelay(3);
	spa();
	taskDelay(3);
	read_in_B_Fifo();

	taskDelay(30);/*this packet will go through forward module and then send back to interface.*/
	
	read_E_out_Fifo();
	printf("BOARD SelfTest finished!\n");
	return  OK;

}
STATUS self_test2()
{
	cfg();
	infpgaWrite(0x18,0x20+GE_swiport);
	write_E();
	ek_once();
	read_E_out_Fifo();
	read_out_PM3386_Fifo();
	read_in_B_Fifo();
	taskDelay(30);/*this packet will go through forward module and then send back to interface.*/
	printf("BOARD SelfTest finished!\n");
	return  OK;

}
/*******************************************************************************************/
STATUS PM3386RegCheck()
{
   	ULONG RegValue;
      	RegValue=PM3386Read(0x4);
   	if (RegValue == !0xC0110000)
    	{
		printf("PM3386RegCheck:PM3386 RFCLK,TFCLK is in unlock state!\n");
		return ERROR;
    	}

    	RegValue=PM3386Read(0x5);
    	if (RegValue!=0x0)
    	{
		printf("PM3386RegCheck:PM3386 CLK125 is in unlock state!\n");
		return ERROR;
    	}

      	RegValue=PM3386Read(0x6);
   	if (RegValue!=0x0)
   	{
		printf("PM3386RegCheck:PM3386 OPTICAL device is not best connected!\n");
		return ERROR;
   	}
   	return OK;
}


/******************************************************************************************/
STATUS  read_E_out_Fifo()
{
	static ULONG 	read_E_out_Fifo[400];
	unsigned int 	i=0;
	ULONG     	flag;
	
	flag=(outfpgaRead(0x2a))&0x20000000;
	if(flag!=0x20000000)
	{
		printf("\nE_monitor_FIFO not allow to read!\n");
	}
        else
	{
		i=0;
		printf("\n*==========================read_E_out_Fifo========================*\n");
		printf(" E_monitor_FIFO  allow to read!\n");
		for(i=0;(flag==0x20000000)&&(i<200);i+=3)/* judge packet tail */
		{
			read_E_out_Fifo[i] = outfpgaRead(0x2F);
			read_E_out_Fifo[i+1] = outfpgaRead(0x30);
			read_E_out_Fifo[i+2] = outfpgaRead(0x31);
			printf("%8lx =*=  %8lx    ",i,read_E_out_Fifo[i]);
			printf("%8lx =*=  %8lx    ",i+1,read_E_out_Fifo[i+1]);
			printf("%8lx =*=  %8lx    ",i+2,read_E_out_Fifo[i+2]);
			printf("\n");
			flag=(outfpgaRead(0x2a))&0x20000000;
		}
		outfpgaWrite(0x1c,0x0);	
		printf("\n*==========================THE END==============================*\n");
	}

	return OK;
}

/**************************************************************************************/

STATUS  read_out_PM3386_Fifo()
{
	static ULONG read_out_PM3386_Fifo[400];
	unsigned int i=0;
	ULONG    flag;

	flag=outfpgaRead(0x2a);
	printf("\n*==========================read_out_PM3386_Fifo========================*\n");
	for(i=0;(flag & 0x10000000)==0x10000000;i+=2)/*packet tail*/
	{	
		read_out_PM3386_Fifo[i] = outfpgaRead(0x32);
		read_out_PM3386_Fifo[i+1]=outfpgaRead(0x33);
		flag = outfpgaRead(0x2a);
		printf("         %8lx =*= %.8lx   ",i,read_out_PM3386_Fifo[i]);
		printf("%8lx =*= %.8lx\n"        ,i+1,read_out_PM3386_Fifo[i+1]);
		
	}
	printf("\n*===========================THE   END=================================*\n");
	outfpgaWrite(0x1d,0x0);
	if(i<16)
		printf("\nread_out_PM3386_Fifo:This is a extra short packet!\n");
	return OK;
	
}

/**************************************************************************************/	
STATUS  read_PM3386_in_Fifo()
{
	static  ULONG read_PM3386_in_Fifo[400];
	ULONG   Self_Export,i=0,value1,value2,flag,count=0;
	
/*	Self_Export=(ULONG)GE_GetSelfExPort;
	value1= Self_Export + 0x10;
	
	infpgaWrite(0x18,value1);*/
	infpgaWrite(0x18,0x10+GE_swiport);
	taskDelay(3);
	flag=infpgaRead(0x0D);
	if((flag & 0x1)!= 0x1)
	{
		printf("PM3386_in_Fifo not allow to read!\n");
		return ERROR;		
	}
	
	
	for(i=0;(flag&0x1)==0x1;i++)
	{	
		read_PM3386_in_Fifo[i]=infpgaRead(0x0E);
		
		printf("%8lx =*= %8lx",i,read_PM3386_in_Fifo[i]);
		count+=1;
                if(count%3==0)
		printf("\n");
		flag=infpgaRead(0x0D);
	}
	if(i<16)
	printf("\nread_PM3386_in_Fifo:This is a extra Short packet!\n");
	
		
/*	value2=0x0+Self_Export;

	infpgaWrite(0x18,value2);*/

        return  OK;
}
/*************************************************************************************/
STATUS  read_in_B_Fifo()
{
	static  ULONG read_in_B_Fifo[400];
	ULONG   value1,value2,Self_Export,i,flag,count=0;
	/*Self_Export=(ULONG)GE_GetSelfExPort;
	value1= Self_Export + 0x20;
	
	infpgaWrite(0x18,value1);*/
/*	infpgaWrite(0x18,0x20);
	taskDelay(3);*/
	flag=infpgaRead(0x0D);
	
	if((flag&0x1)!=0x1)
	{
		printf("\nread_in_B_Fifo not allow to read!\n");
		return ERROR;
	}
	printf("\n*===========================read_in_B_Fifo================================*\n");;	
	for(i=0;(flag&0x1)==0x1;i++)
	{	
		read_in_B_Fifo[i]=infpgaRead(0x0E);
		
		printf("%8lx =*= %8lx",i,read_in_B_Fifo[i]);
		count+=1;
                if(count%3==0)
		printf("\n");
		flag=infpgaRead(0x0D);
	
	}
	printf("\n*===========================THE   END=====================================*\n");
	if(i<16)
	printf("\nThis is a extra short packet!\n");

/*	value2=0x0+Self_Export;
	infpgaWrite(0x18,value2);*/
   	return OK;

}
/**************************************************************************************/
STATUS  read_in_proFifo()
{
	static  ULONG  read_in_proFifo[400];
	ULONG   value1,value2,Self_Export,i=0,flag;
	
	flag=infpgaRead(0x0D);
	
	if((flag & 0x1) != 0x1)	
	{
		printf("read_in_proFifo not allow to read!\n");
		return  ERROR;
	}
	/*for(i=0;(flag&0x1)==0x0;i++)*/
	else
	{
		for(;(flag & 0x1)==1;i++)
		{	
			read_in_proFifo[i] = infpgaRead(0x0E);
			printf("%8lx =*= %8lx\n",i,read_in_proFifo[i]);
	
			flag=infpgaRead(0x0D);
		}
	}
	if(i>375)
	printf("read_in_proFifo:This is a extra long packet!\n ");
	if(i<16)
	printf("read_in_proFifo:This is a extra short packet!\n");
	else
	printf("read_in_proFifo:This is a normal length packet!\n");	
		
/*	value2=0x0+Self_Export;
	infpgaWrite(0x18,value2);*/
	return OK;
}


/*************************************************************************************/
STATUS test_wr_PM3386()
{
	ULONG 	value;
	PM3386Write(0x509,0x0);
	PM3386Write(0x609,0x0);
	PM3386Write(0x50A,0x1234);
	PM3386Write(0x60A,0x4321);
	PM3386Write(0x50B,0x5678);
	PM3386Write(0x60B,0x8765);
	PM3386Write(0x50C,0x0);
	PM3386Write(0x60C,0x0);
	PM3386Write(0x500,0x4);
	PM3386Write(0x600,0x4);
	PM3386Write(0x500,0x1);
	PM3386Write(0x600,0x1);
	
	value=PM3386Read(0x510);
	printf("   %8lx",value);
	
	value=PM3386Read(0x610);
	printf("   %8lx",value);
	
	value=PM3386Read(0x511);
	printf("   %8lx",value);
	
	value=PM3386Read(0x611);
	printf("   %8lx",value);
	
	value=PM3386Read(0x512);
	printf("   %8lx",value);
	
	value=PM3386Read(0x612);
	printf("   %8lx",value);
	return  OK;
}

void t()
{
	before_init();
	taskDelay(30);
	after_init();
	taskDelay(5);
	outfpgaInit();
	taskDelay(5);
	L10b();
        /*L32b();*/

	taskDelay(5);
	infpgaInit();
	taskDelay(5);
	infpgaWrite(0x18,0x10+GE_swiport);
	taskDelay(5);
	outfpgaWrite(0x1e,0x0);
	taskDelay(5);
	endis_l();
	taskDelay(5);
	spa();
	taskDelay(30);
	return;
}
/********************************************************************/ 
STATUS test_in()
{
	unsigned int 	i;

	pkt();
	for(i=0;i<8*PKT_COUNT;i++)
	{	
		*(ULONG*)(INFPGABASE+(0x8<<8)+(0x7<<4)+0xC)=PKT[i];
		printf("  %d:     %8lx\n",i,PKT[i]);
	}
	for(i=0;i<8*PKT_COUNT;i+=2)
	{	
		PKT1[i]=*(ULONG*)(0x13012680);
		PKT1[i+1]=*(ULONG*)(0x13012680);
		printf("%2lx:    %8lx\n%2lx:    %8lx\n",i,PKT1[i],(i+1),PKT1[i+1]);
	}
	return OK;	
}


/*void   test_read()
{
	ULONG data;
	data=*(ULONG*)0x1301287C;
	printf("    %8lx",data);
	return;
}
void   test_write()
{
	*(ULONG*)0x1301287C=0x8A3DFFFF;
	return;
}*/
STATUS test_out()
{
	ULONG VALUE;
	unsigned int i;
	pkt();
	/*data=0xabce0078;*/
	
	for(i=0;i<8*PKT_COUNT;i++)
	{			
		*(ULONG*)(OUTFPGABASE)=PKT[i];
		printf("  %d:    %8lx        ",i,PKT[i]);		
	
		VALUE=*(ULONG*)(INFPGABASE+(0x5<<8)+(0x2<<4));
		printf("    %8lx \n",VALUE);
	}
	
	return OK;	
}
/**************************************************************************************/

void w0_(ULONG DATA)
{
	*(ULONG*)(INFPGABASE+(0x8<<8))=DATA;
	printf("    %8lx \n",DATA);
}
void w1_(ULONG DATA)
{
	*(ULONG*)(INFPGABASE+(0x8<<8)+(0x1f<<2))=DATA;
	printf("    %8lx \n",DATA);
}
void r0_(ULONG ADD)
{
	ULONG DATA;

	DATA=*(ULONG*)(INFPGABASE+(0x8<<8));
	printf("    %8lx \n",DATA);
}
void r1_(ULONG ADD)
{
	ULONG DATA;

	DATA=*(ULONG*)(INFPGABASE+(0x8<<8)+(0x1f<<2));
	printf("    %8lx \n",DATA);
}
/**************************************************************************************/
void  endis_l()
{
	wr_to_pb(8,0);
}

void  endis_h()
{
	wr_to_pb(8,1);
}

void  before_init()
{
	wr_to_pb(4,0);
	wr_to_pb(5,0);
	wr_to_pb(6,0);
	wr_to_pb(7,0);
	endis_l();
        /*wr_to_pb(0,0);*/
        
}

void  after_init()
{
	wr_to_pb(4,1);
	wr_to_pb(5,1);
	wr_to_pb(6,1);
	wr_to_pb(7,1);
        /*wr_to_pb(0,1);
        ek_reset();*/

⌨️ 快捷键说明

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