




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于ARM處理器的HDLC通信的DMA實(shí)現(xiàn) 摘要:以ARM7TDMI為內(nèi)核的Samsung公司S3C4510B網(wǎng)絡(luò)微控制器(Networking MCU)為基礎(chǔ),重點(diǎn)論述如何通過DMA(直接內(nèi)存訪問)方式實(shí)現(xiàn)HDLC通信。對軟件設(shè)計(jì)中緩沖描述符、DMA狀態(tài)配置和控制、ISR服務(wù)程序設(shè)計(jì)以及相關(guān)的硬件配置進(jìn)行詳細(xì)的描述,并討論如何編寫在操作系統(tǒng)下的驅(qū)動(dòng)程序。 目前在嵌入式產(chǎn)品開發(fā)設(shè)計(jì)中,通常是在OS(Operating System)廠商提供的BSP基礎(chǔ)上進(jìn)行開發(fā)工作;對于底層硬
2、件的操作,程序設(shè)計(jì)人員很少關(guān)注或只是少量的修改。實(shí)際上很多產(chǎn)品,我們完全可以拋開操作系統(tǒng)的模式,避免不必要的系統(tǒng)開銷,而對底層的硬件直接進(jìn)行處理。這樣,可以節(jié)省資源提高利用率。當(dāng)然,這樣也會(huì)人為地增加系統(tǒng)開發(fā)設(shè)計(jì)的難度。但是從長遠(yuǎn)的角度看,進(jìn)行這樣的設(shè)計(jì)思考還是非常必要的。現(xiàn)在一些產(chǎn)品的設(shè)計(jì)開發(fā)中,所缺少的實(shí)際上就是深入了解底層操作,這樣往往使我們丟失了創(chuàng)新的機(jī)會(huì)。本文主要分析如何在硬件基礎(chǔ)上直接進(jìn)行程序設(shè)計(jì),介紹如何在底層進(jìn)行HDLC通信控制操作,以及如何處理數(shù)據(jù)結(jié)構(gòu)等方面的問題。對于進(jìn)行驅(qū)動(dòng)程序的設(shè)計(jì)以及進(jìn)行系統(tǒng)設(shè)計(jì),都提供了良好的借鑒。1 S3C4510B以及HDLC模塊S3C4510B
3、是三星公司生產(chǎn)的以ARM(Advanced RISC Machines)16/32bits的RISC ARM7TDMI微處理器為內(nèi)核的一種網(wǎng)絡(luò)微控制器(NETMCU,Networking MCU),主要用于網(wǎng)絡(luò)產(chǎn)品(如MUB、Router、HomePNA、SOHO)的開發(fā)設(shè)計(jì)。這款MCU在ARM7TDMI處理器的基礎(chǔ)上,外加2個(gè)通道的HDLC控制器、I2C總線和2個(gè)通道串行接口、1個(gè)MAC控制模塊以及統(tǒng)一的MII界面,提供10MHz/100MHz以太網(wǎng)的自適應(yīng)連接。對于網(wǎng)絡(luò)產(chǎn)品的設(shè)計(jì)提供了靈活的支持。在軟件開發(fā)設(shè)計(jì)方面,NetMCU使用的是ARM7TDMI處理器內(nèi)核,所以支持ARM的開發(fā)工具(
4、如WindRiver的Tornado、ARM的ARMstd251等)都對其適用,方便用戶開發(fā)設(shè)計(jì),最大限度地獲得支持資源。1.1 S3C4510B中的HDLC模塊S3C4510B的HDLC(High-level Digital Link Controller)控制器擁有2個(gè)串行通道。HDLC模塊支持符合SDLC標(biāo)準(zhǔn)和HDLC標(biāo)準(zhǔn)的CPU/數(shù)據(jù)通道接口,包含2個(gè)DMA引警;支持使用對應(yīng)幀的緩沖區(qū)描述符結(jié)構(gòu),而且可以靈活地配置通道物理編碼模式(NRZ,F(xiàn)M,MAN),選擇本地或者外部時(shí)鐘;支持通過鎖相環(huán)路從接收數(shù)據(jù)流提取時(shí)鐘信號(hào)。使用的HDLC的幀結(jié)構(gòu)如表1所列。表1 開始標(biāo)志地址域控制
5、域信息域幀校驗(yàn)結(jié)束標(biāo)志7EH2/4 Bytes1Byte8 bit/Byte16 bit CRC7EH圖1是S3C4510B HDLC控制器功能結(jié)構(gòu),主要包括總線仲裁單元、DMA控制器、8字的發(fā)送接收(Tx/Rx)FIFO、狀態(tài)/控制寄存器和物理收發(fā)器。總線總裁單元負(fù)責(zé)向CPU申請系統(tǒng)總線;DMA控制器使用緩沖描述符在無CPU干預(yù)下控制數(shù)據(jù)幀的收發(fā);8字(字=32bit)FIFO結(jié)構(gòu)對CPU和串行接口的數(shù)據(jù)進(jìn)行立即存儲(chǔ);物理收發(fā)器控制HDLC通道的運(yùn)行模式、編解碼等;狀態(tài)/控制寄存器是運(yùn)行的核心,程序設(shè)計(jì)人員通過設(shè)置,檢測這些寄存器控制數(shù)據(jù)的收發(fā)。1.2 中斷模式和HDMA(HDLC DMA)
6、模式(1)中斷模式HTxFIFO結(jié)構(gòu)通過把幀數(shù)據(jù)分別寫入“幀連續(xù)地址”和“幀結(jié)束地址”控制發(fā)送行為;接收時(shí),作為中斷響應(yīng),讀取HDLC狀態(tài)寄存器,如果RxFA=1,則可以由CPU從HRxFIFO結(jié)構(gòu)讀取數(shù)據(jù),直到最后一個(gè)Byte標(biāo)志設(shè)置。中斷模式下CPU去處理每一次數(shù)據(jù)的收發(fā)。對于一個(gè)長幀的數(shù)據(jù),通常需要多次CPU進(jìn)行干擾去填寫(或讀取)FIFO,導(dǎo)致過多的系統(tǒng)處理開銷(overhead),占用CPU資源。如果在有多個(gè)外部中斷源的系統(tǒng)中,CPU利用效率十分低下。(2)DMA模式使用緩沖描述符BD(Buffer Descriptor)結(jié)構(gòu),可以實(shí)現(xiàn)以幀為單位對數(shù)據(jù)進(jìn)行接收和發(fā)送控制。程序設(shè)計(jì)人員
7、只需要填寫相應(yīng)BD結(jié)構(gòu)的域信息,配置收發(fā)模式,具體的執(zhí)行細(xì)節(jié)交給DMA單元控制完成。CPU只是對每一幀進(jìn)行處理,這樣在一幀收發(fā)的過程中,系統(tǒng)可以去處理其它的任務(wù),有效地利用CPU資源。關(guān)鍵在于構(gòu)建BD循環(huán)鏈表。同時(shí)應(yīng)該注意,BD及其對應(yīng)的緩沖數(shù)據(jù)區(qū)必須放在系統(tǒng)存儲(chǔ)區(qū)的非緩存區(qū)(NonCache),這可以通過設(shè)置地址的第26位為1來實(shí)現(xiàn)。1.3 緩沖描述符(BD)緩沖描述符是S3C5410B使用的一種數(shù)據(jù)結(jié)構(gòu),通常構(gòu)成循環(huán)鏈表。HDMA引擎可以直接讀取結(jié)構(gòu)的信息,用戶通過填寫這些結(jié)構(gòu)中的域去控制HDMA的運(yùn)行行為。如圖2所示,每個(gè)BD包括4個(gè)域:數(shù)據(jù)緩存指針(data buffer pointe
8、r)。第31位標(biāo)識(shí)主權(quán)(ownership)關(guān)系,表示當(dāng)前的BD在DMA(1)控制器和CPU(0)之間的所屬關(guān)系,通常在發(fā)送和接收時(shí)要對其檢查。對于數(shù)據(jù)長度,通常在發(fā)送時(shí)寫入BD的幀長度域,DMA引擎會(huì)根據(jù)其發(fā)送相應(yīng)長度的數(shù)據(jù)。接收數(shù)據(jù)長度會(huì)自動(dòng)寫入這個(gè)域。保留域。發(fā)送BD(Tx),低8位表示發(fā)送控制(如前同步信號(hào)、CRC模式、BIG/LITTLE端選擇等);接收BD(Rx),保留未用。長度域。發(fā)送BD,用戶寫入發(fā)送幀的數(shù)據(jù)長度;接收BD,DMA控制器寫入接收幀的數(shù)據(jù)長度。Next BD指針。指向下一個(gè)BD,收發(fā)BD各自構(gòu)成一組BD鏈。HDMA控制器在使用過一個(gè)BD后,會(huì)自動(dòng)讀入下一個(gè)BD,裝
9、入HDMA指針寄存器(HDMAXxPTR)。使用指針gpXxBDStart,指示當(dāng)前的可用BD位置。在設(shè)備中定義為全局變量(X表示T或R)。1.4 重要的數(shù)據(jù)類型BD結(jié)構(gòu)的定義如圖2所示。typedef struct BDU32 BufferData Ptr;/數(shù)據(jù)緩存區(qū)指針,其中第31位標(biāo)識(shí)BD的所有權(quán)U32 Reserved;/發(fā)送BD控制位,定義發(fā)送時(shí)操作的模式,接收BD保留U32 StatusLength;/運(yùn)行狀態(tài),在ISR中檢測,也定義對應(yīng)的數(shù)據(jù)緩存區(qū)的長度struct BD *NextBD;/下一個(gè)BD指針sBuffer Descriptor;HDLC幀(Frame)定義(如表1
10、):typedef struct HDLCFRAMEU8 address4; /地址U8 control; /控制信息通道為FFHU8 information1505; /信息域,有效的數(shù)據(jù)sHdlcFrame;HDLC設(shè)備結(jié)構(gòu)定義:typedef struct HDLC_Device U32 HDLC_Port; /HDLC通信號(hào)U32 HDLC_Baud; /HDLC波特率U32 HDLC_Data_format;/HDLC數(shù)據(jù)格式,NRZ,NRZI,F(xiàn)M0,F(xiàn)M1,Manchester/時(shí)鐘選擇(發(fā)送/接收時(shí)鐘源)sBufferDescriptor gpTxBDStart;/*當(dāng)前的發(fā)送
11、BD指針Start of TX BDs*/sBufferDescriptor *gpRxBDStart; /*當(dāng)前的接收BD指針Start of RX BDs */狀態(tài)統(tǒng)計(jì)信息(Abort,CRC error,Null list)Hdle_End_Device;由于在中斷服務(wù)程序入口無法傳遞參數(shù),故定義設(shè)備為全局變量,程序設(shè)計(jì)中使用指針傳遞,提高效率。Hdlc_End_Device Hdle_Dev; /全局定義Hdlc_End_Device *pDevice; /函數(shù)內(nèi)部定義pDevice=(Hdlc_End_Device *)&Hdlc_Dev;1.5 使用DMA方式的程序設(shè)計(jì)(1
12、)初始化流程初始化流程如圖3所示。void HdlcInit(void); /系統(tǒng)啟動(dòng)HDLC主初始化函數(shù)Int HdlcChannelInit(Hdlc_End_Device *pDrvCtrl); /關(guān)閉中斷源、復(fù)位DMA控制器和HDLC控制寄存器、設(shè)置相關(guān)的寄存器、時(shí)鐘源void TxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);void RxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);/初始化發(fā)送接收BD鏈,gpXxBDStart指針指向第1個(gè)BD,HDMAXXPT
13、R寄存器裝入第1個(gè)BD地址void HdlcChannelStart(U32 channel); /連接中斷服務(wù)程序,打開中斷,啟動(dòng)接收(2)HDMA發(fā)送過程中斷服務(wù)程序HDMA發(fā)送過程及中斷服務(wù)程序如圖4所示。void Transmit_Frame(Hdlc_End_Device *pDrvCtrl);/準(zhǔn)備數(shù)據(jù)調(diào)用HdlcFramsSend()Int HdlcFrameSend(Hdlc_End_Device *pDrvCtrl,U8 *pData,U32 len);在發(fā)送過程中,首先檢查gpTxBDStart指向的BD的所有權(quán):如果為DMA所用,應(yīng)當(dāng)退出;如果CPU擁有,則可按照HDLC
14、幀的格式填入gpTxBDStart指向的BD對應(yīng)的緩沖數(shù)據(jù)區(qū),然后設(shè)置BD的控制信息,設(shè)置所有權(quán)關(guān)系為DMA和LASTF指示位,啟動(dòng)發(fā)送(使能Tx、TxDMA),并把gpTxBDStart移到下一個(gè)位置。void HdlcTx_Isr(void);/發(fā)送中斷服務(wù)程序,通常只做檢測任務(wù),生成錯(cuò)誤統(tǒng)計(jì)報(bào)告(3)HDMA接收過程及中斷服務(wù)程序HDMA接收過程及中斷服務(wù)程序如圖5所示。void HdlcRx_Isr(void); /如果接收正常完成,調(diào)用/HdlcFrameReceive ();void HdlcFrameReceive(Hdle_End_Device *pDrvCtrl,U32 In
15、tHDLCStatus);void HdlcFrameDataGet(Hdlc_End_Device *pDrvCtrl,U8 *pFrameData,U32 len);數(shù)據(jù)到達(dá),進(jìn)入接收中斷服務(wù)程序。如果接收1幀完成標(biāo)志位(RxFA)設(shè)置,可以進(jìn)入數(shù)據(jù)接收程序,由HdlcFrameDataGet()負(fù)責(zé)把數(shù)據(jù)從接收緩沖數(shù)據(jù)區(qū)送用戶數(shù)據(jù)區(qū),進(jìn)行處理;如果錯(cuò)誤,生成錯(cuò)誤類型報(bào)告。數(shù)據(jù)接收完畢,應(yīng)該把當(dāng)前的BD交還給接收DMA控制器,設(shè)置對應(yīng)的所有權(quán)為DMA,然后把gpRxBDStart移到BD鏈中的下一個(gè)位置。2 操作系統(tǒng)(OS)設(shè)備驅(qū)動(dòng)接口雖然程序是在ARMstd251中編譯,但是整個(gè)結(jié)構(gòu)基本是按照驅(qū)動(dòng)程序設(shè)計(jì)思路,可以通過局部更改轉(zhuǎn)化為OS驅(qū)動(dòng)程序。在HDLC控制中,如何生成BD鏈和相應(yīng)的數(shù)據(jù)緩存區(qū),是一個(gè)關(guān)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯貼膜協(xié)議書
- 用車注冊協(xié)議書
- 營收分成協(xié)議書
- 燜肉飯戰(zhàn)略合作協(xié)議書
- 殼牌天然氣購買協(xié)議書
- 電腦租房協(xié)議書
- 垃圾箱使用合同協(xié)議書
- 砌化糞池協(xié)議書
- 貓舍售后協(xié)議書
- 藥商捐贈(zèng)協(xié)議書
- 霍山石斛教學(xué)課件
- 工程量核定單格式
- 壓瘡信息登記本
- 養(yǎng)老機(jī)構(gòu)收費(fèi)確認(rèn)單(長住版)
- 體育產(chǎn)業(yè)概論(第七章奧運(yùn)經(jīng)濟(jì))課件
- 山洪災(zāi)害防治知識(shí)競賽(答案)-洪災(zāi)知識(shí)競賽
- 檢察院書記員考試試題法院書記員考試試題
- 金風(fēng)科技5MW風(fēng)力發(fā)電機(jī)專業(yè)題庫分解
- 排球比賽計(jì)分表2
- 水中樁、水上平臺(tái)施工專項(xiàng)方案
- 儀器設(shè)備管理培訓(xùn)課件(共88頁).ppt
評(píng)論
0/150
提交評(píng)論