📄 ge_test.c
字号:
}
/*************************************************************************************/
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 + -