<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 以太網(wǎng)通信接口的設(shè)計與實現(xiàn)

          以太網(wǎng)通信接口的設(shè)計與實現(xiàn)

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

          軟件執(zhí)行的流程大致是:系統(tǒng)首先啟動pSOS,并由它加載網(wǎng)絡(luò)接口驅(qū)動程序,然后調(diào)用驅(qū)動程序的ni_init函數(shù),同時初始化Realtek8029的PCI配置空間并設(shè)置Realtek8029的工作參數(shù),之后啟動用戶任務(wù)。在這里,用戶任務(wù)為H.263編碼進程。它對VI口讀入的源圖像進行壓縮編碼后,將調(diào)用socket的接口函數(shù)sendto(sendto是UDP套接口專用的發(fā)送函數(shù)),然后把碼流發(fā)送給pSOS由pSOS根據(jù)UDP協(xié)議進行封裝后,再調(diào)用ni_send函數(shù),并由ni_send完成數(shù)據(jù)包從系統(tǒng)主內(nèi)存到Realtek8029片上RAM的拷貝,然后啟動Realtek8029發(fā)送數(shù)據(jù)。在接收情況下,Realtek8029收到一個完整的數(shù)據(jù)包后會用中斷通知CPU,然后由CPU執(zhí)行中斷服務(wù)程序。當(dāng)中斷服務(wù)程序?qū)?shù)據(jù)包從Realtek8029片上RAM中拷貝到系統(tǒng)的主內(nèi)存后,系統(tǒng)將調(diào)用Announce函數(shù)并把數(shù)據(jù)塊的指針、數(shù)據(jù)長度和其它信息提交pSOS,最后由pSOS將數(shù)據(jù)包沿協(xié)議棧一層層上傳并作出相應(yīng)的處理。

          軟件的設(shè)計和pSOS操作系統(tǒng)的關(guān)系比較密切,限于篇幅,本文不對pSOS作詳細(xì)介紹,。本文接下來重點介紹PCI配置空間的配置過程,這部分對于類似的設(shè)計有較普遍的參考意義。PCI配置空間有64個字節(jié),PCI片內(nèi)的這些寄存器存儲了該芯片的廠商號、設(shè)備號、設(shè)備類型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線行為的寄存器,它們必須在設(shè)備初始化時正確配置,否則設(shè)備不能工作。

          對Realtek8029 PCI空間的配置需要三個步驟:

          首先是掃描總線,這一步的目的是找到Real-tek8029的配置地址,直觀地講,就是找到它的PCI_IDSEL引腳和哪根AD線相連,因為后續(xù)的配置寫要根據(jù)這個地址來尋址。掃描總線時,要對AD〔11〕到AD〔31〕每根線進行一次掃描,如果哪根AD線連接了一個PCI設(shè)備的PCI IDSEL引腳,那么用配置讀函數(shù)讀?。校茫膳渲每臻g的0號寄存器時,應(yīng)該返回該設(shè)備的設(shè)備和廠商代碼,如果這根線實際未連接設(shè)備,則返回值是0。已知Realtek8029的設(shè)備和廠商代碼是“0x802910ec”,如果返回值與之相同,說明找到了Realtek8029,這時要記下這根AD線的序號。例如,在硬件上把Realtek8029的PCI IDSEL和AD〔20〕相連,則掃描到的序號就應(yīng)該是“20”。

          其次,用配置寫函數(shù)配置I/O讀寫使能,即在command寄存器中寫入“0x1”。

          最后,用配置寫函數(shù)配置I/O地址,也就是在I/OBaseAdddress寄存器寫入分配給該設(shè)備的I/O地址(例如“0xe400”)。具體程序流程圖如圖4所示。

          4 調(diào)試結(jié)果

          根據(jù)以上設(shè)計,筆者在原TM1300視頻編碼硬件系統(tǒng)的基礎(chǔ)上加入了PCI接口,并編寫了pSOS下Realtek8029的驅(qū)動程序。然后,在這個硬件平臺上對Realtek8029的驅(qū)動部分進行了數(shù)據(jù)傳送測試。

          筆者首先用一個單獨的UDP發(fā)送任務(wù)進行發(fā)送速率測試。這個任務(wù)主要是高速地向網(wǎng)絡(luò)上的一臺PC發(fā)送數(shù)據(jù)包,數(shù)據(jù)包的大小是變長的。PC接收并對丟包數(shù)進行統(tǒng)計的結(jié)果如表1所列。實驗表明,在用網(wǎng)線直連的各種測試速率情況下都沒有出錯,而當(dāng)接入局域網(wǎng)后,在發(fā)送速率為4.5Mbps時有突發(fā)的少量錯誤。由于UDP是不可靠的傳輸方式,所以這種錯誤是正常的。測試中,UDP發(fā)送的最高速率可以達到5Mbps左右,它與硬件的最高速率(10Mbps)相比還有一定差距,主要原因是數(shù)據(jù)從系統(tǒng)主內(nèi)存到Realtek8029片上RAM的拷貝過程目前尚未采用DMA方式,這是需要改進的地方。

          表1 丟包數(shù)統(tǒng)計表(單位:丟包個數(shù)/分鐘)

          連接方式發(fā) 送 速 率
          800kbps1.8Mbps4.5Mbps
          網(wǎng)絡(luò)直連000
          接入局域網(wǎng)002.5


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();