在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM處理器的HDLC通信的DMA實現(xiàn)

      基于ARM處理器的HDLC通信的DMA實現(xiàn)

      作者: 時間:2012-11-16 來源:網(wǎng)絡 收藏

      Hdlc_End_Device Hdle_Dev; //全局定義

      Hdlc_End_Device *pDevice; //函數(shù)內(nèi)部定義

      pDevice=(Hdlc_End_Device *)Hdlc_Dev;

      1.5 使用方式的程序設計

      (1)初始化流程

      初始化流程如圖3所示。

      void HdlcInit(void); //系統(tǒng)啟動HDLC主初始化函數(shù)

      Int HdlcChannelInit(Hdlc_End_Device *pDrvCtrl); //關閉中斷源、復位控制器和HDLC控制寄存器、設置相關的寄存器、時鐘源

      void TxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);

      void RxBD_initialize(U32 channel,Hdlc_End_Device *pDrvCtrl);//初始化發(fā)送接收BD鏈,gpXxBDStart指針指向第1個BD,HXXPTR寄存器裝入第1個BD地址void HdlcChannelStart(U32 channel); //連接中斷服務程序,打開中斷,啟動接收

      (2)HDMA發(fā)送過程中斷服務程序

      HDMA發(fā)送過程及中斷服務程序如圖4所示。void Transmit_Frame(Hdlc_End_Device *pDrvCtrl);//準備數(shù)據(jù)調(diào)用HdlcFramsSend()

      Int HdlcFrameSend(Hdlc_End_Device *pDrvCtrl,U8 *pData,U32 len);

      在發(fā)送過程中,首先檢查gpTxBDStart指向的BD的所有權:如果為DMA所用,應當退出;如果CPU擁有,則可按照HDLC幀的格式填入gpTxBDStart指向的BD對應的緩沖數(shù)據(jù)區(qū),然后設置BD的控制信息,設置所有權關系為DMA和LASTF指示位,啟動發(fā)送(使能Tx、TxDMA),并把gpTxBDStart移到下一個位置。

      void HdlcTx_Isr(void);//發(fā)送中斷服務程序,通常只做檢測任務,生成錯誤統(tǒng)計報告

      (3)HDMA接收過程及中斷服務程序

      HDMA接收過程及中斷服務程序如圖5所示。

      void HdlcRx_Isr(void); //如果接收正常完成,調(diào)用

      //HdlcFrameReceive ();

      void HdlcFrameReceive(Hdle_End_Device *pDrvCtrl,U32 IntHDLCStatus);

      void HdlcFrameDataGet(Hdlc_End_Device *pDrvCtrl,U8 *pFrameData,U32 len);

      數(shù)據(jù)到達,進入接收中斷服務程序。如果接收1幀完成標志位(RxFA)設置,可以進入數(shù)據(jù)接收程序,由HdlcFrameDataGet()負責把數(shù)據(jù)從接收緩沖數(shù)據(jù)區(qū)送用戶數(shù)據(jù)區(qū),進行處理;如果錯誤,生成錯誤類型報告。

      數(shù)據(jù)接收完畢,應該把當前的BD交還給接收DMA控制器,設置對應的所有權為DMA,然后把gpRxBDStart移到BD鏈中的下一個位置。

      2 操作系統(tǒng)(OS)設備驅(qū)動接口

      雖然程序是在ARMstd251中編譯,但是整個結(jié)構(gòu)基本是按照驅(qū)動程序設計思路,可以通過局部更改轉(zhuǎn)化為OS驅(qū)動程序。

      在HDLC控制中,如何生成BD鏈和相應的數(shù)據(jù)緩存區(qū),是一個關鍵的問題。通常在無操作系統(tǒng)開發(fā)的環(huán)境中,這些相應的存儲器分配可以采用全局的方式,固定在相應的系統(tǒng)內(nèi)存區(qū)域,并遇射到Noncache區(qū),使用指針快速訪問。

      在使用OS的情況下,例如pSOS、VxWorks,相應的存儲器分配采用動態(tài)(calloc())的方式,尤其需要注意的在退出前必須回收資源。驅(qū)動程序設計的目的要為OS提供一個透明(Transparent)的接口,實現(xiàn)OS的I/O例程和硬件驅(qū)動無縫銜接。

      同時,構(gòu)建一個良好的設備結(jié)構(gòu)也是十分必要的,可以方便設置、加載和卸載處理。


      上一頁 1 2 3 下一頁

      評論


      相關推薦

      技術專區(qū)

      關閉