enet_test.c

来自「基于SIIGX的PCIe的Kit」· C语言 代码 · 共 95 行

C
95
字号
#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 + =
减小字号Ctrl + -
显示快捷键?