日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
基于ARM處理器的HDLC通信的DMA實(shí)現(xiàn)
基于ARM處理器的HDLC通信的DMA實(shí)現(xiàn)
 更新時(shí)間:2008-8-16 21:11:01  點(diǎn)擊數(shù):18
【字體: 字體顏色

//下一個(gè)BD指針

}sBuffer Descriptor;

HDLC幀(Frame)定義(如表1):

typedef struct HDLCFRAME{

U8 address[4]; //地址

U8 control; //控制信息通道為FFH

U8 information[1505]; //信息域,有效的數(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,FM0,FM1,Manchester

//……時(shí)鐘選擇(發(fā)送/接收時(shí)鐘源)……

sBufferDescriptor gpTxBDStart;/*當(dāng)前的發(fā)送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)初始化流程

初始化流程如圖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,HDMAXXPTR寄存器裝入第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幀的格式填入gpTxBDStart指向的BD對(duì)應(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ù)程序,通常只做檢測(cè)任務(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 IntHDLCStatus);

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è)置對(duì)應(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)鍵的問題。通常在無操作系統(tǒng)開發(fā)的環(huán)境中,這些相應(yīng)的存儲(chǔ)器分配可以采用全局的方式,固定在相應(yīng)的系統(tǒng)內(nèi)存區(qū)域,并遇射到Noncache區(qū),使用指針快速訪問。

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

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

  • 上一篇: 1-wire網(wǎng)絡(luò)的電纜選擇與保護(hù)
  • 下一篇: SX系列通信控制器
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1