機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
TMS320DM642中利用McBSP與EDMA實(shí)現(xiàn)UART
TMS320DM642中利用McBSP與EDMA實(shí)現(xiàn)UART
 更新時(shí)間:2009-6-5 8:59:38  點(diǎn)擊數(shù):1
【字體: 字體顏色

作者:王曉劍、潘順良、沈?yàn)槿骸⑺巫由啤 挝唬罕本┖娇蘸教齑髮W(xué)、第二炮兵裝備研究院

引言

         TMS320DM642(簡(jiǎn)稱DM642)是TI公司推出的一款針對(duì)數(shù)字多媒體領(lǐng)域應(yīng)用的DSP,屬C6000系列,擁有8個(gè)并行處理單元,600MHz的CPU主頻下能實(shí)現(xiàn)4800MIPS的處理速度;在C64x的基礎(chǔ)上,它增加了面向多媒體應(yīng)用的相關(guān)外圍設(shè)備和接口,主要包括:3個(gè)可配置的用于視頻輸入、輸出或傳輸流輸入的視頻口,面向音頻應(yīng)用的McASP(Multichannel Audio Serial Port),用于網(wǎng)絡(luò)傳輸?shù)?0/100Mb/s Ethernet MAC等[1]。DM642的結(jié)構(gòu)和功能特性使其在視頻IP電話、視頻點(diǎn)播機(jī)頂盒、視頻****數(shù)字記錄儀等領(lǐng)域有著廣泛的應(yīng)用前景[2]。由于DM642中不具備異步串行通信(UART)接口,其與UART設(shè)備連接時(shí)存在一定的困難,本文給出了一種利用DM642已有的同步串口McBSP與EDMA實(shí)現(xiàn)UART的方法。

1、UART功能描述

        異步串行通信UART是以字符為信息單位傳送的,每個(gè)字符作為一個(gè)獨(dú)立的數(shù)據(jù)幀,可以隨機(jī)出現(xiàn)在數(shù)據(jù)流中,一旦開(kāi)始一個(gè)字符的傳輸,收發(fā)雙方以預(yù)先約定的傳輸速率,在時(shí)鐘的作用下,傳送字符中的每一位,即要求位與位之間有嚴(yán)格而精確的定時(shí)[3]?梢(jiàn),“異步”體現(xiàn)在幀與幀之間沒(méi)有嚴(yán)格的定時(shí)要求,而幀內(nèi)部位與位之間傳送是同步的。為了實(shí)現(xiàn)幀同步,UART采用起止式的幀格式,其每幀信息由四部分組成[3]:

  a. 1 位起始位(低電平,邏輯值0);
  b. 5~8 位數(shù)據(jù)位,承載要傳送的有效信息,傳送順序是低位在前高位在后;
  c. 1 位校驗(yàn)位(也可以沒(méi)有);
  d. 1或1.5或2位停止位,后接不定長(zhǎng)的空閑位,停止位和空閑位都規(guī)定為邏輯值為1的高電平。

2、實(shí)現(xiàn)方案

        在DM642中,可以通過(guò)軟件的方法,不增加硬件的復(fù)雜度,利用已有的McBSP和EDMA實(shí)現(xiàn)UART功能。

2.1 硬件設(shè)計(jì)

        DM642有2個(gè)McBSP端口,每個(gè)端口有7個(gè)引腳,除數(shù)據(jù)收發(fā)引腳(DX、DR)之外,還包括發(fā)送時(shí)鐘(CLKX)、接收時(shí)鐘(CLKR)、發(fā)送幀同步(FSX)、接收幀同步(FXR)和外部輸入時(shí)鐘等引腳,分別用于傳送數(shù)據(jù)、時(shí)鐘和幀同步,實(shí)現(xiàn)同步串行通信。將McBSP用于UART與UART設(shè)備進(jìn)行通信的硬件連接方式如圖1所示。值得注意的是,DR引腳與FSR引腳連接在一起,作為DM642的串行通信輸入端。對(duì)于McBSP而言,不論外部如何連接,始終認(rèn)為工作在同步方式下,DR與FSR相連,則是將數(shù)據(jù)線上的電平跳變直接引入到FSR端,當(dāng)FSR檢測(cè)到數(shù)據(jù)線上一幀的第一個(gè)下跳沿時(shí),McBSP認(rèn)為幀同步信號(hào)到來(lái)。McBSP 的發(fā)送時(shí)鐘信號(hào)CLKX ,發(fā)送幀同步信號(hào)FSX ,接收時(shí)鐘信號(hào)CLKR 都是由DM642 內(nèi)部的采樣率發(fā)生器產(chǎn)生。

 
圖1  DM642與UART設(shè)備的連接
 2.2 軟件設(shè)計(jì)

        同步串口依賴三條分離的信號(hào)線(數(shù)據(jù)、幀同步和時(shí)鐘)來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳輸,而異步通信只是在一根信號(hào)線上進(jìn)行。要用同步串口實(shí)現(xiàn)異步傳輸,需要在通過(guò)在數(shù)據(jù)的首尾加入起始位和停止位,讓接收方知道數(shù)據(jù)傳輸何時(shí)開(kāi)始和停止。用McBSP實(shí)現(xiàn)UART功能,除了對(duì)McBSP進(jìn)行正確設(shè)置外,還需要正確設(shè)置EDMA,對(duì)McBSP收發(fā)數(shù)據(jù)進(jìn)行軟件處理。EDMA實(shí)現(xiàn)內(nèi)存到McBSP之間的高效數(shù)據(jù)搬移,數(shù)據(jù)處理軟件對(duì)待發(fā)送的數(shù)據(jù)進(jìn)行編碼,對(duì)接收到的數(shù)據(jù)進(jìn)行解碼。

(1)McBSP的設(shè)置

        每個(gè)McBSP端口對(duì)應(yīng)一組控制寄存器,主要包括:串行接口控制寄存器(SPCR)、接收/發(fā)送控制寄存器(RCR/XCR)、采樣頻率發(fā)生寄存器(SRGR)、引腳控制寄存器(PCR)等。初始化時(shí),通過(guò)設(shè)置這些寄存器相關(guān)位的值來(lái)實(shí)現(xiàn)功能定制,主要包括波特率設(shè)置、采樣時(shí)鐘模式設(shè)置、收發(fā)數(shù)據(jù)的幀結(jié)構(gòu)設(shè)置等。在McBSP的初始化設(shè)置中,值得注意的有以下幾點(diǎn):

a.波特率的設(shè)置

        由于McBSP時(shí)鐘與UART設(shè)備信號(hào)往往并不同步,不能保證McBSP時(shí)鐘正好與UART中幀同步信號(hào)的邊沿對(duì)齊,在異步信號(hào)與同步信號(hào)邊沿之間易產(chǎn)生偏移。而且,DSP的串行時(shí)鐘頻率并不能與UART的波特率嚴(yán)格匹配,存在速率偏斜,消除時(shí)鐘偏移和速率偏斜影響的最好方法是過(guò)采樣比特流。在本文中采用16倍波特率的采樣頻率。

         McBSP的采樣頻率選擇是可靠實(shí)現(xiàn)UART的關(guān)鍵,為了達(dá)到高的傳輸效率,必須能實(shí)現(xiàn)連續(xù)幀(也即下一幀的起始位緊隨前一幀的停止位)的檢測(cè)。McBSP中通過(guò)設(shè)置SRGR寄存器中分頻除數(shù)因子CLKGDV的值來(lái)選擇波特率,CLKGDV用8 bit來(lái)表示,取值范圍為0~255,其理想值由McBSP時(shí)鐘頻率和通信波特率確定[4]:
 CLKGDV=(McBSPCLK)/(16*bautrate)-1(1)
 其中,McBSPCLK取內(nèi)部時(shí)鐘源頻率,對(duì)于DM642,其取值大小為DSPCLK/4[5]。由于過(guò)采樣的容錯(cuò)性及對(duì)接收數(shù)據(jù)幀的停止位可僅以0.5位格式進(jìn)行解讀,使得CLKGDV可以在一定范圍內(nèi)取值而能保證收發(fā)數(shù)據(jù)的準(zhǔn)確性[6]:         上式中,PKTBITS為幀長(zhǎng)度;STOPBITS為停止位數(shù);RXPKTBITS為接收處理的幀長(zhǎng)度(停止位按0.5位處理)。

        下表給出了主頻600MHz的DM642在幾個(gè)典型波特率下的分頻因子取值(McBSPCLK=150M,采用8N1的數(shù)據(jù)幀格式:PKTBITS=10, STOPBITS=1, RXPKTBITS=9.5):
 表1 常用波特率下CLKGDV取值
 
   由于McBSP采樣采用了內(nèi)部時(shí)鐘,而且CLKGDV的值不能大于256,所以限制了通信波特率的最小值。比如想采用19200的波特率,是不可能實(shí)現(xiàn)的,因?yàn)榇藭r(shí)計(jì)算出的CLKGDV值超出了可設(shè)置范圍,如果在應(yīng)用中需要使用更小的波特率,可控制PCR中的CLKRM和CLKXM位來(lái)使用外部時(shí)鐘實(shí)現(xiàn)McBSP的采樣。
 b.關(guān)于幀同步的設(shè)置

        一幀數(shù)據(jù)的收發(fā)過(guò)程中,如果在相鄰數(shù)據(jù)位之間出現(xiàn)了下降沿,則可能會(huì)被誤檢測(cè)為“幀同步”信號(hào),對(duì)這樣的“假幀同步信號(hào)”的誤檢測(cè)會(huì)使收發(fā)數(shù)據(jù)丟失。可以通過(guò)控制RCR/XCR寄存器中RFIG/XFIG位忽略這些“假幀同步信號(hào)”,消除它們對(duì)傳輸過(guò)程的影響。

c.串行通信幀相位的選擇

         在DM642中,串行傳輸時(shí)幀中的每一位由于過(guò)采樣而表示為16位。對(duì)于一個(gè)傳輸,UART充許設(shè)置為半個(gè)位,因此,McBSP的傳輸口設(shè)為雙相位幀傳輸模式,前一相位為16位字長(zhǎng),后一相位為8位字長(zhǎng)格式,第一相位的字?jǐn)?shù)設(shè)為(起始位+數(shù)據(jù)位數(shù)+奇偶校驗(yàn)位數(shù)),而第二相的字?jǐn)?shù)為(2*停止位)。表2 給出了波特率38400,幀格式8N1下的McBSP0相關(guān)寄存器的設(shè)置值。
 表2 McBSP0相關(guān)寄存器的設(shè)置值(38400,8N1)
 
 (2)EDMA的設(shè)置

        EDMA 是DM642的一種重要的數(shù)據(jù)訪問(wèn)方式,有64個(gè)通道,每個(gè)通道都有一個(gè)事件與之關(guān)聯(lián),每個(gè)事件相當(dāng)于一個(gè)同步信號(hào),由事件觸發(fā)相應(yīng)通道的數(shù)據(jù)傳輸。在沒(méi)有CPU 參與的情況下,EDMA 控制器可以在后臺(tái)完成片內(nèi)存儲(chǔ)器和外設(shè)之間的數(shù)據(jù)搬移。為了實(shí)現(xiàn)高效的UART,利用EDMA來(lái)實(shí)現(xiàn)McBSP與存儲(chǔ)器之間的數(shù)據(jù)傳輸是一種理想的選擇。 以McBSP0為例,其發(fā)送和接收事件分別映射到EDMA的12和13通道。 由于McBSP中每一個(gè)字到來(lái)時(shí)都會(huì)產(chǎn)生REVT0事件,每發(fā)送一個(gè)字會(huì)產(chǎn)生XEVT0事件,與McBSP關(guān)聯(lián)的EDMA的通道必須設(shè)置為1D-1D的傳輸方式,實(shí)現(xiàn)單個(gè)字的傳輸請(qǐng)求。對(duì)于負(fù)責(zé)接收的12通道,源地址設(shè)置為McBSP的數(shù)據(jù)接收寄存器(DRR)地址,目的地址設(shè)置為存放數(shù)據(jù)的內(nèi)存區(qū)起始地址。由于DRR是固定的,源地址更新模式(SUM)設(shè)置為不變,而目的地址更新模式(DUM)設(shè)為增長(zhǎng)方式;對(duì)于負(fù)責(zé)發(fā)送數(shù)據(jù)傳輸?shù)?3通道,源地址設(shè)置為存放待發(fā)數(shù)據(jù)的內(nèi)存區(qū)起始地址,目的地址設(shè)置為McBSP的數(shù)據(jù)發(fā)送寄存器(DXR)地址,由于DXR是固定的,其SUM設(shè)置為增長(zhǎng)方式,而DUM設(shè)為不變。

(3)接收/發(fā)送的數(shù)據(jù)處理

        發(fā)送時(shí),用發(fā)送處理函數(shù)ProcessXmitData() 把數(shù)據(jù)塊編碼為UART發(fā)送的字,即擴(kuò)展每個(gè)數(shù)據(jù)位為16 bit 的字,加入幀起始位(0x0000)和停止位(0xffff),并將發(fā)送字塊放入發(fā)送緩沖器。

void ProcessXmitData (void)
{ ??????
/*指向數(shù)據(jù)發(fā)送緩沖區(qū)*/
xmitbufptr = (unsigned short *)xmitbuf;
for (i=0; i<(sizeof(xmitbuf)/sizeof(unsigned int)); i++)
{
/*初始化為全1,對(duì)應(yīng)于幀格式中停止位和空閑位的高電平*/
xmitbufptr[i] = 0xFFFF; /
}
/*保留一個(gè)幀長(zhǎng)數(shù)據(jù)為空閑的高電平*/
xmitbufptr = (unsigned short *)(xmitbuf+10);
/*對(duì)發(fā)送數(shù)據(jù)進(jìn)行處理,并將處理結(jié)果放入后續(xù)發(fā)送緩沖區(qū)中*/
for (i = 0 ; i < BUFFER_SIZE ;i + + )
{  
xmit_char = xmit_msg[ i ] ;
for (cnt = - 1 ;cnt <9 ;cnt + + ) /* 處理每一個(gè)待發(fā)送字符*/
{
if (cnt = = - 1)
xmitbufpt r + + = 0x0000 ;  /* 添加起始位* /
else if (cnt = = 8)
xmitbufpt r + + = 0xFFFF ;  /* 添加停止位*/
else if (xmit_char & (1 < < cnt ) )  / * 將1擴(kuò)展為0xFFFF */
xmitbufpt r + + = 0xFFFF ;  
else
xmitbufpt r + + = 0x0000 ; /* 將0 擴(kuò)展為0x0000 */
}
}
}

        值得注意的是,為了保證高的傳輸效率,上述的編碼采取了連續(xù)幀的發(fā)送方式;另外,接收方對(duì)數(shù)據(jù)包中幀起始位的檢測(cè)是對(duì)信號(hào)下降沿的判斷,因此對(duì)于數(shù)據(jù)包中的第一幀數(shù)據(jù),僅從低電平的起始位進(jìn)行編碼是不夠的,必須在起始位的低電平之前插入若干高電平,這樣才能生成標(biāo)志幀開(kāi)始的下降沿,否則一個(gè)數(shù)據(jù)包中的前幾個(gè)字符不能被接收方正確解碼。

        接收時(shí),EDMA 從DRR 寄存器中讀取擴(kuò)展的數(shù)據(jù),并把數(shù)據(jù)寫(xiě)入接收緩沖區(qū),當(dāng)EDMA 將所有數(shù)據(jù)移入接收緩沖區(qū)后,會(huì)發(fā)出中斷給CPU ,中斷處理程序調(diào)用接收處理函數(shù) ProcessRecvData ()將接收到的數(shù)據(jù)進(jìn)行解碼。

void ProcessRecvData (void)
{ ??????
/ * 處理接收緩沖區(qū)的數(shù)據(jù)* /
for (i = 0 ; i < BUFFER_SIZE ; i + + )
{
recv_char = 0 ;
for (cnt = - 1 ;cnt < 9 ;cnt + + )  / * 處理每一個(gè)接收幀 * /
{
if (cnt = = - 1 | | cnt = = 8 )
  recvbufpt r + + ;  /* 忽略起始位和停止位* /
el se
{
raw_data = recvbufpt r ;  / * 得到16 bit 的數(shù)據(jù)* /
recvbufpt r + + ;
recv_ val = VoteLogic ( raw_ data) ; / * 將該16 bit 的數(shù)據(jù)壓縮為1 bit * /
recv_char + = recv_val << cnt ;
}
}
recv_msg[ i ] = recv_char ;  / * 完成一個(gè)字符的解碼,存儲(chǔ)結(jié)果3*/
}  
}  

        其中,通過(guò)邏輯判斷函數(shù)vote_logic () 實(shí)現(xiàn)過(guò)采樣數(shù)據(jù)的容錯(cuò)處理,具體方法是:每解碼一個(gè)字時(shí)該函數(shù)先屏蔽掉高6位和低6位, 只檢測(cè)中間的4 位數(shù)據(jù)中“1”的個(gè)數(shù),當(dāng)大于等于3時(shí)對(duì)應(yīng)解碼為“1”,否則為“0”。

3、結(jié)束語(yǔ)

        針對(duì)DM642上不提供異步串行收發(fā)器接口,而只有同步串行接口的情況,本文充分利用DM642的片上硬件資源,并結(jié)合相應(yīng)的軟件處理,將同步接口轉(zhuǎn)換為異步串行接口,很好地解決了DM642與UART設(shè)備實(shí)現(xiàn)通信的問(wèn)題。該方法在作者開(kāi)發(fā)的基于DM642的視覺(jué)測(cè)量系統(tǒng)中已經(jīng)得到成功應(yīng)用。實(shí)踐證明,該方案下的通信系統(tǒng)數(shù)據(jù)傳輸正確、可靠,能夠很好地滿足工程應(yīng)用要求。

參考文獻(xiàn)

  [1] TMS320DM642 data manual(SPRS200D)[G]. TI Incorporated, December 2003.
  [2] TMS320DM642 Technical Overview( SPRU615)[R]. TI Incorporated, September 2002.
  [3] 劉樂(lè)善,歐陽(yáng)星明,劉學(xué)清.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用[M]. 武漢:華中科技大學(xué)出版社,2003.
  [4] TMS320C6000 McBSP: UART(SPRA633A)[R]. TI Incorporated, August 2001.
  [5] TMS320C6000 DSP Multichannel Buffered Serial Port (McBSP) Reference Guide(SPRU580D). TI Incorporated, September 2004.
  [6] Implementing a Software UART on the TMS320C54x with the McBSP and DMA (SPRA661A) [R]. TI Incorporated, November 2000.
<!--插入廣告JS代碼-->
  • 上一篇: 基于TMS320F2812實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
  • 下一篇: 基于DSP的智能控制器高可靠性分析與設(shè)計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(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ì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

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