• 大小: 8KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: RTL8305  stc的串口  

资源简介

RTL8305的寄存器读写以及stc的串口设置

资源截图

代码片段和文件信息

#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输入数据0
MDIO在MDC的下降沿输出
***************************/
void SMI_Data_0()
{
MDC=0;
//s_nop_();
MDIO=0;
s_nop_();
MDC=1;
s_nop_();
}
/***************************
MDIO输入数据1
***************************/

void SMI_Data_1()
{
MDC=0;
//s_nop_();
MDIO=1;
s_nop_();
MDC=1;
s_nop_();
}

/***************************
MDIO输入数据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写入数据,仅byte的低5位bit
PHYADDER是PHY地址为0,1,2,3,4这;第一个以太网口为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读取寄存器内容
PHYADDER是PHY地址为0,1,2,3,4这里第一个以太网口为0
REGADDER为PHY的寄存器地址return一个16位数据
*********************************************/
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写取寄存器内容
PHYADDER是PHY地址为0,1,2,3,4这里第一个以太网口为0
REGADDER为PHY的寄存器地址写一个16位数据
*********************************************/
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

评论

共有 条评论