在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)驅(qū)動(dòng)DM9000網(wǎng)卡芯片

            單片機(jī)驅(qū)動(dòng)DM9000網(wǎng)卡芯片

            作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
            4、驗(yàn)證初始化中的各個(gè)函數(shù)。

            下面我們來看一下,上面所寫的初始化函數(shù)是否可用。以上我們寫好了三個(gè)函數(shù),分別為

            本文引用地址:http://www.biyoush.com/article/201611/320954.htm

            DM9000_init(),sendpacket()和receivepacket(),保存并命名為dm9000.c。既然我們要進(jìn)行調(diào)試,當(dāng)

            然要有結(jié)果輸出,根據(jù)自己的處理器的情況寫一個(gè)串口程序,這些函數(shù)是學(xué)某個(gè)單片機(jī)的基礎(chǔ),這里不

            做詳細(xì)介紹,用到是時(shí)候會(huì)在函數(shù)里注釋一下。

            接下來我們來寫個(gè)主函數(shù),新建C文件,命名為mian.c,填寫如下函數(shù):

            void main(void)

            {

            unsigned int i;

            unsigned char c;

            uart0_init();//初始化串口,調(diào)試時(shí)用到

            DM9000_init();//初始化網(wǎng)卡

            print_regs();

            }

            函數(shù)寫好,保存文件,連接硬件,連接網(wǎng)線到電腦上或局域網(wǎng)上,運(yùn)行結(jié)果如下圖所示:

            圖4 顯示寄存器值

            這里首先檢查,各個(gè)控制寄存器是否是自己寫進(jìn)去的值,在檢查狀態(tài)寄存器是否正確,其中主要要

            看NSR寄存器的bit[6]是否為“1”,該位表示是否連接成功。本例中NSR的值為40H,括號(hào)里的數(shù)為對(duì)應(yīng)

            的十進(jìn)制數(shù)。

            下面我們將主函數(shù)改進(jìn)一下,增加個(gè)中斷接收函數(shù),查看是否能接收到數(shù)據(jù)。

            void main(void)

            {

            unsigned int i;

            unsigned char c;

            uart0_init();//初始化串口,調(diào)試時(shí)用到

            DM9000_init();//初始化網(wǎng)卡

            sendpacket(60);

            while(1);//等待中斷

            }

            void int_issue(void) //中斷處理函數(shù),需要根據(jù)自己的處理器進(jìn)行設(shè)置

            {

            unsigned int i;

            i = receivepacket(Buffer);//將數(shù)據(jù)讀取到Buffer中。

            int_again :

            if(i == 0)

            {

            return;

            }

            else

            {

            print_buffer();//將接收到的所有數(shù)據(jù)打印出來

            while(1);//停止在這里等待觀察,注意:實(shí)際應(yīng)用中是不允許停止在中斷中的。

            }

            i = receivepacket(Buffer);

            if(i != 0)

            {

            goto int_again;

            }

            }

            編譯調(diào)試,運(yùn)行結(jié)果如下:

            圖5 接收數(shù)據(jù)包中的數(shù)據(jù)

            這是一個(gè)ARP應(yīng)答包,包含了我電腦上的MAC地址和局域網(wǎng)內(nèi)的IP地址。反正我也不是啥重要人物,

            這里就不保密了,呵呵。

            如果一些順利,到這里對(duì)DM9000網(wǎng)卡芯片的初始化工作就完成了。如果出現(xiàn)問題,首先要

            檢查寄存器的值是否正確??梢詫M9000中的寄存器打印出來,查看到底是哪里的問題。如果打印出的

            值很混亂,在確保串口程序無誤的前提下,查看硬件連接,以及寄存器讀寫時(shí)序是否正確,重復(fù)調(diào)試幾

            次查找原因。

            三、ARP協(xié)議的實(shí)現(xiàn)

            1、ARP協(xié)議原理簡(jiǎn)述

            ARP協(xié)議(Address Resolution Protocol 地址解析協(xié)議),在局域網(wǎng)中,網(wǎng)絡(luò)中實(shí)際傳輸?shù)氖?ldquo;

            幀”,幀里面有目標(biāo)主機(jī)的MAC地址。在以太網(wǎng)中,一個(gè)注意要和另一個(gè)主機(jī)進(jìn)行直接通信,必須要知

            道目標(biāo)主機(jī)的MAC地址。這個(gè)MAC地址就是標(biāo)識(shí)我們的網(wǎng)卡芯片唯一性的地址。但這個(gè)目標(biāo)MAC地址是如

            何獲得的呢?這就用到了我們這里講到的地址解析協(xié)議。所有“地址解析”,就是主機(jī)在發(fā)送幀前將目

            標(biāo)IP地址轉(zhuǎn)換成MAC地址的過程。ARP協(xié)議的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC

            地址,以保證通信的順利進(jìn)行。所以在第一次通信前,我們知道目標(biāo)機(jī)的IP地址,想要獲知目標(biāo)機(jī)的

            MAC地址,就要發(fā)送ARP報(bào)文(即ARP數(shù)據(jù)包)。它的傳輸過程簡(jiǎn)單的說就是:我知道目標(biāo)機(jī)的IP地址,

            那么我就向網(wǎng)絡(luò)中所有的機(jī)器發(fā)送一個(gè)ARP請(qǐng)求,請(qǐng)求中有目標(biāo)機(jī)的IP地址,請(qǐng)求的意思是目標(biāo)機(jī)要是

            收到了此請(qǐng)求,就把你的MAC地址告訴我。如果目標(biāo)機(jī)不存在,那么此請(qǐng)求自然不會(huì)有人回應(yīng)。若目標(biāo)

            機(jī)接收到了此請(qǐng)求,它就會(huì)發(fā)送一個(gè)ARP應(yīng)答,這個(gè)應(yīng)答是明確發(fā)給請(qǐng)求者的,應(yīng)答中有MAC地址。我接

            到了這個(gè)應(yīng)答,我就知道了目標(biāo)機(jī)的MAC地址,就可以進(jìn)行以后的通信了。因?yàn)槊看瓮ㄐ哦家玫組AC地

            址。

            ARP報(bào)文被封裝在以太網(wǎng)幀頭部中傳輸,如圖為ARP請(qǐng)求報(bào)文的頭部格式。

            圖6 用于以太網(wǎng)的ARP請(qǐng)求或應(yīng)答分組格式

            注意,以太網(wǎng)的傳輸存儲(chǔ)是“大端格式”,即先發(fā)送高字節(jié)后發(fā)送低字節(jié)。例如,兩個(gè)字節(jié)的數(shù)據(jù)

            ,先發(fā)送高8位后發(fā)送低8位。所以接收數(shù)據(jù)的時(shí)候要注意存儲(chǔ)順序。

            整個(gè)報(bào)文分成兩部分,以太網(wǎng)首部和ARP請(qǐng)求/應(yīng)答。下面挑重點(diǎn)講述。

            “以太網(wǎng)目的地址”字段:若是發(fā)送ARP請(qǐng)求,應(yīng)填寫廣播類型的MAC地址FF-FF-FF-FF-FF-FF,意思是

            讓網(wǎng)絡(luò)上的所有機(jī)器接收到;

            “幀類型”字段:填寫08-06表示次報(bào)文是ARP協(xié)議;

            “硬件類型”字段:填寫00-01表示以太網(wǎng)地址,即MAC地址;

            “協(xié)議類型”字段:填寫08-00表示IP,即通過IP地址查詢MAC地址;

            “硬件地址長(zhǎng)度”字段:MAC地址長(zhǎng)度為6(以字節(jié)為單位);

            “協(xié)議地址長(zhǎng)度”字段:IP地址長(zhǎng)度為4(以字節(jié)為單位);

            “操作類型”字段:ARP數(shù)據(jù)包類型,0表示ARP請(qǐng)求,1表示ARP應(yīng)答;

            “目的以太網(wǎng)地址”字段:若是發(fā)送ARP請(qǐng)求,這里是需要目標(biāo)機(jī)填充的。


            上一頁 1 2 下一頁

            評(píng)論


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

            關(guān)閉