S3C6410X没有专门的MAC控制器,通过SROM控制器访问DM9000A网卡芯片。图13-5是DM9000A与S3C6410X的电路原理。
图13-5 DM9000A与S3C6410X的电路原理
本节通过分析Linux内核中的DM9000A驱动程序来介绍网络设备驱动程序的基本开发流程。首先定义并注册平台设备:
在设备的检测函数dm9000_probe中主要完成网络设备初始化,并获取网络设备的平台资源信息,根据这些信息申请中断、映射存储器地址等。地址映射完毕,dm9000_probe会对DM9000的版本进行识别,并进行相应的参数设置,最后使用register_netdev函数注册DM9000网络设备驱动。dm9000_probe代码如下:
DM9000A的网络设备操作接口定义下:
dm9000_open函数中申请了中断处理:(www.xing528.com)
if(request_irq(dev->irq,dm9000_interrupt,IRQF_SHARED,dev->name,dev))
return-EAGAIN;
这里分析两个最重要的函数。第一个是发送函数dm9000_start_xmit。发送时先将数据写入TX SRAM中,然后将包长写入TX包长度寄存器,最后将TX控制寄存器的0位设置为1,请求发送。复位后发送起始地址是00H,当前的包是Ⅰ包。DM9000A的TX SRAM中可以按照顺序同时存储两个发送包,分别为Ⅰ包和Ⅱ包。Ⅰ包发完后继续发Ⅱ包。
包发送完毕将引起中断,并调用dm9000_tx_done函数完成后处理。
第二个重要的函数是中断处理函数dm9000_interrupt:
DM9000A的接收缓冲(RX SRAM)是一个环形的数据结构。系统复位后RX SRAM的开始地址是0x0C00。每个接收到的数据包包含一个4B的包头、包数据以及CRC校验值。4B的头数据包括01h、状态、字节长度低位、字节长度高位。注意每个包的开始地址必须按照操作模式(如8位、16位、32位)对齐。dm9000_rx函数的处理过程如下:
至此DM9000A的收发过程介绍完毕。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。