rtl8305smi.c

来自「pdh控制程序」· C语言 代码 · 共 124 行

C
124
字号
#ifndef _REALTEK_8305SB_SMI_C_
#define _REALTEK_8305SB_SMI_C_

#include "api.h"

static BYTE idata Parameter[ENET_PORT] = {ENET_AUTO, ENET_AUTO, ENET_AUTO, ENET_AUTO};

bit first = 0;

void SystemENetParameterSet( BYTE ENetno, BYTE value)
{
	WORD regvalue;
	BYTE port = ENetno - 1;

	switch( value )
	{
	case ENET_AUTO:
		regvalue = 0x3300;
		break;

	case ENET_100M_FULL:
		regvalue = 0x2300;
		break;

	case ENET_100M_HALF:
		regvalue = 0x2200;
		break;

	case ENET_10M_FULL:
		regvalue = 0x0300;
		break;

	case ENET_10M_HALF:
		regvalue = 0x0200;
		break;

	case ENET_NOUSE:
		regvalue = 0x1900;
		break;
	}
	Parameter[port] = value;
	SmiPhyWrite(  0, port, regvalue );

	first = 0;
}

BYTE SystemENetParameterSetGet( BYTE ENetno )
{
	BYTE port = ENetno - 1;

	return Parameter[port];
}

BYTE SystemENetParameterGet( BYTE ENetno )
{
	WORD regvalue;
	BYTE link;
	BYTE port = ENetno - 1;

	if( first == 0 )
	{
		regvalue = SmiPhyRead( 1, port);
		taskDelay(500);
		regvalue = SmiPhyRead( 1, port);
		first = 1;
	}
	regvalue = SmiPhyRead( 1, port);
	regvalue = SmiPhyRead( 1, port);

	if( regvalue & 0x04 )
	{
		regvalue = SmiPhyRead( 0, port);
		if( regvalue & 0x2000)
		{
			if( regvalue & 0x100)
				link =  ENET_100M_FULL;
			else
				link =  ENET_100M_HALF;
		}
		else
		{
			if( regvalue & 0x100)
				link =  ENET_10M_FULL;
			else
				link =  ENET_10M_HALF;
		}
	}
	else
	{
		link =  ENET_LINKDOWN;
	}
	return link;
}

void InitRealtek8005SB( void )
{
	BYTE i;

	SmiPhyWrite( 16, 0, 0xf7ff );
	SmiPhyWrite( 17, 0, 0xfff0 );
	SmiPhyWrite( 21, 0, 0xcccc );

	SmiPhyWrite( 24, 1, 0xf004 );
	SmiPhyWrite( 25, 1, 0x01ff );
	SmiPhyWrite( 26, 1, 0xe4ff );
	SmiPhyWrite( 27, 1, 0xe01f );
	SmiPhyWrite( 28, 1, 0x01ff );
	SmiPhyWrite( 29, 1, 0xffff );
	SmiPhyWrite( 30, 1, 0xe01f );
	SmiPhyWrite( 31, 1, 0xffff );


	SmiPhyWrite( 16, 2, 0xfff7 );
	SmiPhyWrite( 17, 2, 0xffdc );

	SmiPhyWrite( 16, 3, 0x7fff );

	for( i=0; i<ENET_PORT; i++ )
		SystemENetParameterSet(i+1, 0);
}


#endif

⌨️ 快捷键说明

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