新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C44B0X與C54X DSP的接口設計

        S3C44B0X與C54X DSP的接口設計

        作者: 時間:2012-06-26 來源:網絡 收藏

        3.1.3:HDLC通道控制寄存器配置

        控制寄存器(HCON)控制HDLC通道工作情況,這里介紹常用的控制選項,詳細的內容和配置方法請參閱4510數據手冊。

        1. 波特率產生/DPLL使能:如果使用了內部的波特率產生器或者DPLL,為使它們工作,需要設置HDLC通道的控制寄存器中相應位來啟動工作。

        2. 收發FIFO深度設置:當使用CPU方式進行HDLC收發時,可設置收發FIFO深度。FIFO深度可設置為8字節/32字節。當使用DMA方式時,此設置無效。

        3. DMA發送停止/跳過方式設置:使用DMA方式發送時,如果當前使用的發送BUFFER描述符不屬于DMA所有,可根據此設置來停止DMA發送,或是跳到發送BUFFER描述符鏈表中的下一個描述符。

        4. DMA接收停止/跳過方式設置:使用DMA方式接收時,如果當前使用的接收BUFFER描述符不屬于DMA所有,可根據此設置來停止DMA接收,或是跳到接收BUFFER描述符鏈表中的下一個描述符。

        5. 通道空閑標志模式設置:確定通道空閑時發送哪種空閑標志(全1或者0X7E)。

        6. Flag發送模式設置:確定幀分隔方式(單FLAG或者雙FLAG方式)。

        7. 收發CRC校驗設置:確定HDLC收發過程中是否進行CRC校驗。

        8. HDLC環回設置:用于HDLC環回測試,正常工作時HDLC環回應打開。

        3.1.4:HDLC通道中斷控制寄存器(HINT)配置

        中斷控制寄存器(HINT)控制HDLC收發中斷的產生。共有24種中斷產生條件,這里介紹DMA方式收發時編程中用到的一些中斷產生條件。詳細內容請參閱4510數據手冊。

        對于HDLC通道發送中斷:

        1. 發送FIFO下沖:此條件(TxUIE)當發送FIFO產生下沖時發生。此時DMA發送被自動禁止,因此發送中斷處理程序中必須首先清除HDLC狀態寄存器(HSTAT)中的相應位,然后在下次發送前使能DMA發送。

        2. DMA發送Abort:此條件(DTxABTIE)當DMA發送放棄時產生,發送中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。

        3. DMA發送完畢:此條件(DTxFDIE)當DMA發送完一幀時產生,發送中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。

        4. DMA發送BUFFER描述符指針空:此條件(DTxNLIE)當當前DMA發送BUFFER描述符中指向下一個描述符的指針為空時產生。發送中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。并重新初始化發送BUFFER描述符鏈表。

        5. DMA發送BUFFER描述符不屬于DMA所有:此條件(DTxNOIE)當當前DMA發送BUFFER描述符不屬于DMA所有時發生。發送中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。

        對于HDLC通道接收中斷:

        1. 接收Abort:此條件(RxABTIE)當接收到Abort幀時產生,接收中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。

        2. DMA接收完畢:此條件(DRxFDIE)當DMA接收到一個完整幀時發生,接收中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。

        3. DMA接收BUFFER描述符指針空:此條件(DRxNLIE)當當前DMA接收BUFFER描述符中指向下一個描述符的指針為空時產生。接收中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位。并重新初始化接收BUFFER描述符鏈表。

        4. DMA接收BUFFER描述符不屬于DMA所有:此條件(DRxNOIE)當當前DMA接收BUFFER描述符不屬于DMA所有時發生。此時DMA接收被自動禁止。因此接收中斷處理程序中必須清除HDLC狀態寄存器(HSTAT)中的相應位,并作相應的錯誤處理,避免再次發生這種錯誤,然后使能DMA接收功能,否則不能繼續接收數據。

        3.1.5:站址寄存器(HSAR0-HSAR3)和站址屏蔽寄存器(HMASK)初始化

        4510利用在4個站址寄存器(HSAR0-HSAR3)中保存的站點地址配合站址屏蔽寄存器(HMASK)完成接受過程中的地址比較功能,如果一個HDLC數據幀的地址不符,此幀將被簡單地丟棄而不做任何處理。具體的設置請參閱4510數據手冊。

        3.1.6:DMA收發BUFFER描述符鏈表結構建立和指針寄存器初始化

        4510的HDLC通道利用BUFFER描述符這種數據結構完成DMA操作,接收和發送BUFFER

        描述符以及描述符鏈表結構分別如附圖2,3,4所示。我們的應用中,建立了雙向環形鏈表的鏈表結構,而不是單向環形鏈表結構,雙向環形鏈表結構與單項環形鏈表結構不同的地方是每個鏈表中的元素多了一個指向前一元素的指針。這樣在軟件中進行鏈表操作時不用每次都遍歷整個鏈表,提高了處理速度。

        鏈表結構建立后,需要初始化收發描述符指針寄存器,對于發送BUFFER描述符指針寄存器(HDMATxPTR),將發送BUFFER描述符鏈表結構的頭節點地址寫入其中,之后每完成一次DMA發送操作,4510會自動更新其中的地址,指向下一個發送BUFFER描述符;對于接收BUFFER描述符指針寄存器(HDMARxPTR),將接收BUFFER描述符鏈表結構的頭節點地址寫入其中,之后每完成一次DMA接收操作,4510會自動更新其中的地址,指向下一個接收BUFFER描述符。

        3.1.7:使能HDLC通道的收發功能

        所有的初始化工作做完后,就可以使能HDLC通道的收發功能。此時要分兩種情況:

        一:如果使用DMA方式收發,則需要使能HDLC通道控制寄存器(HCON)中的TxEN,RxEN,DTxEN,DRxEN四個比特位。不過,一般在發送時,有數據后才需要打開發送使能。

        二:如果使用CPU方式收發,則需要使能HDLC通道控制寄存器(HCON)中的TxEN,RxEN兩個比特位,DTxEN,DRxEN兩個比特位一定不能打開。

        3.2: HDLC通道數據發送及中斷處理過程

        3.2.1:HDLC通道數據發送過程

        DMA方式下HDLC通道的數據發送過程可分為以下幾個步驟:

        1. 讀取發送幀描述符指針寄存器HDMATxPTR,得到當前發送幀描述符的地址,進而得到整個發送幀描述符的內容。

        2. 得到發送幀描述符中幀數據BUFFER起始地址。

        3. 將準備好的HDLC幀拷貝到BUFFER中。

        4. 設置當前幀描述符中的相應控制位。

        5. 將發送幀描述符的OWERSHIP位設置為DMA所有。

        6. 使能HDLC的DMA發送。

        完成上面各步驟后,HDLC通道的DMA機制會自動將BUFFER中的數據拷貝到HDLC通道

        TxFIFO中發送出去。一幀發送完畢后,4510自動將已使用的發送BUFFER描述符的OWERSHIP位設置為CPU所有,并將幀描述符指針寄存器HDMATxPTR中的內容更新為下一個未使用的發送BUFFER描述符地址。

        3.2.2:HDLC通道數據發送中斷處理過程

        當一幀數據通過DMA方式發送完畢,或者發送過程中出現了可引起中斷的異常情況,此時軟件會進入中斷處理程序。引起中斷的情況中斷控制寄存器的設置中已做了說明。在我們的編程中,HDLC通道發送中斷處理過程主要完成以下一些功能:

        1. 進入中斷后,首先清除4510中斷指示寄存器INTPEND中相應的標志位。

        2. 如果DMA發送成功,則進行數據幀發送成功狀態計數,并清除HDLC通道狀態寄存器HSTAT中的相應狀態位。

        3. 如果發送出現異常,則完成相應的異常狀態計數,并清除HDLC通道狀態寄存器HSTAT中的相應位。其中有兩個異常會影響以后的DMA操作,一:發送下沖異常(TxU),發生此異常時,處理器會自動禁止DMA發送功能,因此下一次發送時必須重新使能DMA發送功能;二:下一個發送幀描述符指針為空異常(DTxNL),發生此異常時,說明建立的DMA發送BUFFER描述符鏈表結構出現了錯誤,因此需要重新初始化DMA發送BUFFER描述符鏈表結構。

        4. 做完上述處理可關閉HDLC通道的DMA發送功能,等待有數據需要發送時再重新打開,也可以不關閉。

        3.3: HDLC通道數據接收工作原理及中斷處理過程

        3.3.1:HDLC通道數據接收工作原理

        DMA方式下HDLC通道的數據接收工作主要在HDLC通道初始化和DMA接收中斷處理中完成,這里主要分析HDLC通道接收工作原理,明白了數據接收原理,會給我們編程帶來極大的方便。HDLC通道接收工作原理如下所述:

        1. 通道初始化階段,我們建立并初始化了HDLC接收BUFFER描述符鏈表結構,并將鏈表頭節點的地址寫入到HDLC接收BUFFER描述符指針寄存器HDMARxPTR,這是正確完成DMA方式接收的前提,下面的工作都是在這個前提下自動完成的。

        2. 當有數據到來時,DMA機制會從HDMARxPTR指向的接收BUFFER描述符中找到接收BUFFER起始地址,然后把收到的數據寫入到BUFFER中。

        3. 如果接收無誤,4510自動更新HDMARxPTR寄存器的值,使其指向下一個還未使用的接收BUFFER描述符,以備下一次接收使用。使用過的接收BUFFER描述符的OWERSHIP位將自動設置為CPU所有,因此為了能再次使用這個接收BUFFER描述符,必須將它的OWERSHIP位重置為DMA所有。

        4. 可以對已存儲在接收BUFFER中的數據作各種自定義的操作,實現自定義功能。



        關鍵詞: S3C44B0X C54X DSP

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长乐市| 竹北市| 井冈山市| 平山县| 台中县| 四子王旗| 崇文区| 揭东县| 天镇县| 桂阳县| 兰坪| 巴林右旗| 平昌县| 台东市| 历史| 酒泉市| 霍山县| 双峰县| 高密市| 固镇县| 郎溪县| 宝应县| 偏关县| 伽师县| 黔西县| 上林县| 清水河县| 顺义区| 永善县| 慈利县| 崇礼县| 盐源县| 慈溪市| 防城港市| 青岛市| 永昌县| 阳泉市| 江源县| 老河口市| 吉林省| 滨州市|