Windows CE6.0的DM9000A流接口驅(qū)動(dòng)開(kāi)發(fā)
3 DM9000A流驅(qū)動(dòng)程序的實(shí)現(xiàn)
DM9000A支持IEEE802.3x全雙工模式流控制,提供IP/TCP/UDP校驗(yàn)、產(chǎn)生及檢測(cè)功能;內(nèi)部集成10/100M自適應(yīng)PHY,同時(shí)具有13 KB的接收緩沖區(qū)和3 KB的發(fā)送緩沖區(qū),支持8位和16位數(shù)據(jù)接口。
S3C6410與DM9000A的接口電路如圖3所示。在流驅(qū)動(dòng)程序中是將DM9000A內(nèi)部寄存器地址空間映射到S3C6410內(nèi)部劃分的SROM的BANK1空間上,物理基地址是0x18000000。在Windows CE 6.0系統(tǒng)下對(duì)硬件寄存器的訪問(wèn)首先需要進(jìn)行地址映射,將寄存器物理地址映射為系統(tǒng)可訪問(wèn)的虛擬地址。最為簡(jiǎn)單的方法就是從系統(tǒng)目錄(C:\wince600\platform\studk6410\src\inc)下找到基于OEM層的地址配置表(oemaddrt ab_cfg.inc),從文件中找到所使用的SROM的BANK1的虛擬地址,在驅(qū)動(dòng)程序中直接訪問(wèn)該地址(如同訪問(wèn)芯片的寄存器地址)。
流接口驅(qū)動(dòng)的實(shí)現(xiàn)將集中體現(xiàn)在對(duì)初始化接口函數(shù)和I/O控制接口函數(shù)的操作,函數(shù)主要代碼如下:
其中,0x94000000正是從地址配置表文件中獲取的虛擬地址,dwEthernetIOBase經(jīng)映射后則如同DM9000A內(nèi)部寄存器的首地址。由于硬件線路上是使用S3C6410的地址線中的位2作為DM9000A的數(shù)據(jù)/地址訪問(wèn)信號(hào)(高電平為訪問(wèn)數(shù)據(jù)),故以“dwEthernetIOBase+4”作為訪問(wèn)數(shù)據(jù)的基地址。
其中,參數(shù)Handle為流接口設(shè)備的句柄;dwIoControICode為I/O控制碼,可以根據(jù)需要自由定義;pInBuf為傳入數(shù)據(jù)指針;nInBufSize為數(shù)據(jù)長(zhǎng)度。除了初始化函數(shù)和I/O控制函數(shù)外的其他流驅(qū)動(dòng)接口函數(shù)無(wú)需任何處理,直接給出返回值即可。
評(píng)論