新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AT91RM9200的以太網接口模塊設計

        基于AT91RM9200的以太網接口模塊設計

        作者: 時間:2009-06-16 來源:網絡 收藏

        讀RAM見RTLReadRam函數,代碼如下:

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


        這個函數表示從address開始讀取size個字節的內容到buff指向的內存中。設置CR寄存器指令為:writereg(cr,(0x00 | er_remote_read | cr_start_com-mand));然后從Remote DMA Port讀取size次,就得到所需的數據。
        寫RAM函數,操作基本上和讀RAM函數差不多,只要將最后一步的讀size次改成寫size次就可以。
        4.3 發送數據包
        發送數據包的基本步驟如下:
        (1)首先將發送的起始頁,一般是發送緩沖區內的頁(Ox40~Ox4b),寫入StartPage變量中。將要發送的數據寫入地址為StartPage8開始的緩沖區中,然后等待上一次發送結束。對于過大或者過小的數據包,不發送;對于過小的幀,在發送時要填充。
        TPSR為發送起始寄存器,將StartPage寫入TPSR寄存器,高字節寫入TBCRH(TBCRl),低字節寫入TBCRL(TBCRO)。當寫發送命令時,RTL8019AS將從TPSR8地址開始發送size個字節的數據。
        (2)發送數據幀:發送緩沖區可以存儲2個最大的幀,一個起始頁為SEND_START_PAGEO,另一個起始頁SEND_START_PAGEl,兩個交替使用。發送數據幀時,CR寄存器設置為:writereg(cr,((prepageOxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));發送數據包函數代碼如下:


        4.4 接收數據包
        接收數據包的步驟如下:
        (1)接收緩沖操作。當RTL8019AS接收到一個數據包后,自動將接收的數據包放到CURR頁。如果一頁放不下,則CURR加1;如果CURR=接收結束頁,則CURR自動變成接收開始頁,繼續寫入接收的數據。
        (2)用戶讀取接收數據包。RTL8019AS通過Local DMA把接收的數據寫入接收緩沖區,并自動改變CURR和識別緩沖區的界限,這些都不需要用戶干預。
        當一個無錯的數據接收完畢,則觸發中斷處理函數。然后讀取數據包到分配的內存,可以從接收字節計數器中得知讀取數據。這里要處理一種情況:如果接收的數據包存儲不是連續的,在這種情況下要分2次才能讀取1個完整的數據包,判斷是否存儲不連續的條件是:
        bnry>Head[1]&&Head[1]!=RECEIVE_START_PAGE
        其中:bnry是這個包的起始頁;Head[1]是下一個包的起始頁。
        接收數據包函數與發送數據包函數相似,只需要修改相應寄存器配置即可。然后將接收的數據寫入網絡層的輸入隊列,如果寫入失敗則釋放內存。寫入后上層協議將提取這個數據包。最后網卡通過中斷控制器向ARM響應中斷,中斷完畢清除中斷標志。


        5 結 語
        ARM微處理器正以其極好的性價比和極低的功耗,與其他體系結構的微處理器進行激烈的競爭,其應用將進一步深入到各行各業。可以預測,在將來的一段時期內,ARM微處理器將成為32位微處理器市場的統治者。了解、學習、掌握和應用ARM微處理器技術很有必要,也非常重要。在ARM系統采用高性能的控制器,系統通信和調試快速、可靠,具有很高的實時性。該構造一個的嵌入式系統的應用,該的主要任務是完成與外界的信息交互,以達到網絡監控的目的。在實際應用中,它運行穩定,能夠十分方便地實現網絡互連。該系統已在視頻監控光端機上得到成功應用,傳輸速度相當于PC機的10兆網口。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 会泽县| 稻城县| 婺源县| 平舆县| 若尔盖县| 罗田县| 博野县| 赤壁市| 高邑县| 梨树县| 成武县| 岱山县| 洛宁县| 大邑县| 神农架林区| 台湾省| 崇仁县| 宿迁市| 扶沟县| 汽车| 双流县| 慈溪市| 景泰县| 长葛市| 介休市| 文昌市| 兰州市| 柳林县| 崇仁县| 长葛市| 禄丰县| 延长县| 和硕县| 高阳县| 孟村| 庄浪县| 桂平市| 河池市| 临邑县| 新乡县| 达拉特旗|