📄 rtl8305smi.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -