新闻中心

EEPW首页 > 网络与存储 > 设计应用 > 基于AX88796B的网络接口模块的设计与实现

基于AX88796B的网络接口模块的设计与实现

作者:重庆邮电大学 崔巍 时间:2008-07-28 来源:今日电子 收藏

  2 AT91r40008与接口电路

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

  电路如图4所示。


图4 硬件连接原理图

  的驱动程序设计

  的网卡驱动程序是处理器CPU和网卡硬件的接口,网卡驱动程序主要包括以下几部分:网卡的初始化;数据包的接收和发送;中断处理子程序。

  1 网卡初始化

  在网卡的初始化过程中除了完成对相关寄存器的定义与赋值外,还要完成对接收缓冲环的构造。AX88796B的所有寄存器除了数据端口寄存器外都是8位数据宽度。数据端口寄存器可以通过配置DCR寄存器中的WTS设置成8位或16位宽。AX88796B将偏移量为01h~0fh的寄存器分为4页(Page0~Page3)进行操作。与NE2000兼容的寄存器只有3页(Page0~Page2)。初始化需要设置页0与页1的相关寄存器,页2的寄存器是只读的,不可以设置,页3的寄存器不是NE2000兼容的,不用设置。初始化函数主要要完成以下诸项工作。

  /*AX88796B_init*/

  /*调用复位子程序对AX88796B进行复位。有两种复位方式:一是硬件复位,通过拉高拉低RESET引脚达到复位AX88796B的目的;二是软件复位,从0x1f端口读数据使AX88796B复位。*/

  2 数据包的发送和接收

  判断AX88796B是否接收到新的数据包有两种方式:轮循和中断。单片机用轮循方式较多。为了提高CPU性能和实时性要求,这里采用中断方式。当网卡接收到新数据包时进入中断,首先判断CPR是否等于BNRY,若相等,则表示接收缓冲区已被存满,则停止接收数据包,而不会覆盖旧的数据;若不等,则将接收缓冲区中待读取的数据包的起始地址写入RSAR[0,1]寄存器,数据包的开始4字节写入RBCR[0,1]寄存器,并启动远端DMA读命令,通过读取4个信息字节得到待读取数据包的长度、接收状态和下一个将被读的页的指针信息。然后通过远端DMA读命令,将数据包从网卡SRAM中读入CPU内存中,并更新读页指针寄存器BNRY,CPU每从网卡内存中读走一页数据,BNRY便加一,这需要通过程序实现。网卡通过CPR将接收到的数据包写入接收缓冲区,每写完一页,CPR将自动加一,当加到最后的空页(这里是PSTOP=0x80)时,CPR将自动恢复为接收缓冲区的首页(PSTART=0x4c)。网卡接收关键性代码如下:





  CPU通过远端DMA通道将网卡发送缓冲区的起始地址和要发送的字节数分别写入RSAR[0,1]和RBCR[0,1],然后启动远端DMA写命令即可将数据包写入网卡内存,此后将字节数写入TBCR[0,1]寄存器,启动发送命令就可将数据包发送到网络上。网卡发送的关键代码如下:

  3 中断处理

  中断的处理和CPU关联密切,在软件中必须先配置好网卡的片选线和中断信号线。数据包到来时,网卡将其保存在SARM中,同时触发一个中断。处理器接收到中断信号后,进入中断处理程序。在中断处理程序中读AX88796B的中断状态寄存器ISR来判断是什么样类型的中断,如果读出的值的最低位为1,则代表是数据包接收中断,这时需触发一个消息,进入到读网卡函数。读网卡函数的功能是将网络数据包从网卡的内存接收到主机中,接着向上层传递,进行相应的处理。

  一个报文的发送过程就是通过调用写网卡函数,将报文发送到网卡的内存中去。然后将AX88796的控制寄存器(CR)的发送位TXP(Transmit packet)位置1,即将报文发送。

  中断处理子程序的关键代码:

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭