新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机实现串口协议的网络化

单片机实现串口协议的网络化

作者: 时间:2011-08-02 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/172586.htm

  2.2 DMA数据通道

  RTL8019AS内部划分为远程DMA(RemoteDMA)通道和本地DMA(LocalDMA)通道两个部分。本地DMA完成控制器与网线的数据交换,远程DMA完成主处理器与网卡数据交换。主处理器收发数据只需对远程DMA操作。接收数据时,RTL8019AS接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区,收满一帧后,以中断或寄存器标志的方式通知主处理器,主处理器通过远程DMA通道将其读出。当主处理器要向以太网发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;RTL8019AS在完成了上一帧的发送后,再完成此帧的发送。

  所谓的DMA就是直接内存访问(DirectMem2oryAccess)。普通的寻址方式是给出一个地址,然后取出对应的值。而在DMA方式下,我们指定一个寄存器地址,主机只要反复地读取或写入这个地址,就可以取出或写入大量的数据。网卡指定的远程DMA端口就是这个用途。设置好起始地址和读出的byte数后,我们反复读远程DMA端口,就可以将网卡里从网线收到的数据包,从0x400020x7fff的RAM区读出;反之,同样设置好起始地址和写入的byte数后,我们反复写远程DMA端口,就可以将数据发送到网卡的发送缓冲RAM中,然后发出发送的命令,就可以把数据包发送到网线中。

  2.3 网卡的初始化过程

  复位,使RSTDRV先高后低,注意每一步都要有100ms的延时,以确保复位成功。然后进行热复位,就是先后读、写网卡复位端口。

  使CR=0x21,停止芯片运行,选择页面0。

  使RBCR1=0;RBCR0=0,将远程DMA操作的传输字节数清零。

  使PSTART=0x46;PSTOP=0x80;BNRY=0x46,设置接收开始页面、结束页面和边界页面。

  使IMR=0x0,清除中断屏蔽寄存器。

  使RCR=0x08+0x04,设置接收配置寄存器,允许接收多址和广播报文。

  使TCR=0,设置发送配置寄存器,使用默认配置。

  使DCR=0x80+0x40+0x00,设置数据配置寄存器,选择字节DMA。

  使ISR=-1,设置中断状态寄存器,清除所有已有中断。

  使用DMA方式,从0000H2000BH中取得本网卡MAC地址。注意,MAC地址每个byte都是重复一遍存放的,所以只要取单数1、3、5等byte就可以了。

  使CR=0x61,选择页面1。

  将刚才取得的MAC地址放入PAR0-5中。网卡检查接收到的包是否和PAR里MAC值匹配,然后决定收下或丢弃。所以,也可以任意设置这个PAR值,来伪造自己的MAC值。

  将MAR02MAR7全部设为0xFF,允许接收所有的多址数据包。

  使CURR=0x47,设置当前接收页面为0x47。

  使CR=0x22,启动网卡芯片,开始接收和发送过程。

  2.4 网卡工作接收和发送过程

  网卡RAM是以256byte为一页,是按页存储的结构,16bit的RAM地址高8bit又叫页码。网卡的16k的RAM地址从0x400020x7fff,从页0x40到页0x7f,一共有64页。64页被接收和发送数据包用。接收和发送都是以页为最小的单位进行的。接收缓冲区需要定义,剩下的就可以作为发送缓冲区。

  接收缓冲区由两个寄存器决定:PSTART(PageStartRegister)和PSTOP(PageStopRegister)。设置了接收缓冲区之后,这个缓冲区就形成了一个循环队列。控制接收缓冲区的有两个寄存器CURR、BNRY。CURR是网卡写缓冲区的指针,指向当前要写的页;BNRY是读指针,指向用户已经读走的页。

  BNRY不可以超过CURR,否则没被用户读取的数据就被覆盖了。用户设置完了CURR以后,就不用管它,网卡接收到新的数据后,会自动修改它。用户读出数据后,要修改BNRY的值,以通知网卡该数据已经读出了。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭