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

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

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

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

?

  數字信號處理器因其高性能及強大的數據處理能力,而在通信和信號處理、自動控制等領域得到越來越廣泛的應用。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;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
一本色道久久综合一区| 久久激情视频免费观看| 亚洲专区在线视频| 这里只有精品在线播放| 99在线精品视频在线观看| 樱桃视频在线观看一区| 国内精品久久久久伊人av| 国产色视频一区| 国产日韩欧美亚洲一区| 国产欧美日韩亚州综合| 国产欧美日韩精品专区| 国产农村妇女毛片精品久久麻豆 | 久久精品亚洲热| 欧美有码在线观看视频| 久久国产色av| 久久美女性网| 麻豆久久精品| 欧美精品免费在线| 欧美日韩色婷婷| 国产精品福利av| 国产欧美一区二区三区沐欲 | 亚洲作爱视频| 亚洲性夜色噜噜噜7777| 亚洲欧美日韩天堂| 久久av最新网址| 久久亚洲国产精品日日av夜夜| 久久综合狠狠综合久久综合88 | 亚洲高清在线播放| 亚洲人成亚洲人成在线观看| 亚洲日本精品国产第一区| 亚洲精品黄色| 亚洲少妇在线| 欧美一区二区成人6969| 久久久www成人免费无遮挡大片 | 蜜桃av综合| 欧美日韩国产一级片| 国产精品高清网站| 国产一区二区三区奇米久涩 | 国产免费观看久久黄| 国产一区二区丝袜高跟鞋图片| 一区二区三区在线观看欧美| 亚洲欧洲一区二区在线播放| 亚洲视频1区2区| 欧美在线观看网站| 日韩视频免费| 午夜免费久久久久| 麻豆精品在线观看| 欧美天堂亚洲电影院在线播放| 国产日韩精品入口| 在线观看国产日韩| 一区二区三区福利| 久久精品一区四区| 亚洲视频久久| 久久久久久成人| 欧美日韩高清在线一区| 国产欧美一区二区精品婷婷| 91久久精品一区二区三区| 亚洲图片在线观看| 91久久久久久国产精品| 午夜精品福利一区二区蜜股av| 久久久综合网站| 欧美视频在线观看一区| 国内精品国产成人| 一本久道久久久| 亚洲国产三级在线| 亚洲免费综合| 欧美国产日韩视频| 国产欧美一区二区在线观看| 91久久午夜| 欧美一区二区三区在线观看视频| 日韩视频在线观看一区二区| 久久爱另类一区二区小说| 欧美日韩国产不卡| 今天的高清视频免费播放成人| aa亚洲婷婷| 亚洲激情小视频| 欧美在线你懂的| 欧美日韩色一区| 在线观看国产欧美| 午夜精品99久久免费| 9色精品在线| 麻豆国产va免费精品高清在线| 国产精品欧美日韩| 亚洲另类一区二区| 亚洲激情网址| 久久久久久久久伊人| 国产精品美女久久久久久2018| 亚洲国产精品久久久久婷婷884 | 一区二区三欧美| 蜜桃av一区二区三区| 国产日韩欧美综合在线| 一区二区三区视频在线观看| 亚洲精品一区中文| 久久久夜夜夜| 国产欧美va欧美va香蕉在| 一区二区三区国产在线| 日韩视频久久| 免费成人av在线| 狠狠做深爱婷婷久久综合一区| 亚洲欧美日韩天堂| 午夜精品久久久久久久99黑人| 欧美日韩一二三四五区| 亚洲日本电影| 亚洲精品婷婷| 欧美顶级少妇做爰| 一区二区三区自拍| 久久精品国产一区二区三| 欧美资源在线| 国产乱码精品一区二区三区忘忧草| 在线亚洲一区| 亚洲一区二区三区激情| 欧美日韩小视频| 日韩视频免费在线观看| aa级大片欧美三级| 欧美日韩国产首页| 日韩午夜一区| 亚洲午夜电影在线观看| 欧美三区在线| 亚洲午夜一级| 欧美在线播放高清精品| 国产精品拍天天在线| 亚洲专区一二三| 欧美一区二区三区视频免费| 国产精品一区免费观看| 亚洲欧美乱综合| 久久av最新网址| 国产一区二区丝袜高跟鞋图片| 欧美在线999| 久久婷婷麻豆| 在线免费精品视频| 亚洲美女电影在线| 欧美日韩免费一区| 亚洲午夜激情| 欧美淫片网站| 国产主播一区二区三区| 亚洲国产日韩一区二区| 欧美电影打屁股sp| 亚洲人成网站精品片在线观看| 夜夜夜精品看看| 国产精品成人在线观看| 亚洲一区激情| 久久亚洲图片| 亚洲欧洲一区| 亚洲在线视频观看| 国产色视频一区| 亚洲精品1区2区| 欧美日韩精品二区| 在线亚洲电影| 欧美在线一二三| 一区二区三区在线免费视频| 日韩视频一区二区三区| 欧美性生交xxxxx久久久| 亚洲欧美欧美一区二区三区| 久久久久一区二区三区| 亚洲激情女人| 香蕉成人伊视频在线观看 | 亚洲综合二区| 国产综合自拍| 一区二区三区四区五区在线| 国产精品日韩一区二区| 久久精品视频99| 欧美日韩视频在线| 欧美在线免费观看| 欧美大片一区二区| 亚洲一区二区三区精品动漫| 久久久久国产精品麻豆ai换脸| 亚洲黄色视屏| 欧美与黑人午夜性猛交久久久| 亚洲成人在线免费| 亚洲欧美一区二区视频| 影音先锋久久久| 亚洲欧美成人一区二区在线电影| 激情视频一区| 亚洲欧美另类国产| 在线看成人片| 亚洲欧美视频| 亚洲国产片色| 久久激情视频免费观看| 亚洲精品永久免费| 久久九九免费视频| 一区二区三区视频观看| 久久综合久久88| 亚洲伊人网站| 欧美国产在线观看| 午夜精品美女自拍福到在线| 欧美人妖在线观看| 亚洲第一黄色| 国产精品一区二区在线| 99视频精品全国免费| 国产亚洲美州欧州综合国| 中文日韩电影网站| 亚洲大片在线观看| 欧美在线播放高清精品| 日韩午夜电影| 免费h精品视频在线播放| 午夜精品福利电影| 欧美午夜精品理论片a级大开眼界| 亚洲黄网站黄| 国产在线麻豆精品观看| 亚洲欧美在线观看|