基于ARM處理器的HDLC通信的DMA實現(xiàn)_第1頁
基于ARM處理器的HDLC通信的DMA實現(xiàn)_第2頁
基于ARM處理器的HDLC通信的DMA實現(xiàn)_第3頁
基于ARM處理器的HDLC通信的DMA實現(xiàn)_第4頁
基于ARM處理器的HDLC通信的DMA實現(xiàn)_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于ARM處理器的HDLC通信的DMA實現(xiàn)        摘要:以ARM7TDMI為內核的Samsung公司S3C4510B網絡微控制器(Networking MCU)為基礎,重點論述如何通過DMA(直接內存訪問)方式實現(xiàn)HDLC通信。對軟件設計中緩沖描述符、DMA狀態(tài)配置和控制、ISR服務程序設計以及相關的硬件配置進行詳細的描述,并討論如何編寫在操作系統(tǒng)下的驅動程序。   目前在嵌入式產品開發(fā)設計中,通常是在OS(Operating System)廠商提供的BSP基礎上進行開發(fā)工作;對于底層硬

2、件的操作,程序設計人員很少關注或只是少量的修改。實際上很多產品,我們完全可以拋開操作系統(tǒng)的模式,避免不必要的系統(tǒng)開銷,而對底層的硬件直接進行處理。這樣,可以節(jié)省資源提高利用率。當然,這樣也會人為地增加系統(tǒng)開發(fā)設計的難度。但是從長遠的角度看,進行這樣的設計思考還是非常必要的?,F(xiàn)在一些產品的設計開發(fā)中,所缺少的實際上就是深入了解底層操作,這樣往往使我們丟失了創(chuàng)新的機會。本文主要分析如何在硬件基礎上直接進行程序設計,介紹如何在底層進行HDLC通信控制操作,以及如何處理數(shù)據結構等方面的問題。對于進行驅動程序的設計以及進行系統(tǒng)設計,都提供了良好的借鑒。1 S3C4510B以及HDLC模塊S3C4510B

3、是三星公司生產的以ARM(Advanced RISC Machines)16/32bits的RISC ARM7TDMI微處理器為內核的一種網絡微控制器(NETMCU,Networking MCU),主要用于網絡產品(如MUB、Router、HomePNA、SOHO)的開發(fā)設計。這款MCU在ARM7TDMI處理器的基礎上,外加2個通道的HDLC控制器、I2C總線和2個通道串行接口、1個MAC控制模塊以及統(tǒng)一的MII界面,提供10MHz/100MHz以太網的自適應連接。對于網絡產品的設計提供了靈活的支持。在軟件開發(fā)設計方面,NetMCU使用的是ARM7TDMI處理器內核,所以支持ARM的開發(fā)工具(

4、如WindRiver的Tornado、ARM的ARMstd251等)都對其適用,方便用戶開發(fā)設計,最大限度地獲得支持資源。1.1 S3C4510B中的HDLC模塊S3C4510B的HDLC(High-level Digital Link Controller)控制器擁有2個串行通道。HDLC模塊支持符合SDLC標準和HDLC標準的CPU/數(shù)據通道接口,包含2個DMA引警;支持使用對應幀的緩沖區(qū)描述符結構,而且可以靈活地配置通道物理編碼模式(NRZ,F(xiàn)M,MAN),選擇本地或者外部時鐘;支持通過鎖相環(huán)路從接收數(shù)據流提取時鐘信號。使用的HDLC的幀結構如表1所列。表1 開始標志地址域控制

5、域信息域幀校驗結束標志7EH2/4 Bytes1Byte8 bit/Byte16 bit CRC7EH圖1是S3C4510B HDLC控制器功能結構,主要包括總線仲裁單元、DMA控制器、8字的發(fā)送接收(Tx/Rx)FIFO、狀態(tài)/控制寄存器和物理收發(fā)器??偩€總裁單元負責向CPU申請系統(tǒng)總線;DMA控制器使用緩沖描述符在無CPU干預下控制數(shù)據幀的收發(fā);8字(字=32bit)FIFO結構對CPU和串行接口的數(shù)據進行立即存儲;物理收發(fā)器控制HDLC通道的運行模式、編解碼等;狀態(tài)/控制寄存器是運行的核心,程序設計人員通過設置,檢測這些寄存器控制數(shù)據的收發(fā)。1.2 中斷模式和HDMA(HDLC DMA)

6、模式(1)中斷模式HTxFIFO結構通過把幀數(shù)據分別寫入“幀連續(xù)地址”和“幀結束地址”控制發(fā)送行為;接收時,作為中斷響應,讀取HDLC狀態(tài)寄存器,如果RxFA=1,則可以由CPU從HRxFIFO結構讀取數(shù)據,直到最后一個Byte標志設置。中斷模式下CPU去處理每一次數(shù)據的收發(fā)。對于一個長幀的數(shù)據,通常需要多次CPU進行干擾去填寫(或讀?。〧IFO,導致過多的系統(tǒng)處理開銷(overhead),占用CPU資源。如果在有多個外部中斷源的系統(tǒng)中,CPU利用效率十分低下。(2)DMA模式使用緩沖描述符BD(Buffer Descriptor)結構,可以實現(xiàn)以幀為單位對數(shù)據進行接收和發(fā)送控制。程序設計人員

7、只需要填寫相應BD結構的域信息,配置收發(fā)模式,具體的執(zhí)行細節(jié)交給DMA單元控制完成。CPU只是對每一幀進行處理,這樣在一幀收發(fā)的過程中,系統(tǒng)可以去處理其它的任務,有效地利用CPU資源。關鍵在于構建BD循環(huán)鏈表。同時應該注意,BD及其對應的緩沖數(shù)據區(qū)必須放在系統(tǒng)存儲區(qū)的非緩存區(qū)(NonCache),這可以通過設置地址的第26位為1來實現(xiàn)。1.3 緩沖描述符(BD)緩沖描述符是S3C5410B使用的一種數(shù)據結構,通常構成循環(huán)鏈表。HDMA引擎可以直接讀取結構的信息,用戶通過填寫這些結構中的域去控制HDMA的運行行為。如圖2所示,每個BD包括4個域:數(shù)據緩存指針(data buffer pointe

8、r)。第31位標識主權(ownership)關系,表示當前的BD在DMA(1)控制器和CPU(0)之間的所屬關系,通常在發(fā)送和接收時要對其檢查。對于數(shù)據長度,通常在發(fā)送時寫入BD的幀長度域,DMA引擎會根據其發(fā)送相應長度的數(shù)據。接收數(shù)據長度會自動寫入這個域。保留域。發(fā)送BD(Tx),低8位表示發(fā)送控制(如前同步信號、CRC模式、BIG/LITTLE端選擇等);接收BD(Rx),保留未用。長度域。發(fā)送BD,用戶寫入發(fā)送幀的數(shù)據長度;接收BD,DMA控制器寫入接收幀的數(shù)據長度。Next BD指針。指向下一個BD,收發(fā)BD各自構成一組BD鏈。HDMA控制器在使用過一個BD后,會自動讀入下一個BD,裝

9、入HDMA指針寄存器(HDMAXxPTR)。使用指針gpXxBDStart,指示當前的可用BD位置。在設備中定義為全局變量(X表示T或R)。1.4 重要的數(shù)據類型BD結構的定義如圖2所示。typedef struct BDU32 BufferData Ptr;/數(shù)據緩存區(qū)指針,其中第31位標識BD的所有權U32 Reserved;/發(fā)送BD控制位,定義發(fā)送時操作的模式,接收BD保留U32 StatusLength;/運行狀態(tài),在ISR中檢測,也定義對應的數(shù)據緩存區(qū)的長度struct BD *NextBD;/下一個BD指針sBuffer Descriptor;HDLC幀(Frame)定義(如表1

10、):typedef struct HDLCFRAMEU8 address4; /地址U8 control; /控制信息通道為FFHU8 information1505; /信息域,有效的數(shù)據sHdlcFrame;HDLC設備結構定義:typedef struct HDLC_Device U32 HDLC_Port; /HDLC通信號U32 HDLC_Baud; /HDLC波特率U32 HDLC_Data_format;/HDLC數(shù)據格式,NRZ,NRZI,F(xiàn)M0,F(xiàn)M1,Manchester/時鐘選擇(發(fā)送/接收時鐘源)sBufferDescriptor gpTxBDStart;/*當前的發(fā)送

11、BD指針Start of TX BDs*/sBufferDescriptor *gpRxBDStart; /*當前的接收BD指針Start of RX BDs */狀態(tài)統(tǒng)計信息(Abort,CRC error,Null list)Hdle_End_Device;由于在中斷服務程序入口無法傳遞參數(shù),故定義設備為全局變量,程序設計中使用指針傳遞,提高效率。Hdlc_End_Device Hdle_Dev; /全局定義Hdlc_End_Device *pDevice; /函數(shù)內部定義pDevice=(Hdlc_End_Device *)&Hdlc_Dev;1.5 使用DMA方式的程序設計(1

12、)初始化流程初始化流程如圖3所示。void HdlcInit(void); /系統(tǒng)啟動HDLC主初始化函數(shù)Int HdlcChannelInit(Hdlc_End_Device *pDrvCtrl); /關閉中斷源、復位DMA控制器和HDLC控制寄存器、設置相關的寄存器、時鐘源void TxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);void RxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);/初始化發(fā)送接收BD鏈,gpXxBDStart指針指向第1個BD,HDMAXXPT

13、R寄存器裝入第1個BD地址void HdlcChannelStart(U32 channel); /連接中斷服務程序,打開中斷,啟動接收(2)HDMA發(fā)送過程中斷服務程序HDMA發(fā)送過程及中斷服務程序如圖4所示。void Transmit_Frame(Hdlc_End_Device *pDrvCtrl);/準備數(shù)據調用HdlcFramsSend()Int HdlcFrameSend(Hdlc_End_Device *pDrvCtrl,U8 *pData,U32 len);在發(fā)送過程中,首先檢查gpTxBDStart指向的BD的所有權:如果為DMA所用,應當退出;如果CPU擁有,則可按照HDLC

14、幀的格式填入gpTxBDStart指向的BD對應的緩沖數(shù)據區(qū),然后設置BD的控制信息,設置所有權關系為DMA和LASTF指示位,啟動發(fā)送(使能Tx、TxDMA),并把gpTxBDStart移到下一個位置。void HdlcTx_Isr(void);/發(fā)送中斷服務程序,通常只做檢測任務,生成錯誤統(tǒng)計報告(3)HDMA接收過程及中斷服務程序HDMA接收過程及中斷服務程序如圖5所示。void HdlcRx_Isr(void); /如果接收正常完成,調用/HdlcFrameReceive ();void HdlcFrameReceive(Hdle_End_Device *pDrvCtrl,U32 In

15、tHDLCStatus);void HdlcFrameDataGet(Hdlc_End_Device *pDrvCtrl,U8 *pFrameData,U32 len);數(shù)據到達,進入接收中斷服務程序。如果接收1幀完成標志位(RxFA)設置,可以進入數(shù)據接收程序,由HdlcFrameDataGet()負責把數(shù)據從接收緩沖數(shù)據區(qū)送用戶數(shù)據區(qū),進行處理;如果錯誤,生成錯誤類型報告。數(shù)據接收完畢,應該把當前的BD交還給接收DMA控制器,設置對應的所有權為DMA,然后把gpRxBDStart移到BD鏈中的下一個位置。2 操作系統(tǒng)(OS)設備驅動接口雖然程序是在ARMstd251中編譯,但是整個結構基本是按照驅動程序設計思路,可以通過局部更改轉化為OS驅動程序。在HDLC控制中,如何生成BD鏈和相應的數(shù)據緩存區(qū),是一個關

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論