基于A(yíng)T91RM9200的以太網(wǎng)接口模塊設計
讀RAM見(jiàn)RTLReadRam函數,代碼如下:本文引用地址:http://dyxdggzs.com/article/152469.htm
這個(gè)函數表示從address開(kāi)始讀取size個(gè)字節的內容到buff指向的內存中。設置CR寄存器指令為:writereg(cr,(0x00 | er_remote_read | cr_start_com-mand));然后從Remote DMA Port讀取size次,就得到所需的數據。
寫(xiě)RAM函數,操作基本上和讀RAM函數差不多,只要將最后一步的讀size次改成寫(xiě)size次就可以。
4.3 發(fā)送數據包
發(fā)送數據包的基本步驟如下:
(1)首先將發(fā)送的起始頁(yè),一般是發(fā)送緩沖區內的頁(yè)(Ox40~Ox4b),寫(xiě)入StartPage變量中。將要發(fā)送的數據寫(xiě)入地址為StartPage8開(kāi)始的緩沖區中,然后等待上一次發(fā)送結束。對于過(guò)大或者過(guò)小的數據包,不發(fā)送;對于過(guò)小的幀,在發(fā)送時(shí)要填充。
TPSR為發(fā)送起始寄存器,將StartPage寫(xiě)入TPSR寄存器,高字節寫(xiě)入TBCRH(TBCRl),低字節寫(xiě)入TBCRL(TBCRO)。當寫(xiě)發(fā)送命令時(shí),RTL8019AS將從TPSR8地址開(kāi)始發(fā)送size個(gè)字節的數據。
(2)發(fā)送數據幀:發(fā)送緩沖區可以存儲2個(gè)最大的以太網(wǎng)幀,一個(gè)起始頁(yè)為SEND_START_PAGEO,另一個(gè)起始頁(yè)SEND_START_PAGEl,兩個(gè)交替使用。發(fā)送數據幀時(shí),CR寄存器設置為:writereg(cr,((prepageOxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));發(fā)送數據包函數代碼如下:
4.4 接收數據包
接收數據包的步驟如下:
(1)接收緩沖操作。當RTL8019AS接收到一個(gè)數據包后,自動(dòng)將接收的數據包放到CURR頁(yè)。如果一頁(yè)放不下,則CURR加1;如果CURR=接收結束頁(yè),則CURR自動(dòng)變成接收開(kāi)始頁(yè),繼續寫(xiě)入接收的數據。
(2)用戶(hù)讀取接收數據包。RTL8019AS通過(guò)Local DMA把接收的數據寫(xiě)入接收緩沖區,并自動(dòng)改變CURR和識別緩沖區的界限,這些都不需要用戶(hù)干預。
當一個(gè)無(wú)錯的數據接收完畢,則觸發(fā)中斷處理函數。然后讀取數據包到分配的內存,可以從接收字節計數器中得知讀取數據。這里要處理一種情況:如果接收的數據包存儲不是連續的,在這種情況下要分2次才能讀取1個(gè)完整的數據包,判斷是否存儲不連續的條件是:
bnry>Head[1]&&Head[1]!=RECEIVE_START_PAGE
其中:bnry是這個(gè)包的起始頁(yè);Head[1]是下一個(gè)包的起始頁(yè)。
接收數據包函數與發(fā)送數據包函數相似,只需要修改相應寄存器配置即可。然后將接收的數據寫(xiě)入網(wǎng)絡(luò )接口層的輸入隊列,如果寫(xiě)入失敗則釋放內存。寫(xiě)入后上層協(xié)議將提取這個(gè)數據包。最后網(wǎng)卡通過(guò)中斷控制器向ARM響應中斷,中斷完畢清除中斷標志。
5 結 語(yǔ)
ARM微處理器正以其極好的性?xún)r(jià)比和極低的功耗,與其他體系結構的微處理器進(jìn)行激烈的競爭,其應用將進(jìn)一步深入到各行各業(yè)??梢灶A測,在將來(lái)的一段時(shí)期內,ARM微處理器將成為32位微處理器市場(chǎng)的統治者。了解、學(xué)習、掌握和應用ARM微處理器技術(shù)很有必要,也非常重要。在A(yíng)RM系統采用高性能的以太網(wǎng)控制器,系統通信和調試快速、可靠,具有很高的實(shí)時(shí)性。該設計構造一個(gè)基于以太網(wǎng)的嵌入式系統的應用,該接口模塊的主要任務(wù)是完成與外界的信息交互,以達到網(wǎng)絡(luò )監控的目的。在實(shí)際應用中,它運行穩定,能夠十分方便地實(shí)現網(wǎng)絡(luò )互連。該系統已在視頻監控光端機上得到成功應用,傳輸速度相當于PC機的10兆網(wǎng)口。
評論