<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM處理器的HDLC通信的DMA實(shí)現

基于A(yíng)RM處理器的HDLC通信的DMA實(shí)現

作者: 時(shí)間:2012-11-16 來(lái)源:網(wǎng)絡(luò ) 收藏

Hdlc_End_Device Hdle_Dev; //全局定義

Hdlc_End_Device *pDevice; //函數內部定義

pDevice=(Hdlc_End_Device *)Hdlc_Dev;

1.5 使用方式的程序設計

(1)初始化流程

初始化流程如圖3所示。

void HdlcInit(void); //系統啟動(dòng)HDLC主初始化函數

Int HdlcChannelInit(Hdlc_End_Device *pDrvCtrl); //關(guān)閉中斷源、復位控制器和HDLC控制寄存器、設置相關(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,HXXPTR寄存器裝入第1個(gè)BD地址void HdlcChannelStart(U32 channel); //連接中斷服務(wù)程序,打開(kāi)中斷,啟動(dòng)接收

(2)HDMA發(fā)送過(guò)程中斷服務(wù)程序

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

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

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

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

(3)HDMA接收過(guò)程及中斷服務(wù)程序

HDMA接收過(guò)程及中斷服務(wù)程序如圖5所示。

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

//HdlcFrameReceive ();

void HdlcFrameReceive(Hdle_End_Device *pDrvCtrl,U32 IntHDLCStatus);

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

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

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

2 操作系統(OS)設備驅動(dòng)接口

雖然程序是在A(yíng)RMstd251中編譯,但是整個(gè)結構基本是按照驅動(dòng)程序設計思路,可以通過(guò)局部更改轉化為OS驅動(dòng)程序。

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

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

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


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: ARM處理器 HDLC通信 DMA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>