Windows CE6.0的DM9000A流接口驱动开发
3 DM9000A流驱动程序的实现
DM9000A支持IEEE802.3x全双工模式流控制,提供IP/TCP/UDP校验、产生及检测功能;内部集成10/100M自适应PHY,同时具有13 KB的接收缓冲区和3 KB的发送缓冲区,支持8位和16位数据接口。
S3C6410与DM9000A的接口电路如图3所示。在流驱动程序中是将DM9000A内部寄存器地址空间映射到S3C6410内部划分的SROM的BANK1空间上,物理基地址是0x18000000。在Windows CE 6.0系统下对硬件寄存器的访问首先需要进行地址映射,将寄存器物理地址映射为系统可访问的虚拟地址。最为简单的方法就是从系统目录(C:\wince600\platform\studk6410\src\inc)下找到基于OEM层的地址配置表(oemaddrt ab_cfg.inc),从文件中找到所使用的SROM的BANK1的虚拟地址,在驱动程序中直接访问该地址(如同访问芯片的寄存器地址)。
流接口驱动的实现将集中体现在对初始化接口函数和I/O控制接口函数的操作,函数主要代码如下:
其中,0x94000000正是从地址配置表文件中获取的虚拟地址,dwEthernetIOBase经映射后则如同DM9000A内部寄存器的首地址。由于硬件线路上是使用S3C6410的地址线中的位2作为DM9000A的数据/地址访问信号(高电平为访问数据),故以“dwEthernetIOBase+4”作为访问数据的基地址。
其中,参数Handle为流接口设备的句柄;dwIoControICode为I/O控制码,可以根据需要自由定义;pInBuf为传入数据指针;nInBufSize为数据长度。除了初始化函数和I/O控制函数外的其他流驱动接口函数无需任何处理,直接给出返回值即可。
评论