資源簡介
RTL8305的寄存器讀寫以及stc的串口設(shè)置
代碼片段和文件信息
#include??
#include?
#include?
//#define?leng?0x2
#define??max?0x06
#define??s_nop_()??_nop_()//;_nop_();_nop_();_nop_()//;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
unsigned?char?INBUF_LEN=0;
unsigned?char?inbuf1[max];??
//I2C運行管腳
sbit?????SDA=P1^3;
sbit?????SCL=P1^2;
//SMI運行管腳
//sbit?????MDIO=P1^5;
//sbit?????MDC=P1^6;
sbit?MDC?=?P1^0;
sbit?MDIO?=?P1^1;
sbit?????work=P3^2;
bit?read_flag=?0?;?
bit?write_flag=?0?;
bit?send_over=?0?;?
void?delay(unsigned?int?delay_time)
{
unsigned?int?k=?0?;
do
{
???k++;
???}while(k }
/***************************
MDC時鐘的一個周期
***************************/
void?SMI_Clock_01()
{
MDC=0;
s_nop_();
MDC=1;
s_nop_();
}
/***************************
MDIO輸入數(shù)據(jù)0
MDIO在MDC的下降沿輸出
***************************/
void?SMI_Data_0()
{
MDC=0;
//s_nop_();
MDIO=0;
s_nop_();
MDC=1;
s_nop_();
}
/***************************
MDIO輸入數(shù)據(jù)1
***************************/
void?SMI_Data_1()
{
MDC=0;
//s_nop_();
MDIO=1;
s_nop_();
MDC=1;
s_nop_();
}
/***************************
MDIO輸入數(shù)據(jù)1
***************************/
void?SMI_Start()?
{
SMI_Data_0();
SMI_Data_1();
}
void?SMI_R_opcode()
{
SMI_Data_1();
SMI_Data_0();
}
void?SMI_W_opcode()
{
SMI_Data_0();
SMI_Data_1();
}
/*********************************************
通過SMI寫入數(shù)據(jù),僅byte的低5位bit
PHYADDER是PHY地址為0,1,2,3,4這;第一個以太網(wǎng)口為0
REGADDER為PHY的寄存器地址一共32個寄存器
*********************************************/
void?SMI_adder_reg(unsigned?char?byte)
{
???unsigned?char?i;
???for(i=0;i<5;i++)
???{
????if(byte&0x10)SMI_Data_1();
????else??SMI_Data_0();
????byte=byte<<1;
????}
}
void?SMI_R_TA()
{?
??SMI_Clock_01();
??SMI_Clock_01();
?
}
void?SMI_W_TA()
{
??SMI_Data_1();
??SMI_Data_0();
}
void?SMI_Idle()
{
???unsigned?char?i;
???for(i=0;i<32;i++)
????SMI_Data_1();
}
/*********************************************
通過SMI讀取寄存器內(nèi)容
PHYADDER是PHY地址為0,1,2,3,4這里第一個以太網(wǎng)口為0
REGADDER為PHY的寄存器地址return一個16位數(shù)據(jù)
*********************************************/
unsigned?int?SMI_read(unsigned?char?PHYADDERunsigned?char?REGADDER)
{
????unsigned?int?valuei;
SMI_Idle();
SMI_Start();
SMI_R_opcode();
SMI_adder_reg(PHYADDER);
SMI_adder_reg(REGADDER);
MDIO?=?1;
SMI_R_TA();
for(i=0;i<16;i++)
{
??value=value<<1;
??MDC=0;
??if(MDIO==1)value=value|0x0001;
??s_nop_();
??????MDC=1;
??????s_nop_();
}
SMI_Idle();
return?value;
}
/*********************************************
通過SMI寫取寄存器內(nèi)容
PHYADDER是PHY地址為0,1,2,3,4這里第一個以太網(wǎng)口為0
REGADDER為PHY的寄存器地址寫一個16位數(shù)據(jù)
*********************************************/
void?SMI_write(unsigned?char?PHYADDERunsigned?char?REGADDERunsigned?int?value)
{
????unsigned?int?i;
SMI_Idle();
SMI_Start();
SMI_W_opcode();
SMI_adder_reg(PHYADDER);
SMI_adder_reg(REGADDER);
SMI_W_TA();
for(i=0;i<16;i++)
{
??if(value&0x8000)SM
評論
共有 條評論