• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 以太網通信接口的設計與實現

    以太網通信接口的設計與實現

    作者: 時間:2012-05-05 來源:網絡 收藏

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

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

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

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

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

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

    4 調試結果

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

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

    表1 丟包數統計表(單位:丟包個數/分鐘)

    連接方式發 送 速 率
    800kbps1.8Mbps4.5Mbps
    網絡直連000
    接入局域網002.5


    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 广丰县| 大城县| 肥西县| 休宁县| 留坝县| 嘉黎县| 松原市| 水城县| 玉山县| 六安市| 延长县| 精河县| 宣恩县| 南安市| 祥云县| 兴业县| 呼玛县| 吕梁市| 云阳县| 隆子县| 栾川县| 巫山县| 塘沽区| 济源市| 怀集县| 应城市| 郯城县| 罗定市| 建昌县| 苗栗市| 定西市| 三都| 会同县| 襄垣县| 惠来县| 吕梁市| 鹤峰县| 临洮县| 南宁市| 中江县| 思茅市|