新聞中心

        EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于DM9000AE的S3C2440嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計(jì)

        基于DM9000AE的S3C2440嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計(jì)

        作者: 時(shí)間:2012-12-10 來源:網(wǎng)絡(luò) 收藏


        本文引用地址:http://www.104case.com/article/153688.htm

        4.jpg
        圖4 NDIS模型的示意圖


        在windows CE下的驅(qū)動(dòng)程序就是這個(gè)模型而編寫,被編譯成動(dòng)態(tài)鏈接庫,以用戶態(tài)下的DLL文件形式存在。入口函數(shù)為DriverEntry()。DM9000驅(qū)動(dòng)的工作流程如圖5所示。

        NdisMInitializeWrapper()函數(shù)的作用是通知NDIS 一個(gè)小端口網(wǎng)卡正在被初始化,此函數(shù)在ndis.dll中提供。然后對(duì)NDIS40_MINIPORT_CHARACTERISTICS結(jié)構(gòu)體變量初始化,主要是設(shè)置一些回調(diào)函數(shù)(MiniportInitialize(),MiniportReset(),MiniportInterruptHandler(),MiniportISRHandler(),MiniportQueryInformation(),MiniportSetInformation(),MiniportSend()。接著就是通過NdisMRegisterMiniport()函數(shù)利用NDIS40_MINIPORT_CHARACTERISTICS這個(gè)結(jié)構(gòu)體向NDIS進(jìn)行注冊(cè)。再接下來就是MiniportInitialize(),在其中有NIC_DRIVER_OBJECT類的初始化,以及該類的EDriverInitialize()函數(shù)調(diào)用,在此函數(shù)中全面展開了dm9000的所有初始化操作。

        對(duì)DM9000的所有初始化操作的實(shí)現(xiàn)在dm9000.cpp文件中,主要也是通過DeviceEntry()這個(gè)函數(shù)來實(shí)現(xiàn)。在DeviceEntry()這個(gè)函數(shù)中只做了一件事:new了一個(gè)C_DM9000類的實(shí)例并return。緊接著就是C_DM9000的實(shí)例通過DeviceSetDefaultSettings();DeviceSetEepromFormat();DeviceRetriveConfigurations(hconfig);EDeviceValidateConfigurations()等等對(duì)進(jìn)行的一系列初始化操作。然后NIC_DRIVER_OBJECT指向DriverStart(),在DriverStart()中C_DM9000只進(jìn)行了一個(gè)非常簡(jiǎn)單但最重要的操作就是它在此DeviceEnableInterrupt()啟動(dòng)了中斷,接下來就是無休止的等待、接收、發(fā)送,DM9000就此開始工作了。

        5.jpg
        圖5 DM9000驅(qū)動(dòng)的工作流程


        在完成了驅(qū)動(dòng)程序之后,我們還需要在Platform.reg文件中對(duì)DM9000的注冊(cè)表項(xiàng)進(jìn)行相應(yīng)的設(shè)置:

        [HKEY_LOCAL_MACHINECommDM9000]
        DisplayName=Crystal DM9000 ISA Ethernet Controller
        Group=NDIS
        ImagePath=DM9000.DLL
        [HKEY_LOCAL_MACHINECommDM9000Linkage]
        Route=multi_sz:DM90001
        [HKEY_LOCAL_MACHINECommDM90001Parms]
        BusNumber=dword:0
        BusType=dword:0
        InterruptNumber=dword:3E
        IoBaseAddress=dword:D3000000
        RxMode=PIO
        NetworkAddress=00-01-33-33-33-33
        [HKEY_LOCAL_MACHINECommDM90001ParmsTcpIp]
        EnableDHCP=dword:0
        DefaultGateway=192.168.126.1
        UseZeroBroadcast=dword:0
        IpAddress=192.168.126.100
        Subnetmask=255.255.255.0
        DNS=192.168.126.1
        [HKEY_LOCAL_MACHINECommTcpipLinkage]
        Bind=multi_sz: ppp, DM90001

        的模塊與本地局域網(wǎng)連通,并分配MAC地址和IP地址,利用PC的ping程序,得到回應(yīng),說明ARP、IP、ICMP協(xié)議正常。利用自己編寫的windows的應(yīng)用程序,向模塊發(fā)送連接請(qǐng)求,模塊返回正確的應(yīng)答信息,TCP協(xié)議正常。

        5.結(jié)束語

        本文詳細(xì)介紹了三星公司ARM9芯片的網(wǎng)絡(luò)方案,在實(shí)際應(yīng)用中該運(yùn)行穩(wěn)定,能夠十分方便地實(shí)現(xiàn)系統(tǒng)的網(wǎng)絡(luò)互連。由于采用了高性能的工業(yè)級(jí)控制器,系統(tǒng)通訊快速可靠,具有很高的實(shí)時(shí)性。在日益普及的今天,此方案能夠給那些傳統(tǒng)不具備網(wǎng)絡(luò)通訊能力的設(shè)備進(jìn)行智能化改造,也適用于新型智能儀器儀表和工業(yè)自動(dòng)化系統(tǒng)設(shè)備的開發(fā),有著廣泛的應(yīng)用前景。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 永登县| 天等县| 门头沟区| 云梦县| 嘉兴市| 阳东县| 五大连池市| 荣昌县| 枣强县| 浪卡子县| 镇赉县| 和平区| 墨竹工卡县| 吉林市| 炎陵县| 越西县| 淳化县| 米林县| 荣昌县| 林州市| 泌阳县| 随州市| 确山县| 肥乡县| 临汾市| 曲松县| 信宜市| 镇江市| 唐山市| 翁源县| 西充县| 琼海市| 明光市| 江达县| 长宁县| 固镇县| 河西区| 尼木县| 沈丘县| 宜州市| 长垣县|