《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 基于TMS320C6713的McBSP和EDMA實現串口通信

基于TMS320C6713的McBSP和EDMA實現串口通信

2009-05-19
作者:林培杰,黃比得,黃春暉

  摘 ?要: 針對TI公司的DSP芯片TMS320C6713,利用片上同步多通道緩沖串行口(McBSP)和增強型直接存儲器存取(EDMA)實現了串口通信功能。該方案解決了芯片只有同步串口而不能進行異步傳輸的問題,豐富了接口功能。
  關鍵詞: TMS320C6713;多通道緩沖串行口;增強型直接存儲器存?。淮谕ㄐ?/FONT>

?

  數字信號處理器因其高性能及強大的數據處理能力,而在通信和信號處理、自動控制等領域得到越來越廣泛的應用。TMS320C6713(簡稱C6713)作為TI公司TMS320C6000系列的DSP,經常被用于圖像、語音處理等方面。在大多數應用系統中,往往需要實現DSP與PC機或者其他外設之間的異步串行通信。但C6713所提供的串口是同步串口,并不支持通用異步串行收發器標準[1-2]。本文設計了一種利用C6713已有的同步串口McBSP與EDMA實現異步串口通信的方法[3]。
1 硬件接口電路設計
  C6713有兩個McBSP(McBSP0,McBSP1)口,每個端口有7 個引腳,除數據收發引腳(DX、DR) 之外,還包括發送時鐘(CL KX)、接收時鐘(CL KR)、發送幀同步(FSX)、接收幀同步(FSR)和外部輸入時鐘(CL KS)等引腳,分別用于傳送數據、時鐘和幀同步,實現同步串行通信。
  當McBSP工作在串行口方式時,McBSP與串口的連接圖如圖1所示。對于McBSP 而言,不論外部如何連接,始終認為工作在同步方式下。當串口發送的數據中有幀信息和數據信息時,串口的TxD與McBSP的DR、FSR相連,就可以將數據線上的電平跳變直接引入到FSR端;當FSR檢測到數據線上一幀的第一個下跳沿時,McBSP認為幀同步信號到來。

?

2 C6713上的程序設計
  為了實現 McBSP與UART通信,本文使用過采樣的方法將同步串口模擬成異步串口進行通信,即將 McBSP發送接收數據的時鐘頻率設置為UART發送接收波特率的16倍。當McBSP發送數據時,軟件將每一位擴展為16 bit發送出去,即1被編碼為Oxffff,0被編碼為0x0000;當McBSP接收數據時,軟件同樣也要將接收到的每個16 bit字解碼還原為1 bit。這樣做使同步串口以比特為單位發送數據,可以很方便地模擬出異步串口的數據格式。同時,為了讓DSP不需要頻繁地對McBSP進行讀/寫操作,采用EDMA方式發送接收數據,提高了DSP的工作效率。McBSP與數據緩存之間的數據傳送由EDMA的通道14和通道15完成。通道14完成數據發送,通道15完成數據接收。
2.1 初始化程序
  初始化程序流程如圖2所示。在初始化程序中主要對McBSP及EDMA的一些參數進行設置。


  假設傳輸以8IN1的格式,發送接收都設為雙相幀模式,第一相是開始位和8個數據位,第二相是停止位。停止位編碼為8 bit字,以便于調整為1.5 bit停止位。應該對McBSP相關寄存器位的值初始化,以及EDMA進行相應操作[4]。
2.1.1 McBSP的參數配置
  (1)引腳控制寄存器(PCR)的配置
  FSXM=1 FSXP=1:允許采樣率發生器產生低電平有效的起始位;
  FSRM=0 FSRP=1:低電平有效的起始位用作McBSP 的接收幀同步輸入端;
  CLKRM=1 CLKXM=1:用內部采樣率發生器產生串行時鐘;
  PCR的值為0xB0C。
  (2)接收/發送控制寄存器(RCR/XCR)的配置
  (R/X)PHASE=1:使能雙相位幀傳輸模式;
  (R/X)FRLEN1=8:數據幀的前半部為9個字;
  (R/X)FRLEN2=1:數據幀的后半部為2個字;
  (R/X)WDLEN1=2:數據幀的前半部均為16 位的字;
  (R/X)WDLEN2=0:數據幀的后半部均為8位的字;
  (R/X)COMPAND=0:不進行壓縮;
  (R/X)FIG=1:忽略幀同步的數據傳輸;
  (R/X)DATDLY=0:數據傳輸不延遲;
  RCR和XCR的值都為0x11040840。
  (2)采樣率發生器寄存器(SRGR)的配置
  FSGM=0:當數據從DXR向XSR拷貝時產生接收幀同步信號;
  CLKSM=1:采樣率發生器的時鐘來源于內部CPU時鐘信號;
  CLKGDV=(McBSP的時鐘頻率)/(16×波特率)-1,時鐘頻率必須進行適當的配置,以便產生16 倍波特率的頻率。本文采用的C6713的CPU時鐘頻率為225 MHz,McBSP的時鐘頻率為112.5 MHz,波特率為57 600 b/s。此時計算得到CLKGDV=121;SRGR的值為0x20000079。
2.1.2 EDMA的設置
  (1)打開通道:采用CSL中的EDMA_open函數打開相應的通道,返回值賦給hEdma14、hEdma15。設置如下:
  hEdma14=EDMA_open(EDMA_CHA_XEVT1,EDMA_OPEN_
RESET);
  hEdma15=EDMA_open(EDMA_CHA_REVT1,EDMA_OPEN_
RESET);
  (2)分配鏈接表地址
  采用CSL中的EDMA_allocTable(-1)函數,系統將自動隨機地在參數RAM中專門為鏈接提供的地址空間內分配一個地址作為鏈接使用。函數的返回值就是分配到的地址,把它分別賦值給hEdmaLINK與hEdmaLINK2。設置如下:
  hEdmaLINK=EDMA_allocTable(-1);
  hEdmaLINK2=EDMA_allocTable(-1);
  設置源和目的地址:CSL中方便地提供了一個獲得McBSP的DRR和DXR寄存器的地址函數。只需要定義一個句柄MCBSP_Handle hMcbsp1,在主程序中必須先對hMcbsp1進行賦值,利用MCBSP_open函數打開一個McBSP通道,如:
  hMcbsp1=MCBSP_open(MCBSP_DEV1,MCBSP_OPEN_RESET);
  定義完hMcBSP1后就可以把hMcBSP1作為參數帶入MCBSP_getXmtAddr函數。引用結構體成員,就能對其賦值:
  edmaXmitParam.dst=MCBSP_getXmtAddr(hMcbsp1);
  edmaRcvParam.src=MCBSP_getRcvAddr(hMcbsp1);
  (3)配置EDMA鏈接
  根據CSL中提供的函數,采用以下方法進行鏈接:
  EDMA_config(hEdma14,&edmaXmitParam);
  EDMA_config(hEdma15,&edmaRcvParam);
  EDMA_link(hEdma14,hEdmaLINK);
  EDMA_link(hEdmaLINK,hEdmaLINK);
  EDMA_link(hEdma15,hEdmaLINK2);
  EDMA_link(hEdmaLINK2,hEdmaLINK2);
  (4)使能EDMA通道與關閉
  采用CSL提供的庫函數進行使能EDMA通道:
  EDMA_enableChannel(hEdma14);
  EDMA_enableChannel(hEdma15);
  同時,在EDMA使用完之后要用如下語句對其復位及關閉操作。
  EDMA_RSET(CIER,0x0);
  EDMA_close(hEdma14);
  EDMA_close(hEdma15);?
2.2 發送子程序
  發送時,用發送轉換子程序void ProcessTransmitData(void)把一塊數據轉變為UART發送的字,即擴展每個數據位為 16 bit的字。發送轉換子程序把這個發送字塊放人發送緩沖器,并且幀開始位(0x0000)和停止位(0xffff)也放在了特定的位置。發送子程序框圖如圖3所示。

2.3 接收子程序及容錯程序
  接收時,EDMA從 DRR寄存器中讀取擴展的數據,并把數據寫人接收緩沖區。當 EDMA將所有數據移人接收緩沖區后,會發出中斷給 CPU,然后軟件才調用接收轉換子程序void ProcessReceive-Data(void),把接收到的數據進行解碼。接收子程序框圖如圖4所示。

?


  值得注意的是:由于McBSP在接收數據過程中使用的是內部時鐘方式,接收的數據可能會有一定的偏移量,所以解碼過程應對數據進行容錯處理。調用一個數據邏輯判斷子程序unsigned short vote logic(unsigned short value),用以確定每一個數據位的值,每解碼一個字時該函數先屏蔽掉高6位和低6位,只檢測中間的4 bit數據;當等于1011、1100、1101、1110、1111、0111時,對應解碼為“1”,否則為“0”。
3 PC機程序設計
  本方案利用PC機與C6713進行串行通信。下傳時通過對數據文件讀取,將數據傳入DSP;上傳時在主機端把數據寫入文件進行保存。PC機軟件采用VC++平臺開發,其中包括以下幾部分功能[5]
  (1)串口初始化。采用CreateFile( )函數獲得串口設備的句柄,利用SetupComm( )函數設置緩沖區,并使用SetCommState( )重新初始化串口;
  (2)串口讀寫:調用ReadFile( )函數進行串口數據接收,調用WriteFile( )函數進行串口數據發送;
  (3)關閉串口:利用PurgeComm( )停止收發數據,清除緩沖區,調用CloseHandle(hCom)關閉串口設備句柄。
  在進行批量數據傳輸,例如靜態圖像傳輸時,還規定了主機與從機雙方必須共同遵守一些協議,包括控制命令、數據收送、超時重發等協議來完成通信,確保數據發送的完整性。
4 傳輸性能分析
??? 將系統應用于靜態圖像壓縮應用,以傳輸圖像為例,下載一幅256×256的BMP圖像,上傳壓縮后的JPEG圖像,一次傳輸的緩存區設置為2 048 B。先來討論下載過程中的實際用時,實際下載時間=數據傳輸時間+程序運行時間。圖像下載的理論用時可以用下式來表示:
  

  估算結果表明,實際用時大約是理論用時的1.5倍。對于實際用時大于理論用時并不難理解,實際下載時間=數據傳輸時間+程序運行時間。其中,程序運行時間又包括串口緩沖區的讀寫時間以指令執行時間。這里的緩沖區讀寫時間是雙方面的,包括上位機與DSP。在VC++中,由于使用的是MsCommon控件,在接收數據包時,這個控件通常用于傳輸控制命令,并不適用于做大量數據通信,需要手動進行延時350 ms才能完整地收到大小為2 048的數據包。這里的350 ms包括了等待每一幀2 048數據傳輸的時間0.28 s加上VC++中讀緩沖區的延時時間。對于下載來說,圖像大小正好是2 048的整數倍,可分為96次來傳輸。對于上傳JPEG數據流來說,壓縮后實際大小是8 455 B,并且4.13,但程序中可分為5次來傳輸。因此實際傳輸時間是5×0.28=1.4 s,再加上延時間與代碼執行時間就大概符合實際測試的2.2 s。
  通過C6713的McBSP和EDMA實現異步串行通信。目前,已經完成了軟硬件調試,并已將它應用靜態圖像數據的傳輸。試驗結果表明,該方法硬件結構簡單可靠,基本滿足實時性要求,取得了很好的效果,具有一定的應用價值。


參考文獻
[1] TMS320C6000 McBSP:UART,TI Incorporated[J/OL],2004.http://www.TI.com.
[2] TMS320C6000 Peripherals Reference Guide,TI Incorporated[J/OL],2004.http://www.ti.com.
[3] TMS320C6000 DSP enhanced direct memory access(EDMA)controller reference guide.TI Incorporated[J/OL].http://www.ti.com.
[4] 任麗香,馬淑芬,李方慧.TMS320C6000系列DSPs的原理與應用[M].北京:電子工業出版社,2000.
[5] 龔建偉,熊光明.VC++/Turbo C串口通信編程實踐[M].北京:電子工業出版社,2004.

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:[email protected]。
主站蜘蛛池模板: 手机看片1024精品日韩 | 欧美天堂 | 成人午夜影院在线观看 | 成人免费视频软件网站 | 99久久99热久久精品免费看 | 成人爽a毛片在线视频网站 成人爽爽大片在线观看 | 国产小视频在线高清播放 | 97影院理论在线观看 | 亚洲毛片在线免费观看 | 久久久久国产午夜 | 草草影院视频 | 在线中文字幕日韩 | 一个人看的www片免费视频中文 | 日韩一区二区在线视频 | 精品91精品91精品国产片 | 亚洲在线观看免费视频 | 欧美视频www | 久久精品视频16 | 亚洲一区二区三区精品国产 | 国内精品自产拍在线观看91 | 久久好看视频 | 日本三级香港三级网站 | 欧美性xxxx极品高清 | 精品日韩一区二区三区 | 亚洲欧洲eeea在线观看 | 自拍视频啪| 日本人视频网站一 | 91精品久久久久含羞草 | 国产成人综合在线视频 | 中国一级性生活片 | 久久黄色片 | 91免费国产高清观看 | 一级女性生活片 | 在线观看91精品国产入口 | 成人免费小视频 | 国产精品久久国产精品99盘 | 国产在线播放成人免费 | 国产偷自拍 | 一级片在线观看 | 久久精品综合国产二区 | 成人18免费入口 |