`
peizhiinfo
  • 浏览: 1424956 次
文章分类
社区版块
存档分类
最新评论

基于LPC2210的RTL8019AS以太网驱动系统设计(四)

 
阅读更多

基于LPC2210RTL8019AS以太网驱动系统设计终结篇

---------------------------------------------------------

Author :tiger-john
WebSite :blog.csdn.net/tigerjb

Email jibo.tiger@gmail.com

开发环境 硬件环境:LPC2200

操作系统:UC/OS-II操作系统

编译环境:ADS1.2

Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我3Q

---------------------------------------------------------

.页面切换子模块

7.1页面切换子模块功能

根据上一层模块传入的页号来切换页。RTL8019AS中的NE2000寄存器中用户可用于切换的页面有012三页,第四页为芯片保留。

7.2页面切换子模块组成

1> 读取命令寄存器(CR)中的值

temp=ReadFromNet(0);

2> 把命令寄存器中的PS1,PS0位清零,在清零过程中不能修改其他位,并且不能置TXP位。

// 命令寄存器中的PS1,PS0位清零注意txp位不能要

temp=temp&0x3B ;

3> 把页号写入CR命令寄存器中的PS1,PS0

pagenumber=pagenumber <<6;

temp=temp | pagenumber;

WriteToNet(0,temp);

7.3页面切换子模块接口

页面切换子模块调用了写数据模块

Ø 写数据子模块:将数据写入RTL2019AS芯片中

7.4页面切换子模块程序

/****************************Copyright(c)********************

** 西安邮电学院

** graduate school

** XNMS实验室

** Author:冀博

** Time:2011221

** http://blog.csdn.net/tigerjb

**

**--------------FileInfo---------------------------------------------------------------------

****************************Copyright(c)******************** /

/**********************************************************

**函数原型: void page(uchar pagenumber)

**入口参数 uchar pagenumber: 要切换的页

** 值:

** 明: 选择页,可选择0,1,2三页,第四页ne000兼容芯片保留

**********************************************************/

void page(uint8 pagenumber)

{

uint8 temp;

temp=ReadFromNet(0);

temp=temp&0x3B ;//注意txp位不能要

pagenumber=pagenumber <<6;

temp=temp | pagenumber;

WriteToNet(0,temp);

}

.设置芯片物理地址子模块

8.1设置芯片物理地址子模块功能
将物理地址写入实际地址寄存器(PAR0~PAR5)中并且用这些物理地址来对目标地址数据包进行比较,来确定接收或者拒绝接收数据包。

8.2设置芯片物理地址子模块接口

设置芯片物理地址子模块调用了写数据子模块

Ø 写数据子模块:将数据写入RTL2019AS芯片中

8.3设置芯片物理地址子模块程序

/****************************Copyright(c)********************

** 西安邮电学院

** graduate school

** XNMS实验室

** Author:冀博

** Time:2011221

** http://blog.csdn.net/tigerjb

**

**--------------FileInfo---------------------------------------------------------------------

****************************Copyright(c)******************** /

/**********************************************************

**函数原型: void SetMacID()

**入口参数: *mac_ptr

** 值:

** 明: 设置芯片物理地址,物理地址已经存储在程序空间内

**********************************************************/

void SetMacID(uint8 * mac_ptr)

{

//MAC地址写入MY——MAC——ID

page(1);

WriteToNet(1 , *mac_ptr);

mac_ptr++;

WriteToNet(2 , *mac_ptr);

mac_ptr++;

WriteToNet(3 , *mac_ptr);

mac_ptr++;

WriteToNet(4 , *mac_ptr);

mac_ptr++;

WriteToNet(5 , *mac_ptr);

mac_ptr++;

WriteToNet(6 , *mac_ptr);

//设置完后将页面转换到页面0

page(0);

}

.写数据子模块

Ø LPC2210开发板中RTL8019ASCPU的存储空间上映射的基地址为0X83400000,因此以太网的基地址为0X83400000

Ø LPC2210 通过16 DMA 方式实现对RTL8019AS 双口RAM的访问,每次传输2字节(16比特数据)

9.1写数据子模块功能

根据传入的16bit DataAdd,将16bit Data写入以太网基地址0X83400000+Add处。

9.2写数据子模块程序

/****************************Copyright(c)********************

** 西安邮电学院

** graduate school

** XNMS实验室

** Author:冀博

** Time:2011221

** http://blog.csdn.net/tigerjb

**

**--------------FileInfo---------------------------------------------------------------------

****************************Copyright(c)******************** /

/**********************************************************

* 名称: WriteToNet()

* 功能: 把数据写入RTL8019AS

* 入口参数: ADDR 写入地址

WRITEDATA 写入数据

* 出口参数:无

**********************************************************/

void WriteToNet(uint8 ADDR_16,uint16 WRITEDATA)

{

(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16))=WRITEDATA;

}

.读数据子模块

10.1读数据子模块功能:

根据传入的ADDR从以太网RTL8019AS基地址0X83400000+ADDR处读出2字节(16bit)数据

10.2读数据子模块程序

/****************************Copyright(c)********************

** 西安邮电学院

** graduate school

** XNMS实验室

** Author:冀博

** Time:2011221

** http://blog.csdn.net/tigerjb

**

**--------------FileInfo---------------------------------------------------------------------

****************************Copyright(c)********************

/**********************************************************

*名称 : ReadFromNet()

*功能 : RTL8019AS把数据读出

*入口参数: ADDR 读出地址

*出口参数: READDATA 读出数据

**********************************************************/

uint16 ReadFromNet(uint8 ADDR_16)

{

uint16 temp;

temp=(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16));//0x83400000

return (temp);

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics