📄 enet_test.c
字号:
#include <stdio.h>
#include <io.h>
#include <unistd.h>
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include "md_cfg.h"
#include "phy_defs.h"
int main()
{
md_t *mdif = (md_t*)MD_CFG_INTERFACE_V3_0_BASE;
alt_u16 data,newdata,reg,n;
alt_u8 pcs_fail,retry=0;
IOWR_ALTERA_AVALON_PIO_DATA(TEST_CONTROL_BASE, 0x00);//turn off loopback tester
mdif->addr.phy_addr = 0x12; //set the phy address
/*
* PHY DETECT TEST
*
*/
(void)read_reg(mdif,2,&data);
if(data == MARVEL_88E111_ID)
printf("Detected Marvell 88e111\n");
else
{
printf("Failed to detect known device (ID: 0x%x )\n",data);
return(-1);
}
/*
* PCS LOOPBACK TEST
*
*
*/
for(pcs_fail=1;pcs_fail!=0 && retry < 3;retry++)
{
//enable pcs loopback
(void)read_reg(mdif,0,&data);
usleep(100000);
data |= 1<<13;
data &= ~(1<<6);
(void)write_reg(mdif,0,data);
usleep(100000);
(void)read_reg(mdif,0,&data);
usleep(100000);
data |= 1<<15;
(void)read_reg(mdif,0,&data);
usleep(100000);
data |= 1<<14;
(void)write_reg(mdif,0,data);
usleep(100000);
//reset the reciever
while(data != TEST_WAITING)
{
IOWR_ALTERA_AVALON_PIO_DATA(TEST_CONTROL_BASE, 0x02);
data = IORD_ALTERA_AVALON_PIO_DATA(LOOPBACK_PASS_BASE);
}
//send some data
IOWR_ALTERA_AVALON_PIO_DATA(TEST_CONTROL_BASE, 0x01); //send some data
usleep(1000000);
IOWR_ALTERA_AVALON_PIO_DATA(TEST_CONTROL_BASE, 0x00); //stop sending data
usleep(1000000);
//read the test results, retry if nessesary
pcs_fail = 1;
for(n=0;n<0xfffe;n++)
{
newdata = IORD_ALTERA_AVALON_PIO_DATA(LOOPBACK_PASS_BASE);
if(data != newdata)
{
pcs_fail = 0;
break;
}
}
}
if(pcs_fail == 0)
printf("PCS loopback OK\n");
else
printf("PCS loopback failed\n");
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -