Ejemplo n.º 1
0
/*=======================================================================
 *  函数名称:UINT32 ETH_Interrupt_Init() 
 *  初稿完成:2005/1/18   
 *  作    者:  
 *  函数功能:定义ETH中断服务入口,以及可以打开中断使能
 *  输入参数:无
 *  输出参数:
 *  返回类型:  无
 *  其他说明: 
 *  调用函数:  建议 
 *  主调函数:  建议
 *========================================================================*/
UINT32 ETH_Init(void) 
{
        UINT32 k = 0;
#ifdef HI3560_V100
//	ETH_changcontrol(27,7);
	ETH_changcontrol__(27);
#endif
        eth_soft_reset();
	/*set the phy chip extern address as 1*/
#if defined(HI3511_DEMO)||defined(HI3560_V100) 
	ETH_SetPHYExternAddress(0x1);
#endif
#ifdef HI3511_UMAP
	ETH_SetPHYExternAddress(0x7);
#endif
	/*set input and output queue extern address(input addr, output addr)*/
	//ETH_SetQueueAddress (0xf2800000,0xf2900000) ;

	/*set little and big endian*/
        ETH_SetEndian (1, 1);
	/*set post frame enable*/
	ETH_SetPortPostFrameSend(1);
	
	/*set the port mdio fetch from which root*/

	/*set port work mode as 10mbps, link enable,full duplex*/
	ETH_SetSpeedLinkDuplexMode(0, 1, 0);
	
	/*half duplex work mode*/
	ETH_SetFrameConfiguration(0x0,92,0x1FFF);

		/*set port mode fetch from cpu*/
	ETH_SetPortStatusMode(0x1);

	/*enable the receive frame interrupt*/
	/*include the retry interrupt and ahba error*/
	//ETH_SetInterruptEnable(0x181);

	//interrupt testfunction
	ETH_SetInterruptEnable(0x0);
	ETH_SetNormalInterruptStyle(0x0);
        
       ETH_SetFrameQueueLength(h_num,e_num); 

	/*set Phy information*/
	ETH_PhyWrite(0 , 0x0);
        udelay(1000);	
        //printf("Set Phy information!!\r\n");
    /*输入输出队列使用长度配置*/
       ETH_SetMACFiltCtrl(0x120);//add mac file control


 /*启动发包*/
for(k =0;k<h_num;k++)
 *(UINT32 *) ETH_GLB_REG(14)=((UINT32)(ETH_FRAM_ADDR+(k << 11)));
 
	return Success;
}
Ejemplo n.º 2
0
void phy_AutoMediaSelect() {
	uint32_t data;

	// auto media and auto media register selection
	data = ETH_PhyRead(PHY_BASE_ADDR, PHY_REG_EXTEND_STATUS);
	data &= ~PHY_BIT_AUTO_MEDIA_DISABLE;
	data &= ~PHY_BIT_AUTO_MEDIA_REG_DISABLE;
	ETH_PhyWrite(PHY_BASE_ADDR, PHY_REG_EXTEND_STATUS, data);
}
Ejemplo n.º 3
0
void phy_Reset() {
	ETH_PhyWrite(PHY_BASE_ADDR, PHY_REG_CONTROL, PHY_BIT_CONTROL_RESET);

	while (1) {
		uint32_t ret = ETH_PhyRead(PHY_BASE_ADDR, PHY_REG_CONTROL);
	  if ((ret & PHY_BIT_CONTROL_RESET) == 0) {
			break;
		}
	}
}
Ejemplo n.º 4
0
void phy_AutoNeg()
{
    uint32_t data;

    data = ETH_PhyRead(PHY_BASE_ADDR, PHY_REG_CONTROL);
    data |= (PHY_BIT_CONTROL_ANEN | PHY_BIT_CONTROL_RSAN);
    ETH_PhyWrite(PHY_BASE_ADDR, PHY_REG_CONTROL, data);

    while (1)
    {
        uint32_t ret = ETH_PhyRead(PHY_BASE_ADDR, PHY_REG_STATUS);
        if ((ret & PHY_BIT_STATUS_ANC) == PHY_BIT_STATUS_ANC)
        {
            break;
        }
        rt_thread_delay(1);
    }
}