專利名稱:一種網(wǎng)卡驅(qū)動(dòng)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于集成電路技術(shù)領(lǐng)域,具體涉及一種網(wǎng)卡驅(qū)動(dòng)方法。
技術(shù)背景在網(wǎng)絡(luò)技術(shù)高度發(fā)達(dá)的信息時(shí)代,作為OSI(開(kāi)放系統(tǒng)互聯(lián)基本參考模型)數(shù)據(jù)鏈路層的網(wǎng)卡自然起到了不可忽視的重要作用。然而,不同公 司的網(wǎng)卡接口信號(hào)不盡相同,不同工藝、不同型號(hào)的網(wǎng)卡時(shí)序要求也不一 樣,這對(duì)基于硬件實(shí)現(xiàn)的網(wǎng)卡驅(qū)動(dòng)的靈活性帶來(lái)很大的負(fù)面影響。傳統(tǒng)的網(wǎng)卡驅(qū)動(dòng)是基于c或其他語(yǔ)言設(shè)計(jì)的軟件程序,但若想把自主設(shè)計(jì)的芯片和網(wǎng)卡進(jìn)行通信,必須用硬件電路實(shí)現(xiàn)對(duì)網(wǎng)卡的配置和控制。 一般的網(wǎng)卡驅(qū)動(dòng)都是針對(duì)具體的應(yīng)用和特定型號(hào)的網(wǎng)卡,基本流程包括.-網(wǎng)卡初始化,中斷處理流程控制,發(fā)送流程控制,接收流程控制這幾個(gè)方 面,而且接口信號(hào)不易與和芯片中不同的電路模塊進(jìn)行通信,這無(wú)疑增加 了接口信號(hào)的復(fù)雜性,導(dǎo)致不同模塊之間通信效率的降低。 發(fā)明內(nèi)容本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的不足,提供一種具有易移植、可配 置、具有開(kāi)放式接口等特點(diǎn)的網(wǎng)卡驅(qū)動(dòng)方法。本發(fā)明的網(wǎng)卡驅(qū)動(dòng)方法包括網(wǎng)卡初始化流程、數(shù)據(jù)發(fā)送流程、中斷處 理流程和數(shù)據(jù)接收流程。網(wǎng)卡初始化流程主要用于對(duì)網(wǎng)卡中的相應(yīng)寄存器進(jìn)行配置,這些寄存 器主要包括網(wǎng)卡工作模式寄存器,讀寫(xiě)指針寄存器,物理地址寄存器,組 播地址寄存器,中斷屏蔽寄存器,數(shù)據(jù)格式配置寄存器,發(fā)送配置寄存 器,接收配置寄存器。數(shù)據(jù)發(fā)送流程完成數(shù)據(jù)在上層和網(wǎng)卡之間的傳遞,即從上層讀取數(shù)據(jù) 包,然后傳輸給網(wǎng)卡。數(shù)據(jù)接收流程中數(shù)據(jù)的傳輸方向是自底向上的,即從網(wǎng)卡中讀取數(shù)據(jù)包,然后傳輸給上層。當(dāng)網(wǎng)卡驅(qū)動(dòng)檢測(cè)到網(wǎng)卡中有新的數(shù)據(jù)包時(shí),讀取網(wǎng) 卡中的數(shù)據(jù),并向上層寫(xiě)入開(kāi)始信號(hào)同時(shí)傳輸數(shù)據(jù),若收到上層給出的應(yīng) 答信號(hào),則表明上層己經(jīng)成功的接受了該數(shù)據(jù),此時(shí)可以撤銷(xiāo)該數(shù)據(jù)端口 的數(shù)據(jù)。重復(fù)該過(guò)程,直到將網(wǎng)卡中新的數(shù)據(jù)包讀取完畢為止。網(wǎng)卡中斷處理流程主要處理由網(wǎng)卡送來(lái)的中斷信號(hào),并按照信號(hào)類(lèi)型 進(jìn)入相應(yīng)的處理流程。若網(wǎng)卡驅(qū)動(dòng)接收到數(shù)據(jù)接收中斷時(shí),按照上述的數(shù) 據(jù)接收流程進(jìn)行處理,其它中斷類(lèi)型,如發(fā)送完成中斷,發(fā)送錯(cuò)誤中斷, 接收錯(cuò)誤中斷等,記錄下該信息供上層?xùn)嗽円詻Q定相應(yīng)的操作。本發(fā)明的網(wǎng)卡驅(qū)動(dòng)方法的具體步驟是1、 按照網(wǎng)卡的時(shí)序要求,利用高電平計(jì)數(shù)寄存器監(jiān)測(cè)讀寫(xiě)使能信號(hào) 的高電平保持時(shí)間,利用低電平計(jì)數(shù)寄存器監(jiān)測(cè)讀寫(xiě)使能信號(hào)的低電平保 持時(shí)間,配置好網(wǎng)卡的寄存器。具體是網(wǎng)卡要求低電平的保持時(shí)間為 Tl,則低電平計(jì)數(shù)寄存器的初始值至少設(shè)為T(mén)l/Tp,網(wǎng)卡要求高電平的保持時(shí)間為T(mén)h,則高電平計(jì)數(shù)寄存器的初始值至少設(shè)為T(mén)h/Tp,其中Tp為系 統(tǒng)時(shí)鐘周期;在配置寄存器時(shí),先對(duì)高電平計(jì)數(shù)寄存器進(jìn)行操作,每過(guò)一 個(gè)系統(tǒng)時(shí)間,該高電平計(jì)數(shù)寄存器的值減1,當(dāng)該值減為0時(shí),對(duì)低電平 計(jì)數(shù)寄存器進(jìn)行操作,每過(guò)一個(gè)系統(tǒng)時(shí)間,該低電平計(jì)數(shù)寄存器的值減 1,當(dāng)該值減為0時(shí),完成寄存器的數(shù)據(jù)配置。2、 根據(jù)網(wǎng)卡具體工作需要的參數(shù)對(duì)網(wǎng)卡進(jìn)行初始化。3、 監(jiān)測(cè)是否有網(wǎng)卡給出的中斷信息和上層給出的發(fā)送使能信息,若 沒(méi)有,則處在等待狀態(tài)繼續(xù)監(jiān)測(cè)。4、 如果接收到上層給出的發(fā)送使能信息,則進(jìn)入數(shù)據(jù)發(fā)送流程。具 體是首先從上層讀出需要發(fā)送數(shù)據(jù)包的長(zhǎng)度信息,以便驅(qū)動(dòng)檢測(cè)最終讀 進(jìn)來(lái)的數(shù)據(jù)長(zhǎng)度是否和開(kāi)始給出的長(zhǎng)度一致,同時(shí)將該長(zhǎng)度信息寫(xiě)入網(wǎng)卡 的長(zhǎng)度寄存器以便網(wǎng)卡進(jìn)行讀操作;然后不斷將上層發(fā)送來(lái)的數(shù)據(jù)信息按 照具體的網(wǎng)卡時(shí)序?qū)懭氲骄W(wǎng)卡的數(shù)據(jù)寄存器中;每寫(xiě)入一個(gè)數(shù)據(jù),給上層 一個(gè)應(yīng)答信號(hào),以便上層及時(shí)撤銷(xiāo)已讀數(shù)據(jù)并寫(xiě)入新數(shù)據(jù),直至收到上層給出的結(jié)束信號(hào)。5、 如果接收到網(wǎng)卡給出的中斷信息,則進(jìn)入中斷處理流程。如果網(wǎng) 卡的寫(xiě)指針沒(méi)有發(fā)生變化,表示該中斷信息不是新的數(shù)據(jù)幀,則將該中斷 信息記錄下來(lái)以備上層用戶進(jìn)行中斷查詢,同時(shí)清除網(wǎng)卡中斷。如果寫(xiě)指 針發(fā)生變化,表示該中斷信息是新的數(shù)據(jù)幀,則進(jìn)入步驟6。6、 該中斷信息是新的數(shù)據(jù)幀時(shí),從網(wǎng)卡的數(shù)據(jù)長(zhǎng)度寄存器中讀出該 數(shù)據(jù)幀的長(zhǎng)度信息,然后從網(wǎng)卡的數(shù)據(jù)寄存器中讀出數(shù)據(jù),并將該數(shù)據(jù)寫(xiě)入上層,每寫(xiě)入一個(gè)數(shù)據(jù)后,進(jìn)入等待狀態(tài);當(dāng)上層給出一個(gè)應(yīng)答信號(hào)時(shí),停止等待狀態(tài),將該數(shù)據(jù)幀的長(zhǎng)度信息減1,不斷重復(fù)該過(guò)程,直到數(shù)據(jù)幀的長(zhǎng)度信息為0,表明整個(gè)數(shù)據(jù)幀讀取完畢,給上層發(fā)送一個(gè)數(shù)據(jù) 幀傳輸完畢信號(hào),結(jié)束數(shù)據(jù)接收流程。本發(fā)明的網(wǎng)卡驅(qū)動(dòng)方法有如下特征當(dāng)外部有發(fā)送請(qǐng)求信號(hào)時(shí),網(wǎng)卡發(fā)送程序進(jìn)行相應(yīng)參數(shù)的配置,通過(guò) 數(shù)據(jù)總線端口讀出長(zhǎng)度信息并且給出應(yīng)答信號(hào)。隨后上層若想傳送數(shù)據(jù)給 網(wǎng)卡,只要在數(shù)據(jù)總線端口中寫(xiě)入相應(yīng)的數(shù)據(jù)并且給出發(fā)送使能信號(hào),該 使能信號(hào)必須等到網(wǎng)卡發(fā)送程序給出相應(yīng)的應(yīng)答信號(hào)才能撤消,這樣整個(gè) 過(guò)程就完成了一個(gè)數(shù)據(jù)的傳輸,上層若想結(jié)束網(wǎng)卡的發(fā)送過(guò)程,必須給出 相應(yīng)的結(jié)束信號(hào)如數(shù)據(jù)空信號(hào),則網(wǎng)卡驅(qū)動(dòng)自動(dòng)執(zhí)行對(duì)網(wǎng)卡的發(fā)送過(guò)程配 置,從而完成了外部對(duì)網(wǎng)卡發(fā)送流程的控制。當(dāng)網(wǎng)卡發(fā)出中斷請(qǐng)求時(shí),網(wǎng)卡中斷處理程序自動(dòng)對(duì)中斷類(lèi)型進(jìn)行檢測(cè) 并判斷下一步的處理步驟。若不是接收中斷,則記錄相應(yīng)的中斷信息以備 上層查詢,同時(shí)清除網(wǎng)卡的中斷寄存器。若有數(shù)據(jù)包需要傳送給上層,則 給出寫(xiě)數(shù)據(jù)使能信號(hào),同時(shí)在數(shù)據(jù)端口準(zhǔn)備好新的一幀數(shù)據(jù),當(dāng)上層給出 數(shù)據(jù)接收完畢的應(yīng)答信號(hào)時(shí),網(wǎng)卡接受流程撤消使能信號(hào)并準(zhǔn)備傳輸下一 幀數(shù)據(jù)。當(dāng)全部完成對(duì)網(wǎng)卡緩沖區(qū)中數(shù)據(jù)的接收時(shí),網(wǎng)卡驅(qū)動(dòng)給出相應(yīng)的 結(jié)束信號(hào)并對(duì)網(wǎng)卡進(jìn)行相應(yīng)的參數(shù)配置。對(duì)于要使用網(wǎng)卡作為通信鏈路的芯片或電路來(lái)說(shuō),網(wǎng)卡給出的控制,數(shù)據(jù)和地址線,相對(duì)于該芯片來(lái)說(shuō)是異步信號(hào)。不同的網(wǎng)卡讀寫(xiě)時(shí)序要求 是不同的,本發(fā)明中的網(wǎng)卡驅(qū)動(dòng)方法提供了可配置的讀寫(xiě)周期和數(shù)據(jù)建立 及保持時(shí)間,可以實(shí)現(xiàn)對(duì)網(wǎng)卡與芯片之間數(shù)據(jù)交換速率的自由控制。該功 能通過(guò)在網(wǎng)卡驅(qū)動(dòng)中添加兩個(gè)控制寄存器來(lái)實(shí)現(xiàn), 一個(gè)寄存器為高電平計(jì) 數(shù)寄存器,用于記錄送給網(wǎng)卡的讀使能和寫(xiě)使能信號(hào)的高電平保持時(shí)間, 另一個(gè)寄存器為低電平計(jì)數(shù)寄存器,用于記錄送給網(wǎng)卡的讀使能和寫(xiě)使能 信號(hào)的低電平保持時(shí)間。本發(fā)明中寄存器具體參數(shù)的配置以及寄存器的讀寫(xiě)操作等為基本技術(shù) 常識(shí),采用通用技術(shù)手段。本發(fā)明的發(fā)明點(diǎn)在于提供一種增強(qiáng)網(wǎng)卡驅(qū)動(dòng)通 用性的數(shù)據(jù)傳輸控制方法。不同系統(tǒng)的數(shù)據(jù)處理速度是不相同的,上層的數(shù)據(jù)傳輸速度和網(wǎng)卡能 夠接收的速率一般是不相同的,典型的設(shè)計(jì)思想是添加數(shù)據(jù)存儲(chǔ)區(qū),上層 負(fù)責(zé)將數(shù)據(jù)寫(xiě)入該存儲(chǔ)區(qū),網(wǎng)卡驅(qū)動(dòng)讀出該數(shù)據(jù)并按照特定網(wǎng)卡需要的傳 輸速率進(jìn)行傳輸,但若上層模塊的處理速度改變或者更換網(wǎng)卡以后,該數(shù) 據(jù)存儲(chǔ)區(qū)的容量也就需要改變,這就大大影響了網(wǎng)卡驅(qū)動(dòng)的通用性。本發(fā)明引入了應(yīng)答等待機(jī)制,當(dāng)網(wǎng)卡驅(qū)動(dòng)收到上層數(shù)據(jù)時(shí),給出應(yīng)答 信號(hào),通知上層該數(shù)據(jù)已經(jīng)接收完成,可以傳輸下一個(gè)數(shù)據(jù),上層可以隨 時(shí)利用該驅(qū)動(dòng)結(jié)束對(duì)網(wǎng)卡的數(shù)據(jù)傳輸過(guò)程,只需要向網(wǎng)卡驅(qū)動(dòng)發(fā)出數(shù)據(jù)結(jié) 束信號(hào)即可。這種基于時(shí)間的方法大大增強(qiáng)了網(wǎng)卡驅(qū)動(dòng)的通用性。
圖l是發(fā)明方法的流程圖;圖2是圖1中數(shù)據(jù)發(fā)送流程的流程圖;圖3是圖1中中斷處理流程和數(shù)據(jù)接收流程的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例進(jìn)一歩說(shuō)明本發(fā)明方法。本實(shí)施例中選擇ASIX公司的AX88796L的10M/100M自適應(yīng)以太網(wǎng)。 該網(wǎng)卡支持ISA, 80186, 68K和8051四種CPU類(lèi)型,我們選擇ISA總線來(lái)說(shuō)明。網(wǎng)卡要求寄存器的寫(xiě)使能低電平保持時(shí)間最小為60ns,高電平 保持時(shí)間最小為100ns。我們假設(shè)系統(tǒng)工作頻率為50Mhz即周期為20ns。 如圖l,網(wǎng)卡驅(qū)動(dòng)方法的具體流程是1、 根據(jù)網(wǎng)卡高低電平保持時(shí)間和系統(tǒng)工作頻率,得出系統(tǒng)時(shí)鐘周期 Tp=20ns,低電平保持時(shí)間Tl=60ns,則低電平計(jì)數(shù)寄存器的值設(shè)為3(Tl/Tp=60/20);同樣,高電平的保持時(shí)間為T(mén)h=100ns,則高電平計(jì)數(shù) 寄存器的值設(shè)為5 (Th/Tp=100/20)。具體設(shè)計(jì)網(wǎng)卡驅(qū)動(dòng)時(shí),這兩個(gè)寄存 器可都設(shè)為8比特位寬,盡量滿足不同型號(hào)網(wǎng)卡,不同系統(tǒng)工作頻率的要 求。網(wǎng)卡驅(qū)動(dòng)模塊工作時(shí),先對(duì)高電平計(jì)數(shù)寄存器進(jìn)行操作,每過(guò)一個(gè)系 統(tǒng)時(shí)間,該高電平計(jì)數(shù)寄存器的值減1,當(dāng)該值減為0時(shí),對(duì)低電平計(jì)數(shù) 寄存器進(jìn)行操作,每過(guò)一個(gè)系統(tǒng)時(shí)間,該低電平計(jì)數(shù)寄存器的值減1,當(dāng) 該值減為O時(shí),完成寄存器的數(shù)據(jù)配置。2、 對(duì)網(wǎng)卡進(jìn)行初始化,該步驟主要配置AX88796L網(wǎng)卡工作需要的參 數(shù),可按照如下流程進(jìn)行配置1) 讀復(fù)位狀態(tài)寄存器,并且等待近2ms等待復(fù)位完成,這里復(fù)位狀 態(tài)寄存器只能進(jìn)行讀操作來(lái)實(shí)現(xiàn)對(duì)網(wǎng)卡的復(fù)位;2) 通過(guò)向命令寄存器CR寫(xiě)入21H來(lái)選擇第0頁(yè),進(jìn)而可以配置該頁(yè)的寄存器,包括發(fā)送緩沖區(qū)的開(kāi)始指針,停止指針,讀指針,寫(xiě)指針,中 斷使能,中斷狀態(tài)寄存器等;3) 為了下面的配置過(guò)程不受外界中斷狀態(tài)的影響,通過(guò)對(duì)狀態(tài)寄存 器寫(xiě)入OOH來(lái)實(shí)現(xiàn)中斷的屏蔽;4) 配置DCR(數(shù)據(jù)配置寄存器),主要配置DMA的數(shù)據(jù)傳輸模式是字節(jié) 形式還是字的形式,如寫(xiě)入01H選擇字傳輸形式;5) 向接收開(kāi)始指針寫(xiě)入46H;6) 向接收結(jié)束指針寫(xiě)入80H;7) 向讀指針寫(xiě)入46H;8) 將中斷狀態(tài)寄存器清O;9) 通過(guò)向命令寄存器CR寫(xiě)入61H來(lái)選擇第1頁(yè),進(jìn)而可以配置該頁(yè) 的寄存器,如物理地址,組播地址等;10) 配置物理地址寄存器PAR0 PAR6,組播地址寄存器MAR(TMAR7,這些 值按照具體系統(tǒng)要求進(jìn)行配置,如IP可以配置為192. 168. 83. 200;11) 向?qū)懼羔槍?xiě)入47H;12) 讀測(cè)試寄存器的值,確定網(wǎng)卡是否自動(dòng)選擇好網(wǎng)速,如果最低位 為0,表明沒(méi)有配置好,等待,否則,說(shuō)明已經(jīng)配置好了,可以繼續(xù)進(jìn)行 下面的配置過(guò)程;13) 配置TPSR寄存器寫(xiě)入恰當(dāng)?shù)闹祦?lái)確定發(fā)送頁(yè)地址,如40H;14) 打開(kāi)中斷使能,根據(jù)需要確保網(wǎng)卡檢測(cè)相應(yīng)的中斷信號(hào);15) 通過(guò)對(duì)命令寄存器CR寫(xiě)入22H來(lái)啟動(dòng)網(wǎng)卡工作; 上面是網(wǎng)卡初始化的全部流程,在上層需要復(fù)位網(wǎng)卡時(shí),可以給網(wǎng)卡一個(gè)啟動(dòng)復(fù)位的輸入信號(hào)EnaConfig來(lái)啟動(dòng)該初始化流程,當(dāng)網(wǎng)卡結(jié)束初 始化流程后,給出一個(gè)DONE信號(hào)。3、 監(jiān)測(cè)是否有網(wǎng)卡給出的中斷信息和上層給出的發(fā)送使能信息,若 沒(méi)有,則處在等待狀態(tài)繼續(xù)監(jiān)測(cè)。4、 若接收到上層給出的發(fā)送使能信號(hào),則進(jìn)行發(fā)送數(shù)據(jù)操作,采用 如下應(yīng)答機(jī)制。如圖2,首先從上層讀出需要發(fā)送數(shù)據(jù)包的長(zhǎng)度信息,以便驅(qū)動(dòng)檢測(cè) 最終讀進(jìn)來(lái)的數(shù)據(jù)長(zhǎng)度是否和開(kāi)始給出的長(zhǎng)度是否一致,同時(shí)將該長(zhǎng)度信 息寫(xiě)入網(wǎng)卡的長(zhǎng)度信息寄存器;啟動(dòng)網(wǎng)卡的發(fā)送流程并不斷監(jiān)測(cè)上層發(fā)送 來(lái)的數(shù)據(jù)信息,若上層給出一個(gè)發(fā)送使能信號(hào),驅(qū)動(dòng)模塊讀取數(shù)據(jù)端口中 的數(shù)據(jù)并且按照步驟一中所描述的時(shí)序?qū)⒃摂?shù)據(jù)寫(xiě)入到網(wǎng)卡的數(shù)據(jù)寄存器 中,當(dāng)該數(shù)據(jù)傳輸完畢時(shí),給上層一個(gè)應(yīng)答信號(hào),以便上層及時(shí)撤消已讀 數(shù)據(jù)并寫(xiě)入新數(shù)據(jù),不斷重復(fù)該過(guò)程。當(dāng)收到上層給出的結(jié)束信號(hào)時(shí),結(jié) 束對(duì)網(wǎng)卡的數(shù)據(jù)傳輸操作并檢查寫(xiě)入的長(zhǎng)度是否和開(kāi)始的長(zhǎng)度信息是否一 致,若不一致,將網(wǎng)卡中的數(shù)據(jù)清除并給上層一個(gè)錯(cuò)誤信號(hào),若一致則向命令寄存器CR中寫(xiě)入26H啟動(dòng)網(wǎng)卡進(jìn)行發(fā)送。5、 如果接收到網(wǎng)卡的中斷信息,則進(jìn)入中斷處理流程。如果網(wǎng)卡的 寫(xiě)指針沒(méi)有發(fā)生變化,表示該中斷信息不是新的數(shù)據(jù)幀,則將該中斷信息 記錄下來(lái)以備上層用戶進(jìn)行中斷查詢,同時(shí)清除網(wǎng)卡中斷。如果寫(xiě)指針發(fā) 生變化,表示該中斷信息是新的數(shù)據(jù)幀,則進(jìn)入歩驟6。6、 如圖3,該中斷信息是新的數(shù)據(jù)幀時(shí),首先讀取該數(shù)據(jù)包的長(zhǎng)度 信息,并將該長(zhǎng)度信息記錄到本地寄存器。該長(zhǎng)度寄存器的值用于控制接 收流程何時(shí)結(jié)束,驅(qū)動(dòng)模塊每讀一個(gè)數(shù)據(jù)時(shí),指針加1,當(dāng)讀取的數(shù)據(jù)個(gè) 數(shù)和該長(zhǎng)度寄存器的值相等時(shí),說(shuō)明該幀數(shù)據(jù)已經(jīng)全部讀出,停止對(duì)網(wǎng)卡 的接收操作。其次,每次從網(wǎng)卡中讀出一個(gè)新數(shù)據(jù)時(shí),都向上層發(fā)送一個(gè) 使能信號(hào),通知上層數(shù)據(jù)端口的數(shù)據(jù)已經(jīng)更新,可以進(jìn)行新數(shù)據(jù)的讀取, 若上層給出一個(gè)應(yīng)答信號(hào),說(shuō)明上層已經(jīng)正確相應(yīng),此時(shí),驅(qū)動(dòng)模塊撤銷(xiāo) 對(duì)上層的使能信號(hào),并重新讀取網(wǎng)卡中的新數(shù)據(jù),不斷重復(fù)該過(guò)程,直至 將網(wǎng)卡中的新數(shù)據(jù)讀完從而完成整個(gè)接收過(guò)程。最后,當(dāng)網(wǎng)卡中的新數(shù)據(jù) 讀取完畢時(shí),給上層一個(gè)數(shù)據(jù)包傳輸完畢的結(jié)束信號(hào),結(jié)束整個(gè)接收流 程。本發(fā)明中,網(wǎng)卡驅(qū)動(dòng)的時(shí)序可配置性主要是通過(guò)歩驟1中的高電平計(jì) 數(shù)寄存器和低電平計(jì)數(shù)寄存器來(lái)實(shí)現(xiàn)。傳輸過(guò)程中,使能信號(hào)的高電平和 低電平保持時(shí)間是通過(guò)時(shí)鐘計(jì)數(shù)的方式來(lái)完成的。網(wǎng)卡驅(qū)動(dòng)的易移植性是 通過(guò)在數(shù)據(jù)傳輸過(guò)程中引入應(yīng)答等待機(jī)制實(shí)現(xiàn)的。整個(gè)傳輸過(guò)程中,每個(gè) 數(shù)據(jù)的傳輸都是等到對(duì)方發(fā)出應(yīng)答信號(hào)才撤消數(shù)據(jù)總線上的數(shù)據(jù),這就避 免了傳統(tǒng)的數(shù)據(jù)存儲(chǔ)區(qū)的引入,節(jié)省了硬件面積。而且,驅(qū)動(dòng)和網(wǎng)卡之間 的數(shù)據(jù)傳輸,可以通過(guò)前面所說(shuō)的高電平計(jì)數(shù)寄存器和低電平計(jì)數(shù)寄存器 來(lái)控制,所以并不會(huì)帶來(lái)太大的時(shí)間延時(shí)。
權(quán)利要求
1、一種網(wǎng)卡驅(qū)動(dòng)方法,包括網(wǎng)卡初始化流程、數(shù)據(jù)發(fā)送流程、中斷處理流程和數(shù)據(jù)接收流程,其特征在于該網(wǎng)卡驅(qū)動(dòng)方法的具體步驟是a.按照網(wǎng)卡的時(shí)序要求,利用高電平計(jì)數(shù)寄存器監(jiān)測(cè)使能信號(hào)的高電平保持時(shí)間,利用低電平計(jì)數(shù)寄存器監(jiān)測(cè)使能信號(hào)的低電平保持時(shí)間,配置好網(wǎng)卡的寄存器,具體是網(wǎng)卡要求低電平的保持時(shí)間為T(mén)l,則低電平計(jì)數(shù)寄存器的初始值至少設(shè)為T(mén)l/Tp,網(wǎng)卡要求高電平的保持時(shí)間為T(mén)h,則高電平計(jì)數(shù)寄存器的初始值至少設(shè)為T(mén)h/Tp,其中Tp為系統(tǒng)時(shí)鐘周期;在配置寄存器時(shí),先對(duì)高電平計(jì)數(shù)寄存器進(jìn)行操作,每過(guò)一個(gè)系統(tǒng)時(shí)間,該高電平計(jì)數(shù)寄存器的值減1,當(dāng)該值減為0時(shí),對(duì)低電平計(jì)數(shù)寄存器進(jìn)行操作,每過(guò)一個(gè)系統(tǒng)時(shí)間,該低電平計(jì)數(shù)寄存器的值減1,當(dāng)該值減為0時(shí),完成寄存器的數(shù)據(jù)配置;b.根據(jù)網(wǎng)卡具體工作需要的參數(shù)對(duì)網(wǎng)卡進(jìn)行初始化;c.監(jiān)測(cè)是否有網(wǎng)卡給出的中斷信息和上層給出的發(fā)送使能信息,若沒(méi)有,則處在等待狀態(tài)繼續(xù)監(jiān)測(cè);d.如果接收到上層給出的發(fā)送使能信息,則進(jìn)入數(shù)據(jù)發(fā)送流程,具體是首先從上層讀出需要發(fā)送數(shù)據(jù)包的長(zhǎng)度信息,同時(shí)將該長(zhǎng)度信息寫(xiě)入網(wǎng)卡的長(zhǎng)度寄存器;然后不斷將上層發(fā)送來(lái)的數(shù)據(jù)信息按照具體的網(wǎng)卡時(shí)序?qū)懭氲骄W(wǎng)卡的數(shù)據(jù)寄存器中;每寫(xiě)入一個(gè)數(shù)據(jù),給上層一個(gè)應(yīng)答信號(hào),直至收到上層給出的結(jié)束信號(hào);e.如果接收到網(wǎng)卡給出的中斷信息,則進(jìn)入中斷處理流程;如果網(wǎng)卡的寫(xiě)指針沒(méi)有發(fā)生變化,表示該中斷信息不是新的數(shù)據(jù)幀,則將該中斷信息記錄下來(lái),同時(shí)清除網(wǎng)卡中斷;如果寫(xiě)指針發(fā)生變化,表示該中斷信息是新的數(shù)據(jù)幀,則進(jìn)入步驟f;f.該中斷信息是新的數(shù)據(jù)幀時(shí),從網(wǎng)卡的數(shù)據(jù)長(zhǎng)度寄存器中讀出該數(shù)據(jù)幀的長(zhǎng)度信息,然后從網(wǎng)卡的數(shù)據(jù)寄存器中讀出數(shù)據(jù),并將該數(shù)據(jù)寫(xiě)入上層,每寫(xiě)入一個(gè)數(shù)據(jù)后,進(jìn)入等待狀態(tài);當(dāng)上層給出一個(gè)應(yīng)答信號(hào)時(shí),停止等待狀態(tài),將該數(shù)據(jù)幀的長(zhǎng)度信息減1,不斷重復(fù)該過(guò)程,直到數(shù)據(jù)幀的長(zhǎng)度信息為0,給上層發(fā)送一個(gè)數(shù)據(jù)幀傳輸完畢信號(hào),結(jié)束數(shù)據(jù)接收流程。
全文摘要
本發(fā)明涉及一種網(wǎng)卡驅(qū)動(dòng)方法?,F(xiàn)有技術(shù)由于靈活性不夠,導(dǎo)致不同模塊之間通信效率的降低。本發(fā)明方法是按照網(wǎng)卡的時(shí)序要求,配置好網(wǎng)卡的寄存器;根據(jù)網(wǎng)卡具體工作需要的參數(shù)對(duì)網(wǎng)卡進(jìn)行初始化;監(jiān)測(cè)是否有網(wǎng)卡給出的中斷信息和上層給出的發(fā)送使能信息,若沒(méi)有,則處在等待狀態(tài);如果接收到上層給出的發(fā)送使能信息,則進(jìn)入數(shù)據(jù)發(fā)送流程;如果接收到網(wǎng)卡給出的中斷信息,則進(jìn)入中斷處理流程;如果網(wǎng)卡的寫(xiě)指針沒(méi)有發(fā)生變化,進(jìn)入數(shù)據(jù)接收流程。本發(fā)明引入了應(yīng)答等待機(jī)制,上層可以隨時(shí)利用該驅(qū)動(dòng)結(jié)束對(duì)網(wǎng)卡的數(shù)據(jù)傳輸過(guò)程,只需要向網(wǎng)卡驅(qū)動(dòng)發(fā)出數(shù)據(jù)結(jié)束信號(hào)即可。這種基于時(shí)間的方法大大增強(qiáng)了網(wǎng)卡驅(qū)動(dòng)的通用性。
文檔編號(hào)G06F9/445GK101232522SQ20081005985
公開(kāi)日2008年7月30日 申請(qǐng)日期2008年2月22日 優(yōu)先權(quán)日2008年2月22日
發(fā)明者廉玉平, 艷 張, 陳金龍, 霍明旭, 雁 韓 申請(qǐng)人:浙江大學(xué)