一種基于TMS320C55x DSP的UART通信設計
摘要:全雙工異步串行通信在TMS320C55xDSP上的通常實現(xiàn)方式是利用DSP的McBSP接口加外接芯片實現(xiàn),這種設計方法增加了實現(xiàn)UART的硬件成本和電路設計復雜度。提出了一種直接利用DSP的MCBSP接口和DMA通道實現(xiàn)UART的方法,給出了使用C語言和CSL的編程方法。與傳統(tǒng)實現(xiàn)方法相比,具有實現(xiàn)成本低,硬件電路簡單,移植性強等特點,稍加修改可應用于C5000和C6000各系列芯片中。
關鍵詞:DSP;全雙工異步串行通信;多通道緩沖串口;DMA;過采樣
1引言:
MS320C55x數(shù)字信號處理器通過多通道緩沖串口(McBSP)提供了與外設的多種同步串行通信方式。然而,由于DSP中串行通信由數(shù)據(jù)信號、幀同步信號和時鐘3種信號配合實現(xiàn),其中幀同步信號和數(shù)據(jù)信號由不同的數(shù)據(jù)線傳輸。而異步串行通信則在一根傳輸線上實現(xiàn)數(shù)據(jù)發(fā)送或接收,且不需要專門的時鐘信號線。因此DSP與異步設備的接口,如UART通信實現(xiàn)相對復雜,需要對McBSP的相關寄存器進行正確初始化。DSP中實現(xiàn)全雙工異步通信的通常做法是使用專用的串行接口芯片,如TL16C550,這種設計方法編程相對簡單,但增加了設計成本和電路復雜度。本文介紹了一種TMS320C55xDSP芯片利用McBSP和DMA直接實現(xiàn)UART的方法,基于該方法實現(xiàn)的DSP異步串行通信模塊已成功應用于控制偏振圖像采集處理的DSP硬件設備中。 www.51kaifa.com/
2UART在DSP上的實現(xiàn)
異步串行通信要求DSP能夠模擬和檢測到UART的幀信號。由于DSP串口是同步串口,而且DSP時鐘為高速時鐘,經(jīng)分頻或倍頻后無法保證與UART的異步串行時鐘精確同步。DSP的幀同步信號無法與UART的幀信號同步,造成串行通信信號中信號位的偏移。最好的解決方法是減小偏移和對接收的數(shù)據(jù)流進行過采樣,本文采用了對UART信號的16倍過采樣。www.51kaifa.com/
2.1McBSP設置
DSP的McBSP通過3種信號實現(xiàn)同步通信:數(shù)據(jù)、幀同步和時鐘。異步通信發(fā)送和接收各在一條線上進行,具有自己的幀時序。
UART的通信時鐘由使用的通信波特率(每秒傳輸?shù)臄?shù)據(jù)位個數(shù))決定,通常為2400,9600,19200等。DSP與UART異步通信時,由于DSP的內(nèi)部時鐘頻率通常都不是UART時鐘頻率的整數(shù)位,因而會造成雙方通信時數(shù)據(jù)位的偏移,為了盡量減小這種偏移,McBSP的串口時鐘需要正確的設置時鐘頻率以達到與UART波特率相匹配。
數(shù)據(jù)包(PKTBITS)由起始位、數(shù)據(jù)位、奇偶校驗位和停止位組成,起始位為1位,停止位通常為1,1.5,2位,數(shù)據(jù)數(shù)通常為8位,如何使用校驗,那么數(shù)據(jù)包還包括1位校驗位。以上數(shù)據(jù)位中,每1位都被DSP以16倍波特率的時鐘頻率過采樣。
發(fā)送時,為保證UART能收到半個停止位,需要將DSP的McBSP發(fā)送端口設置為2相的數(shù)據(jù)幀。第1相為16位的數(shù)據(jù)字,第2相為8位的數(shù)據(jù)字。那么第1相數(shù)據(jù)長度為(起始位+數(shù)據(jù)位+校驗位)個字,第2相長度為停止位的字長。發(fā)送時的總幀長(TxPKTBITS)為這兩相的總字長。接收數(shù)據(jù)包格式與發(fā)送相似,其結構如圖2所示。DSP的串口發(fā)送引腳與外部串口設備的接收引腳相連,不使用FSX引腳和CLKX引腳。
接收時,McBSP通過接收幀同步信號引腳(FSR)檢測數(shù)據(jù)的到來,根據(jù)幀同步信號的不同,幀同步信號可配置成上升沿觸發(fā)或下降沿觸發(fā),由于UART的起始位為低電平,因此使用下降沿觸發(fā)。將UART發(fā)送數(shù)據(jù)信號與McBSP的數(shù)據(jù)接收引腳DR和FSR相連,實現(xiàn)用UART的發(fā)送信號觸發(fā)McBSP的接收幀同步信號。在McBSP接收一幀數(shù)據(jù)期間,為了防止下降沿再次觸發(fā)一幀數(shù)據(jù)接收,McBSP應該設置為接收數(shù)據(jù)包期間忽略幀同步信號。
圖1UART接收數(shù)據(jù)包的幀格式
接收完一幀數(shù)據(jù)后,需要對數(shù)據(jù)解碼,收于DSP發(fā)送和接收時鐘是UART串口時鐘頻率的16位,因此每個UART數(shù)據(jù)位對應于DSP中1個16位字(停止位對應8位字)。在McBSP接收寄存器中將接收幀設置為2相,第1相16位字,字長為RxPKTBITS(起始位+數(shù)據(jù)位+校驗位),第2相為8位字,對應于停止位字數(shù)。此外,接收幀延時值應該設置為1位。
3.2McBSP時鐘采樣率設置
McBSP與UART通信時,McBSP接收到一幀的幀同步信號后,該幀期間之后出現(xiàn)的幀同步信號將被忽略。為了獲得最大數(shù)據(jù)流量,一幀數(shù)據(jù)發(fā)送結束時,其停止位后緊接著為起始位,幀同步信號的檢測依賴于停止位到起始位的下降沿。為了正確檢測到幀同步信號,高電平應該至少保持一個時鐘周期以上時間。
理想情況下,串口時鐘信號邊沿與數(shù)據(jù)位邊沿精確對應,此時,每個數(shù)據(jù)位對應16倍時鐘周期。起始位和串口時鐘的下降沿偏最小,如圖3所示。
圖2McBSP串口時鐘與UART時鐘精確同步時的時序
正常通信時,McBSP的幀同步信號與UART串口的時鐘之間會有一定的偏差,如圖所示。
圖3McbSP串口時鐘與UART時鐘存在偏差時的時序
存在偏差時,為保證McBSP能檢測到接收到信號的下降沿,McBSP的串口采樣時鐘頻率必須準確設置。其設置方法如公式1、2所示。其中,DIV是McBSP寄存中串口采樣時鐘分頻值,DSPCLK是DSP的CPU時鐘頻率,baudrate為通信波特率。
(1)
(2)
通信波特率為19200,DSP時鐘頻率為75MHz,接收數(shù)據(jù)包為10位(1位起始位,8位數(shù)據(jù)位,無校驗,1位停止位:PKTBITS=10,RxPKTBITS=9.5),根據(jù)公式1計算得DIV,由于分頻值DIV為整數(shù),因此取DIV。根據(jù)公式2計算得DIV,取整后得DIV。取DIV最佳值為244。TMS320VC55xDSP以常用波特率通信時的分頻值如表1所示。
表1常用波特率下TMS320VC55x的McBSP串口DIV值
75-MHz DSP Clock | 100-MHz DSP Clock | |||||
Baud Rate | Divisor Minimum | Exact Divisor | Divisor Maximum | Divisor Minimum | Exact Divisor | Divisor Maximum |
19200 | 240 | 244.14 | 248 | 320 | 325.52 | 331 |
38400 | 120 | 122.07 | 124 | 160 | 162.76 | 165 |
57600 | 80 | 81.68 | 82 | 107 | 108.51 | 110 |
115200 | 40 | 40.69 | 41 | 54 | 54.25 | 55 |
3.2DMA設置
UART通信時,DSP發(fā)送和接收到的數(shù)據(jù)存儲在數(shù)據(jù)存儲器中,為了實現(xiàn)DSP的高速處理,減少DSP響應McBSP數(shù)據(jù)寄存器中斷的次數(shù)。發(fā)送和接收數(shù)據(jù)與McBSP發(fā)送和接收寄存器DXR和DRR之間的數(shù)據(jù)傳輸通過DMA通道完成。這里以使用DMA通道4和通道5為例,其中,DMA通道4作為數(shù)據(jù)接收通道,DMA通道5做為數(shù)據(jù)發(fā)送通道。將通道4和通道5的同步事件分別設置為McBSP串口接收事件和串口發(fā)送事件,DMA通道4的源地址為McBSP的接收寄存器DRR地址,目的地址為數(shù)據(jù)存儲器中存放接收數(shù)據(jù)的變量地址;DMA通道5的源地址為數(shù)據(jù)存儲器中待發(fā)的數(shù)據(jù),目的地址為McBSP的DXR寄存器地址。每當McBSP接收到數(shù)據(jù)時,會觸發(fā)DMA通道4將接收到的數(shù)據(jù)拷貝到DSP數(shù)據(jù)存儲器的相應置,同時目的地址指針自動加1;發(fā)送數(shù)據(jù)時,DMA通道5將待發(fā)送數(shù)據(jù)拷貝到DXR,將數(shù)據(jù)依次發(fā)出。
發(fā)送數(shù)據(jù)時,待發(fā)字符被打包成適于UART接收的數(shù)據(jù)格式,以發(fā)送16進制無符號數(shù)0xAA為例,首先發(fā)送起始位,然后是數(shù)據(jù)位最低位,最后發(fā)送停止位。該數(shù)值在數(shù)據(jù)存儲器中按地址由低到高的存放格式為:0x0000,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0xFFFF。
接收到數(shù)據(jù)后,取過采樣到的每個16位二進制數(shù)據(jù)字的中間四位,若中間四位中1的個數(shù)不小于3,則表示收到當前的UART數(shù)據(jù)位值為1;若中間四位中0的個數(shù)不小于3,則表示收到當前的UART數(shù)據(jù)位值為0。否則認為數(shù)據(jù)傳輸出錯。
4程序設計
在McBSP和DMA寄存器設置正確的基礎上,利用TI公司提供的CodeComposerStudio集成開發(fā)環(huán)境編寫了UART串口通信軟件,軟件開發(fā)中使用了CSL(片上支持庫),使整個開發(fā)過程快速、直觀、具有很強的可讀性。程序流程如圖所示:
圖4TMS320VC55xUART程序流程圖
5實驗分析
硬件和軟件設計完成后,進行了測試實驗,實驗上位機為PC機,DSP處理器為TI公司的TMS320VC5509A,通信波特率為19200,DSP外部晶振頻率為20MHz,CPU時鐘頻率為100MHz,UART數(shù)據(jù)格式為1位起始位,8位數(shù)據(jù)位,1位停止位,無校驗。多次實驗結果表明數(shù)據(jù)發(fā)收準確,無誤碼現(xiàn)象發(fā)生。
6結論
DSP系統(tǒng)直接與外部全雙工異步串行設備的通信時,通過正確的使用DSP上的McBSP和DMA通道,利用16倍過采樣原理準確的計算McBSP通信接口的采樣值和配置相關寄存器,能夠?qū)崿F(xiàn)DSP與外部異步設備的可靠通信。與傳統(tǒng)的采用串并轉(zhuǎn)換芯片的實現(xiàn)方法相比,具有更低的成本更簡單的外部電路。本文中的程序針對TI公司的TMS320VC5509xDSP芯片編寫,通過對少數(shù)寄存器的修改,該程序可直接應用于TI公司的C5000和C6000系列DSP芯片上。
本文作者創(chuàng)新點:提出了一種直接利用DSP的McBSP接口和DMA通道實現(xiàn)UART的方法,具有實現(xiàn)成本低,硬件電路簡單,移植性強等特點。
參考文獻:
1TMS320VC5509AFixed-PointDigitalSignalProcessorDataManual.TexasInstruments
2TMS320VC5501/5502/5503/5507/5509/5510DSPMultichannelBufferedSerialPort(McBSP)ReferenceGuide.TexasInstruments
3ImplementingaSoftwareUARTontheTMS320C54xwiththeMcBSPandDMA.TexasInstruments
4TMS320VC5503/5507/5509/5510DSPDirectMemoryAccess(DMA)ControllerReferenceGuide
5TMS320C55xChipSupportLibraryAPIReferenceGuide.TexasInstruments
6TMS320C6000McBSP:UART.TexasInstruments
7安穎,劉麗娜.基于DSP的高速信號采集與處理系統(tǒng)的設計【J】.微計算機信息,2005,1:57-58。
評論