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