您的位置 首页 ADAS

根据ARM LPC2210的以太网RTL8019AS驱动体系规划

Author:tiger-johnWebSite:blog.csdn.net/tigerjbEmail:jibo.tiger@gmail.com开发环境硬件环境:LPC2200操作系统:UC/OS-I

Author:tiger-john

WebSite:blog.csdn.net/tigerjb

Email:jibo.tiger@gmail.com

开发环境硬件环境:LPC2200

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

编译环境:ADS1.2

Update-Time: 2011年2月28日周四

Tiger声明:自己轻视直接仿制自己文章而不加出处的个人或集体,

但不排挤他人转载tiger-john的文章,仅仅请您注明出处并和自己

联络或留言给我。3Q

———————————————————

一.体系硬件概述

1.1.ARM LPC2210芯片简介

LPC2210是Philips公司推出的微处理器,带有16 KBRAM,76个通用I/O口,12个独立外部中止引脚,集成有8通道的10位A/D,能够依据芯片规划杂乱的体系。

1.2.RTL8019AS芯片简介

?RTL8019AS是台湾Realtek半导体公司出产的以太网操控器,其功用包含:支撑EthernetII和IEEE802.3规范;支撑8/16位数据总线;内置16 KWord的SRAM;全双工,收发一起到达10 Mb/s;支撑BNC,AUI,UTP介质。RTLS019AS可供给100脚的TQFP封装,减少了PCB面积,更适合于嵌入式体系

1.3.HR901170A芯片简介

HR901170A是汉仁电子有限公司出产的RJ45接口衔接器(带网络变压器/滤波器),该衔接器满意IEEES02.3和IEEE902.3ab规范,能够较好地按捺电磁搅扰。经过HR901170A体系就能够衔接到以太网上。

注:RTL8019AS与网络介质之间的衔接由Rj45接头HR901170A完结。

二RTL8019AS芯片作业原理

2.1RTL8019AS存放器及其映射方法

?RTL8019AS存放器选用内存映射的方法。映射地址依据详细的硬件衔接方法不同而不同。在LPC2210开发板中RTL8019AS在CPU的存储空间上映射的基地址为0X83400000。

?LPC2210经过16位DMA方法完结对RTL8019AS双口RAM的拜访,别的运用P0.8操控RTL8019AS芯片复位,运用以太网接口时有必要将P0.8设置为输出形式,而且将跳线器JP8_NET_RST短接。RTL8019AS芯片中的中止输出与P0.9(EINT3)相连,当需求运用RTL8019AS中止时有必要将P0.9设置为EINT3功用,而且将跳线器JP8_NET_INT短接。

2.2RTL8019AS内部结构及作业原理

1>RTL8019AS芯片内部具有一个16Kbytes的双口RAM作为数据FIFO,它从逻辑上可划分为64个256字节的页,每一个页面包含16个存放器,每个存放器均是8位。在不同的页面下,同一个端口对应不同的存放器。

2>一般将RAM的前12页(即0X4000~0X4bff)存储区作为发送缓冲区;后52页(即0x4c00~0x7fff)存储区作为接纳缓冲区;页的地址便是地址的高8位(即0x40~0x4b;0x4c~0x7f);第0页叫Prom页,只要32字节,地址为0x000~0x001f,用于存储以太网物理地址。

阐明:

?存放器和内置RAM是网卡功用完结的载体,驱动程序也是经过对它们的操作完结CPU所指令的使命。驱动程序所触及的存放器首要在Page0和Page1。

?至于内置RAM,在Jumper形式下咱们只需求关怀其收发缓存部分。偏移地址从0x4000开端至0x7FFF的16KB RAM区域构成8019的收发缓存,它以256字节为单位划分为64页(Page),页地址为0x40 ~ 0x7F,发送和接纳缓存所分配的页数能够由驱动程序设定。一种比较常见的分配方法为[0x40,0x4C)用作发送,[0x4C,0x80)用作接纳,这也是本例所选用的装备。

3>接纳和发送数据包是经过DMA读写RTL8019AS内部的16K B RAM,它是双端口的RAM,即有两套总线衔接到该RAM。

如图2:

?一套总线是RTL8019AS读或写该RAM,即本地DMA;

?另一套总线是LPC2210读或写该RAM,即长途DMA。

4>本地DMA大部分作业由RTL8019AS主动完结,驱动程序只需求在初始化RTL8019AS时设置缓冲环的巨细(最大不超越64KB),即存放器PSTRT和PSTOP的值,一起使PSTART=BNRY(鸿沟存放器)=CURR+1(当时页面指针存放器)。

5>长途DMA操作由外部微处理器完结,RTL8019AS有长途读(Remote Read),长途写(Remote Write)和包发送(Send Packet)三种作业形式,由指令存放器(CR)中的RD0,RD1和RD2位操控。其间长途读和长途写的作业类似,都是先赋值长途DMA的开端地址存放器(RSAR0,RSAR1)和长途DMA字节计数器(RBCR0,RBCR1),然后在RTL8019AS的长途DMA端口读写即可。包发送操作用于数据发送,只需求发送一个包发送指令,就能够在RTL8019AS的长途DMA端口读取RAM中接纳的数据。当履行这个指令时,RTL8019AS就主动设置了开端地址存放器和字节计数器,鸿沟存放器(BNRY)指向下一个数据帧。

————————————————————————————

关于详细的存放器功用请我们检查RTL8019AS的数据手册。

三以太网驱动体系规划阐明

3.1以太网驱动体系概述

以太网RTL8019AS驱动体系的内容是完结对芯片初始化,接纳数据包和发送数据包模块的编写。发送数据包时,驱动程序把要发送的数据按指定格局写入芯片并发动发送指令,RTL8019AS会主动把数据转换成物理帧格局在物理信道上传输。反之,当接纳数据报时,RTL8019AS收到物理信号后将其还原成数据,按指定格局存放在RAM中,以便主机程序取用。驱动程序经过操控RTL8019AS内部存放器以及DMA端口,来完结芯片初始化,接纳数据报和发送数据报的使命。

3.2 RTL8019AS以太网驱动体系的组成

?芯片初始化模块:初始化模块是针对以太网RT8019AS进行的初始化设置,使其能正常芯片复位,设置芯片存放器及发动芯片。

?发送数据报模块:一切的数据发送都要经过该模块发送

?接纳数据报模块:查询是否有新数据包并接纳进缓冲区

?写数据子模块:把数据写入RTL8019AS芯片中

?读数据子模块:从RTL8019AS中把数据读出

?设置芯片物理地址子模块:将物理地址写入RTL8019AS(PAR0~PAR5)存放器中。

?页面切换模块:页面切换功用,可挑选0,1,2三页,第四页作为芯片保存。

四.芯片初始化模块

4.1芯片初始化模块的功用

初始化LPC2210与设备相关的操控管脚和初始化RTL8019AS相关操控存放器

4.2芯片初始化模块的组成

1>挑选引脚:

运用P0.8引脚操控RTL8019AS芯片复位时,要将P0.8设置为输出形式

2>复位芯片

?设置P0.8为输出高电平,操控RTL8019AS硬件复位

?向RTL8019AS的0x1f号存放器写入00使RTL8019AS软件复位。

3>使RTL8019AS芯片中止

装备指令存放器(CR):装备CR存放中的RD2,RD1,RD0三位为100使DMA为中止形式,装备STA,STP位为01。使8019芯片中止,为进行存放器设置做准备。

4>设置RTL8019存放器

设置RTL8019AS芯片存放器,首要完结对以下几个存放器的初始化:

?RBCR0,RBCR1:装备长途DMA字节计数存放器

?PSTART:装备接纳缓冲区的开端页地址

?PSTOP:装备接纳缓冲区的完毕页的地址

?TPSR:装备发送缓冲区的开端地址

?BNRY:装备鸿沟存放器(读指针)

?CURR:装备当时的接纳完毕页地址(写指针)

1)设置长途DMA字节计数存放器(RBCR0,RBCR1):初始化长途DMA字节计数器为0

2)设置接纳装备存放器(RCR)和传输装备存放器(TCR)

在装备存放器时,要与外部网络断开(因而设置接纳装备存放器的MON位,和传输装备存放器的LOOPBACK,与外网断开)。

3)设置数据装备存放器(DCR):设置FT1,FT0位为10进行FIFO的挑选;设置ARM位为0,使其不发送指令包;设置LS位为1,使其为正常形式;LAS位有必要为0;设置BOS位为1,使其为大端格局(即高字节在低地址中);设置WTS位为1,使其为字长度的DMA传送(16字节DMA传送)

4)初始化接纳缓冲区容量为:0x4c~0x7f(PSTART=0X4C,PSTOP=0x80)共52个页。

?设置页面开端存放器(PSTART):初始化页面接纳缓冲环的开端地址为0x4c。

?设置页面中止存放器(PSTOP):初始化页面接纳缓冲环的完毕地址为0X80。

5)初始化发送缓冲区容量为:0x40~0x4b(TPSR=0X40,BNRY=0X4C)共12页,可存储两个最大以太网数据包。(每一页256字节,256*12=3072,而一个以太网最大数据包为1518)。

?设置页面鸿沟存放器(BNRY读指针):初始化页面最终一次页面接纳缓冲环的地址为0X4C。

?设置页面传输开端存放器(TPSR):初始化传输包的页面开端地址为0x40。

6)初始化中止状况存放器和中止屏蔽存放器。

?设置中止状况存放器(ISR):铲除一切中止标志位。

?设置中止答应存放器(IMR):初始化使能OVW(溢出中止)和PRX(接纳包无过错中止).

7)设置当时页面存放器(CURR):设置当时页面地址为0x4d

注:该存放器指出首要接纳缓冲器页面地址。这个存放器用来对数据包的接纳(为写页指针)。

8)设置组播地址存放器(MR0~MR7):初始化组播地址为0。

阐明:组播地址存放器用于供给为CRC逻辑供给,组播地址的过滤位。

9)设置芯片物理地址:

调用写数据子模块将实践地址写入MAC地址存放器(PAR0~PAR05)中。

这些存放器用于记录本以太网节点的MAC地址,并用于比照接纳包的方针地址是否共同而决议接纳仍是抛弃。

10)设置传输装备存放器(TCR)和接纳装备存放器(RCR)为正常形式,与外部网络衔接

5>设置芯片发动

6>装备中止状况存放器(ISR)铲除一切中止标志位

4.3芯片初始化模块的接口

芯片初始化模块调用了写数据子模块,页面切换子模块和设置芯片物理地址子模块

?设置芯片物理地址子模块:将物理地址写入RTL8019AS芯片中。

?写数据子模块:将数据写入RTL8019AS芯片中

?页面切换子模块:可挑选Page0,Page1,Page3三个页面。

4.3芯片初始化模块程序

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

**西安邮电学院

**graduate school

**XNMS实验室

**Author:冀博

**Time:2011年2月21日

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

**

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

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

**函数原型:voidInitNic()

**进口参数:无

**返回值:无

**阐明:对芯片的作业存放器进行设置,各个存放器的用法可参阅文档和

**络芯片的数据手册

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

void InitNic(uint8 num)

{

uint8i;

uint8j;

//使P0.8引脚为输出

IODIR=IODIR|NET_RST;

//向P0.8引脚写1,硬件复位

IOCLR=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

IOSET=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

IOCLR=NET_RST;

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

//软件复位

WriteToNet(0x1f,0x00);

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

//使芯片处于中止形式,这时进行存放器设置

WriteToNet(0x00,0x21);

//延时10毫秒,保证芯片进入中止形式

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

page(0);

//设置长途DMA开端地址存放器(RBCR0,RBCR1)为0

WriteToNet(0x0a,0x00);

WriteToNet(0x0b,0x00);

//设置接纳装备存放器(RCR)和传输存放器(TCR)

WriteToNet(0x0c, 0xe0);

WriteToNet(0x0d, 0xe2);

//设置数据装备存放器DCR

WriteToNet(0x0e,0xcb);

//初始化承受缓冲区容量为0X4C~0X7F(PSTART=0X4C,PSTOP=0X80)

WriteToNet(0x01,0x4c);

WriteToNet(0x02,0x80);

//初始化发送缓冲区容量为0X40~0x4b(TPSR=0X40,bnry=0x4c)

WriteToNet(0x03,0x4c);

WriteToNet(0x04,0x40);

/*初始化中止存放器(ISR和IMR)铲除一切中止标志位,使能OVW和PRX中止

*/

WriteToNet(0x07,0xff);

WriteToNet(0x0f,0x11);

//初始化当时页面存放器CURR=BNRY+1

page(1);

WriteToNet(0x07,0x4d);

//初始化组播地址存放器(MR0~MR5)

WriteToNet(0x08,0x00);

WriteToNet(0x09,0x00);

WriteToNet(0x0a,0x00);

WriteToNet(0x0b,0x00);

WriteToNet(0x0c,0x00);

WriteToNet(0x0d,0x00);

WriteToNet(0x0e,0x00);

WriteToNet(0x0f,0x00);

//将物理地址写入MAC(PAR0~PAR5)存放器中

SetMacID(NetPort[num].My_Mac);

page(0);

/*设置传输装备存放器(TCR)和接纳装备存放器(RCR),将芯片设置成正常形式,跟外部网络衔接

*/

WriteToNet(0x0c,0xcc);

WriteToNet(0x0d,0xe0);

//发动芯片开端作业

WriteToNet(0x00,0x22);

//铲除一切中止标志位

WriteToNet(0x07,0xff);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/274964.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部