一、傳輸方式的選擇
為實(shí)現(xiàn)DSP與PC機(jī)之間的通信可以選用并行接口和串行接口兩種方式。與并行接口相比,串行接口最大的特點(diǎn)是減少了引腳數(shù)目、降低了設(shè)計(jì)的復(fù)雜性。目前幾乎所有的DSP都提供了串行接口,但是多數(shù)的接口是同步串口,而PC機(jī)的RS-232接口為異步串口。綜合DSP應(yīng)用系統(tǒng)中擴(kuò)展異步串行接口的各種實(shí)現(xiàn)方案,現(xiàn)將它們的優(yōu)缺點(diǎn)分析如下:
一是利用XF和BIO#管腳來實(shí)現(xiàn),在不擴(kuò)展其他硬件的情況下,用軟件實(shí)現(xiàn)異步數(shù)據(jù)傳輸格式。這種方法的硬件連接簡(jiǎn)單,但軟件程序復(fù)雜,加大了CPU的負(fù)擔(dān),所以不適合通信數(shù)據(jù)量大的場(chǎng)合。
二是在DSP的并行總線上擴(kuò)展UART芯片,用硬件來實(shí)現(xiàn)異步數(shù)據(jù)傳輸。其優(yōu)點(diǎn)是軟件實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是在總線上還要擴(kuò)展其他設(shè)備,使目標(biāo)系統(tǒng)復(fù)雜化。
三是利用DSP的多通道緩沖同步串行接口(McBSP),在擴(kuò)展適當(dāng)硬件的情況下,將同步數(shù)據(jù)變換為異步數(shù)據(jù)格式進(jìn)行傳輸,這樣就充分利用了DSP的片上資源,使硬件系統(tǒng)盡量簡(jiǎn)單化。
綜合考慮硬件連接和軟件編程的方便性,本系統(tǒng)采用第三種方案,應(yīng)用MAXIM公司的異步串行收發(fā)器MAX3111E與TMS320VC5402的McBSP構(gòu)成通訊接口。
二、MAX3111E簡(jiǎn)介
MAX3111E是MAXIM公司專門為微處理系統(tǒng)進(jìn)行最優(yōu)化設(shè)計(jì)的UART。內(nèi)設(shè)SPI/MICROWIRE兼容的串行接口可節(jié)省線路板空間和I/O插腳數(shù)。它包括一個(gè)振蕩器和一個(gè)可編程波特率發(fā)生器、一個(gè)可屏蔽的中斷源、一個(gè)8字節(jié)的接收FIFO等。其應(yīng)用SPI接口技術(shù)直接與主控制器之間進(jìn)行通信,通信速率可達(dá)230kbps,它還包括四個(gè)RS-232電平轉(zhuǎn)換器,無(wú)需再接入普通的MAX232進(jìn)行電平轉(zhuǎn)換,這樣只需一個(gè)芯片就實(shí)現(xiàn)了具有SPI接口的微控器與PC進(jìn)行異步數(shù)據(jù)傳輸?shù)墓δ堋S捎诋惒綌?shù)據(jù)的發(fā)送和接收由MAX3111E以硬件方式實(shí)現(xiàn),所以就軟件編程而言,需要考慮的也只是TMS320VC5402與MAX3111E之間的同步數(shù)據(jù)通信。這樣,可以用最簡(jiǎn)單的硬件連接和軟件編程實(shí)現(xiàn)同步到異步的串行數(shù)據(jù)格式轉(zhuǎn)換。
三、SPI協(xié)議簡(jiǎn)介
串行外設(shè)接口SPI是MOTOROLA公司推出的一種同步串行接口,是目前比較常用的串行總線接口標(biāo)準(zhǔn)。SPI協(xié)議是一種主從方式工作的同步串行接口,該協(xié)議通常要求一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,其包括以下四種信號(hào):
串行數(shù)據(jù)輸入信號(hào)(也稱為主入從出,或MISO);
串行數(shù)據(jù)輸出信號(hào)(也稱為主出從入,或MOSI);
移位時(shí)鐘信號(hào)(也稱為SCK);
從器件使能信號(hào)(也稱為SS#)。
主器件通過提供移位時(shí)鐘信號(hào)和從器件使能信號(hào)控制通信的進(jìn)程。從器件使能信號(hào)是一個(gè)可選的低電平有效信號(hào),由它控制從器件是否進(jìn)行串行數(shù)據(jù)輸入和輸出。當(dāng)不使用從器件使能信號(hào)時(shí),主從器件之間的數(shù)據(jù)通信將受移位時(shí)鐘的控制,在這種工作方式下,從器件必須一直處于選通狀態(tài),并且只允許有一個(gè)從器件和主器件進(jìn)行數(shù)據(jù)的通信。一個(gè)典型的SPI接口原理圖如圖1所示。
圖1 典型SPI接口圖
四、串口通信的硬件設(shè)計(jì)
MAX3111E通過SPI接口與VC5402進(jìn)行16位數(shù)據(jù)的全雙工同步通信,即DSP傳送16位數(shù)據(jù)給MAX3111E的同時(shí)即可接收到MAX3111E發(fā)送的16位數(shù)據(jù)。DSP所發(fā)送的16位數(shù)據(jù)中除了有要發(fā)送的數(shù)據(jù)外,還包括傳輸格式控制字,而MAX3111E向主設(shè)備發(fā)送的16位數(shù)據(jù)中除了接收到的數(shù)據(jù)外,還包括中斷標(biāo)志等狀態(tài)位。這樣,兩個(gè)設(shè)備控制、狀態(tài)、數(shù)據(jù)信息的實(shí)時(shí)通信保證了數(shù)據(jù)傳輸?shù)目煽啃院头€(wěn)定性。
TMS320VC5402作為主設(shè)備,MAX3111E作為從設(shè)備時(shí)接口電路圖見圖2。
圖2TMS320VC5402和MAX3111E接口電路圖
DSP的發(fā)送時(shí)鐘信號(hào)(BCLKX)作為MAX3111E的串行時(shí)鐘輸入,發(fā)送幀同步脈沖信號(hào)(BFSX)作為MAX3111E的片選信號(hào)(CS)。 發(fā)送器輸出信號(hào)(BDX)與DIN連接作為發(fā)送數(shù)據(jù)線,接收器輸入信號(hào)(BDR)與DOUT連接為接收數(shù)據(jù)線,實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸。MAX3111E的TX與T1IN連接,RX與R1OUT連接,從而利用其片內(nèi)的轉(zhuǎn)換器實(shí)現(xiàn)TTL到RS-232電平的轉(zhuǎn)換。MAX3111E的中斷信號(hào)(IRQ#)與DSP的外部中斷相連,實(shí)現(xiàn)外部中斷事件的響應(yīng)。
系統(tǒng)中將TMS320VC5402配置為SPI的主器件,MAX3111E配置為SPI的從器件。為此必須對(duì)McBSP的寄存器進(jìn)行相應(yīng)的設(shè)置,才能將VC5402和MAX3111E進(jìn)行連接,構(gòu)成串口通訊電路。此時(shí)需將McBSP配置為與SPI協(xié)議相兼容的方式來使用,而McBSP的時(shí)鐘停止模式與SPI協(xié)議相兼容,因此配置串行口控制寄存器SPCR1中CLKSTP位和管腳配置寄存器PCR中的CLKXP位從而設(shè)置是否使McBSP工作在時(shí)鐘停止模式下,它們兩者共同提供了時(shí)鐘停止模式的四種結(jié)構(gòu),對(duì)應(yīng)的四種時(shí)序如圖3所示。
SPI串行協(xié)議中,主設(shè)備提供時(shí)鐘信號(hào)并控制數(shù)據(jù)傳輸過程。為了實(shí)現(xiàn)SPI方式的可靠通信,必須保證接口時(shí)序合理匹配。即合理設(shè)置VC5402的McBSP滿足MAX3111E的時(shí)序要求。MAX3111E接口電路時(shí)序圖如圖4所示。
由圖3和圖4的對(duì)比可知,McBSP的時(shí)鐘停止模式2 (CLKSTP=11b, CLKXP=0b)的工作時(shí)序剛好和MAX3111E數(shù)據(jù)收發(fā)格式相吻合,所以在系統(tǒng)中采用時(shí)鐘停止模式2作為TMS320VC5402與MAX3111E協(xié)同工作的時(shí)序標(biāo)準(zhǔn)。
五、串口通信的軟件設(shè)計(jì)
DSP串口通信的軟件設(shè)計(jì)主要包括發(fā)送和接收兩部分。發(fā)送部分程序采用主動(dòng)方式,接收部分程序采用被動(dòng)方式啟動(dòng)中斷,響應(yīng)中斷,發(fā)送/接收數(shù)據(jù)的過程。此過程主要是McBSP串口初始化程序、中斷處理程序和數(shù)據(jù)收發(fā)程序設(shè)計(jì)。
1.McBSP的初始化程序
初始化程序是保障串行接口快速、準(zhǔn)確的進(jìn)行數(shù)據(jù)傳輸?shù)幕A(chǔ)。McBSP串口初始化主要是將串口配置為SPI主模式。考慮到代碼的可移植性,利用DSP開發(fā)集成環(huán)境CCS采用C語(yǔ)言編寫程序如下所示:
//系統(tǒng)復(fù)位后,RRST#=XRST#=0,所以在程序中不用再設(shè)置這兩位為0。
*(volatile u16 *) SPSA_ADDR(1) = SPCR1;
*(volatile u16 *) SPSD_ADDR(1) = 0x1800;
//設(shè)置CLKSTP=11,使能McBSP的SPI功能。
*(volatile u16 *) SPSA_ADDR(1) = PCR;
*(volatile u16 *) SPSD_ADDR(1) = 0x0A08;
//設(shè)置CLKXP=0;CLKXM=1;FSXM=1;FSXP=1。
*(volatile u16 *) SPSA_ADDR(1) = SRGR1;
*(volatile u16 *) SPSD_ADDR(1) = 0x001D;
//設(shè)置CLKGDV=29,即設(shè)置時(shí)鐘分頻系數(shù)為30。
*(volatile u16 *) SPSA_ADDR(1) = SRGR2;
*(volatile u16 *) SPSD_ADDR(1) = 0x2000;
//設(shè)置CLKSM=1;FSGM=0。
*(volatile u16 *) SPSA_ADDR(1) = RCR1;
*(volatile u16 *) SPSD_ADDR(1) = 0x0040;
//設(shè)置RWDLEN1=010,即設(shè)置數(shù)據(jù)包長(zhǎng)度為16位
*(volatile u16 *) SPSA_ADDR(1) = RCR2;
*(volatile u16 *) SPSD_ADDR(1) = 0x0001;
//設(shè)置RDATDLY=01,給BFSX信號(hào)提供正確的建立時(shí)間。
*(volatile u16 *) SPSA_ADDR(1) = XCR1;
*(volatile u16 *) SPSD_ADDR(1) = 0x0040;
//設(shè)置XWDLEN1=010,即設(shè)置數(shù)據(jù)包長(zhǎng)度為16位。
*(volatile u16 *) SPSA_ADDR(1) = XCR2;
*(volatile u16 *) SPSD_ADDR(1) = 0x0001;
//設(shè)置XDATDLY=01,給BFSX信號(hào)提供正確的建立時(shí)間。
*(volatile u16 *) SPSA_ADDR(1) = SPCR2;
*(volatile u16 *) SPSD_ADDR(1) = 0x0040;
//在不改變先前設(shè)置的情況下,設(shè)置GRST#=1,使采樣率發(fā)生器退出復(fù)位狀態(tài)。
delay(100);//設(shè)置一定的延時(shí),來滿足配置時(shí)序的要求。
*(volatile u16 *) SPSA_ADDR(1) = SPCR1;
*(volatile u16 *) SPSD_ADDR(1) = 0x1801;
//在不改變先前設(shè)置的情況下,設(shè)置RRST#=1,使接收器退出復(fù)位狀態(tài)。
*(volatile u16 *) SPSA_ADDR(1) = SPCR2;
*(volatile u16 *) SPSD_ADDR(1) = 0x0041;
//在不改變先前設(shè)置的情況下,設(shè)置XRST#=1,使發(fā)送器退出復(fù)位狀態(tài)。
2.中斷處理程序的設(shè)計(jì)
MAX3111E有四個(gè)中斷源,分別為Pr(接收幀校驗(yàn)位中斷)、R(接收數(shù)據(jù)有效中斷)、RA/PE(幀格式錯(cuò)誤中斷)、T(發(fā)送緩沖器空中斷),但卻只有一個(gè)中斷輸出管腳。因此當(dāng)中斷產(chǎn)生時(shí),TMS320VC5402必須要對(duì)MAX3111E進(jìn)行一次讀操作,通過讀取數(shù)據(jù)中的R和T等標(biāo)志位來判斷是何種中斷,然后進(jìn)行相應(yīng)的操作。
應(yīng)注意的是,在進(jìn)行中斷方式數(shù)據(jù)傳輸時(shí),雖然TMS320VC5402的McBSP有自身的發(fā)送和接收中斷,但由于McBSP與MAX3111E同步串行數(shù)據(jù)傳輸速率高于MAX3111E將數(shù)據(jù)以一定波特率異步發(fā)送速率,如果應(yīng)用McBSP的發(fā)送中斷,將造成發(fā)送數(shù)據(jù)的丟失。同時(shí)在SPI協(xié)議中,數(shù)據(jù)的傳輸是由SPI主設(shè)備發(fā)起的,所以在SPI方式下的McBSP并不能產(chǎn)生接收中斷。因此,系統(tǒng)設(shè)計(jì)中的關(guān)鍵之一是將MAX3111E的中斷信號(hào)連接至DSP的外部中斷,以實(shí)現(xiàn)在中斷方式下可靠、正確的數(shù)據(jù)傳輸。
3.數(shù)據(jù)收發(fā)程序的設(shè)計(jì)
MAX3111E通過前兩個(gè)數(shù)據(jù)位(D15和D14)來區(qū)分是進(jìn)行數(shù)據(jù)的發(fā)送還是接收;是進(jìn)行芯片的配置還是進(jìn)行狀態(tài)的讀取。需要注意的是,上述的四種操作都是通過寫操作來完成的。在進(jìn)行任何寫操作時(shí),MAX3111E會(huì)自動(dòng)的將相應(yīng)的狀態(tài)值和接收到的數(shù)據(jù)先后通過McBSP的接收轉(zhuǎn)換寄存器(RSR)和接收緩沖寄存器(RBR),最后到達(dá)數(shù)據(jù)接收寄存器(DRR)中。對(duì)于McBSP而言,只要DRR中的數(shù)據(jù)不被讀取,則RBR中的數(shù)據(jù)就不會(huì)復(fù)制到DRR中。然而RBR不具有數(shù)據(jù)保持功能,即當(dāng)RSR接收到16位數(shù)據(jù)后,就會(huì)立即更新RBR,從而造成接收數(shù)據(jù)的丟失。因此在編寫程序時(shí),每執(zhí)行一次寫操作后,不管DRR中的數(shù)據(jù)是否有用,都要對(duì)其進(jìn)行一次讀操作。若是數(shù)據(jù)有用,則對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理;若數(shù)據(jù)無(wú)用,則不對(duì)數(shù)據(jù)進(jìn)行任何的處理。這樣可以使DRR在任意時(shí)刻都包含最新接收的數(shù)據(jù)和狀態(tài)。
六、本文小結(jié)
本文簡(jiǎn)要的介紹了SPI通信協(xié)議以及將TMS320VC5402的McBSP改為SPI接口并與MAX3111E相連接來實(shí)現(xiàn)DSP和PC機(jī)通信的方法。實(shí)踐證明本設(shè)計(jì)方法在常用波特率下使用查詢和中斷方式都可以進(jìn)行可靠的數(shù)據(jù)通信。
(作者單位:上海交通大學(xué))