基于DM9000A的网络接口设计
单片机数据发送的具体程序如下所示:


3.3 数据接收
可以采用中断的方式来完成对数据的接收。当DM9000A接收到数据并通过CRC校验后,将产生一个接收中断信号,单片机在中断发生时可以将整个数据包读出,并按照使用的网络协议来处理数据。DM9000A内存的0C00h~3FFFh是数据接收缓冲区。芯片在接收到数据包后,会在数据包的前面自动加上4个字节的数据,接收数据包时首先要读取这4个字节来确定数据包的状态,第一个字节“01H”表示接下来的是有效数据包,且数据保存在接收缓冲区中;若为“00H”则表示没有数据包,中断程序可以直接返回;若为其他值则表示出现异常,需要重新初始化芯片。第2个字节则为这个数据包的相关信息,其格式与RSR寄存器的含义一致,可以用来判断本数据包是否出现异常和出现了什么异常。第3和4个字节是存放这个封包的长度大小(不包括前4个字节),在读取数据包时需要用这个长度来进行接收控制。
同数据发送类似,单片机从DM9000A中读取数据也只需要读取MRCMD寄存器中的值即可,读取一个字节数据后,芯片自动将下一个字节数据移到这个寄存器中。数据包的接收过程分2步:先读取MRCMDX寄存器,判断是否存在正确的数据包;如有数据包,根据数据包的长度信息依次读取读MRCMD寄存器,将整个数据包读取出来。其中第1步需要读取两次MRCMDX寄存器,因为第1次读到的值总为0。单片机数据接收程序如下:


评论