繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> 嵌入式系统-博客 >> RTL8019驱动
RTL8019驱动
作者:   来源: 发表时间:2007-02-07  字号:  

首先,我们要编写一个读写8019寄存器的函数

 /*****************************************************************************************************
//函数名:uint8 readRegister(uint8 address)
//描述 :
//参数 : address-- 地址
//返回 : 寄存器的值
//其他 :
******************************************************************************************************/
uint8 readRegister(uint8 address)
{
uint8 temp;
uint8 addr;
uint32 rdata;
temp = address;
temp &= 0x1f; //only 5 bits
/*
addr = (~temp) ;
IO0SET = (IO0SET & 0xff00ffff) | (temp<<16);
IO0CLR = (IO0CLR & 0xff00ffff) | (addr<<16);*/
addr = (~temp) & 0x1f;
IO0SET = (IO0SET & 0xffe0ffff) | (temp<<16);
IO0CLR = (IO0CLR & 0xffe0ffff) | (addr<<16);

//IO1SET |=0x
IO1SET |=0x00ff0000;//IOCON;

//set to read
IO0CLR |=RTL8019_R;
IO0CLR |=RTL8019_RDY;
//change dir to input
IO1DIR &=0xff00ffff;//改变为输入
//read the data
rdata="IO1PIN";

//end read
IO0SET |=RTL8019_RDY;
IO0SET |=RTL8019_R;

//change dir to output
IO1DIR |=0x00ff0000;
return (uint8 )(rdata>>16);
}

/*****************************************************************************************************
//函数名:void writeRegister(uint8 address,uint8 val)
//描述 :
//参数 :
//返回 :
//其他 :
******************************************************************************************************/
void writeRegister(uint8 address,uint8 val)
{
uint8 temp;
uint8 addr;


temp = address;
temp &= 0x1f; //only 5 bits
/*
addr = (~temp);

IO0SET= (IO0SET & 0xff00ffff) | (temp<<16);

IO0CLR = (IO0CLR & 0xff00ffff) | (addr<<16);*/
addr = (~temp)& 0x1f;
IO0SET= (IO0SET & 0xffe0ffff) | (temp<<16);
IO0CLR = (IO0CLR & 0xffe0ffff) | (addr<<16);


//output data
IO1DIR |=0x00ff0000;
//IO1SET |= val<<16;
//IO1CLR |= (~val)<<16;

addr = (~val);
IO1SET = (IO1SET & 0xff00ffff) | (val<<16);

IO1CLR= (IO1SET & 0xff00ffff) | (addr<<16);


//active write
IO0CLR |=RTL8019_W;
IO0CLR |=RTL8019_RDY;
IO0SET |=RTL8019_RDY;
IO0SET |=RTL8019_W;

IO1SET |=0x00ff0000;//IOCON;
}

RTL的寄存器分为4页,可以通过设定CR(command Register)的PS1 PS0 来选择.

/*****************************************************************************************************
//函数名:void PageSelect(uint8 pageNum)
//描述 :
//参数 :
//返回 :
//其他 :
********************************************************************************************************/
void PageSelect(uint8 pageNum)
{
uint8 temp;

temp = readRegister(RTL8019_CR);
temp &= 0x3b;
temp |=(pageNum<<6);
writeRegister(RTL8019_CR,temp);
}

有了这3个函数,我们就只需要对RTL8019的寄存器进行设置就可以了.就是说,剩下的工作就是进行配置.下面有个比较典型的配置.

/*****************************************************************************************************
//函数名:void netInit(void)
//描述 :
//参数 :
//返回 :
//其他 :本程序参考过www.laogu.com ,zlg的TCP/IP,想对程序进行更深入的了解可以到他们的网站获取
********************************************************************************************************/
void netInit(void)
{
HardWareInit();
delayMs(200);
writeRegister(0x1f,0x00);
delayMs(200);
writeRegister(0x00,0x21);//stop net card
delayMs(200);

PageSelect(0);
writeRegister(0x0a,0x00);
writeRegister(0x0b,0x00);
writeRegister(0x0c,0xe0);//RCR
writeRegister(0x0d,0xe2);//TCR

PageSelect(0);
writeRegister(0x01,0x4c);//PStart
writeRegister(0x02,0x80);//PStop
writeRegister(0x03,0x4c);//Bnry
PageSelect(0);
writeRegister(0x04,0x40);//TPSR
writeRegister(0x07,0xff);//clear intrrput bit
writeRegister(0x0f,0x11);
//writeRegister(0x0e,0xcb);
writeRegister(0x0e,0xc8);///8bits DMA
PageSelect(1);
writeRegister(0x07,0x4d);//CURR
writeRegister(0x08,0x00);
writeRegister(0x09,0x00);
writeRegister(0x0a,0x00);
writeRegister(0x0b,0x00);
writeRegister(0x0c,0x00);
writeRegister(0x0d,0x00);
writeRegister(0x0e,0x00);
writeRegister(0x0f,0x00);
writeRegister(0x00,0x22);
writeMAC(NetPort[0].My_Mac);

PageSelect(0);
writeRegister(0x0c,0xcc);
////RCR 1 1 MON PRO AM AB AR SEP
//bit.5 MON = 1 这只检查地址,不存入缓冲
//bit.4 PRO = 1 所有包的目标MAC地址都接收
//bit.3 AM = 1 接收目标地址为组播地址
//bit.2 AB = 1 接收目标地址为广播地址
//bit.1 AR = 1 长度小于64字节的也接收
//bit.0 SEP = 1 包有接收错误也接收
writeRegister(0x0d,0xe0);
writeRegister(0x00,0x22);
//writeRegister(0x0f,0xff);//IMR
writeRegister(0x07,0xff);

}

经过这样的配置以后,连接上网络看到接收的LED在闪烁,说明已经可以接收到网络上的数据.下面要做的就是把数据从8019的ram中读入来.


!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: DIY-AT91RM9200开发板
  • 下一篇: IBM采用自成形材料绝缘 芯片提速三分之一

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网