5 软件设计
对网卡的编程就是对网络接口控制器(NIC)RTL8019AS中各种寄存器进行编程控制,从而完成数据分组的正确发送和接收。所有程序采用Franclin C51语言编制,具有可读性强,移植性好,开发周期短的特点。即使在代码的使用效率上,也完全可以和汇编语言相比。
5.1 主程序
主程序可分为网络通讯和串行通讯两部分。网络通讯过程又可分为网卡初始化、发送控制和接收控制等三部分。主程序框图如图2所示。

5.2 网卡初始化过程
对网卡的初始化就是对相关寄存器进行初始化。这些寄存器包括CR、DCR、RBCR、PSTART、PSTOP、
ISR、IMR、PAR0-PAR5、MAR0-MAR5、CURR、TCR和RCR等。初始化过程如下:
(1)CR=0x21:选择页0寄存器,将NIC处于离线状态;
(2)DCR=0x88:8位内存访问,正常工作方式;
(3)RBCR0=0,RBCR1=0:远程DMA操作时传递字节数清零;
(4)RCR=0xc0:接收到的帧存入缓冲环;
(5)TCR=0xe2:环路测试状态;
(6)PSTART=0x4c,PSTOP=0x80:构造缓冲环;
(7)ISR=0xff:中断寄存器清零;
(8)IMR=0x00:屏蔽所有的中断;
(9)CR=0x61:选择页1;
(10)设置网卡地址PAR0-PAR5;
(11)设置多址寄存器MAR0-MAR5;
(12)CURR=0x4d:初始化当前页寄存器;
(13)CR=0x22:选择页1,正常工作状态;
(14)TCR=0XE0:发送器正常工作状态;
5.3 发送控制过程
在网络中,帧传输的过程就是发送方将待发送的数据按帧格式要求封装成帧,然后通过网卡发送到网络的传输线上。发送程序框图如图3所示。

5.4 接收控制过程
帧的接收过程分为两步:第一步由本地DMA将帧存入接收缓冲环中;第二步由远程DMA将接收缓冲环中的帧读入内存。即将网络上的数据帧接收并缓存在网卡的接收缓冲环中,然后由主机程序将缓存在缓冲环中的帧读走并存入内存中。
帧的接收工作由网卡自动完成,只需对与相关的寄存器如PSTART、PSTOP、CURR和BNRY进行适当的初始化即可。
帧读入较帧接收要复杂一些。首先必须初始化相应的寄存器RSAR、RBCR,然后再启动远程DMA读操作和主机程序的读端口操作。