引言
現(xiàn)今的工控系統(tǒng)中,為了提高系統(tǒng)的實(shí)時(shí)性和適用性,一般采用DSP來完成核心算法與控制,而使用MCU來實(shí)現(xiàn)人機(jī)對(duì)話,以實(shí)現(xiàn)實(shí)時(shí)控制功能。這樣,DSP和MCU需要一種高效的數(shù)據(jù)總線來完成它們之間的大量數(shù)據(jù)傳送。SPI總線由于占用的接口線少,通信效率高,并且大部分處理器芯片都支持,因而是一種理想的設(shè)計(jì)方案。
針對(duì)交流伺服系統(tǒng)實(shí)際使用的要求,采用TI公司的高性能DSP控制器TMS320LF2407A(簡(jiǎn)稱“2407A”)作為控制核心;選用TI公司生產(chǎn)的MSP430系列單片機(jī)中的MSP430F149作為人機(jī)界面的控制芯片,來實(shí)現(xiàn)按鍵和數(shù)據(jù)采集以及顯示的功能;采用SPI串口通信實(shí)現(xiàn)單片機(jī)與DSP之間的數(shù)據(jù)傳輸。
1 系統(tǒng)硬件的構(gòu)成
1.1 MSP430
MSP430系列單片機(jī)是TI公司近幾年開發(fā)的新一代單片機(jī)。該單片機(jī)在設(shè)計(jì)上打破常規(guī)采用了全新的概念,其突出的優(yōu)點(diǎn)是低電源電壓、超低功耗、多種功能。由于其功能遠(yuǎn)遠(yuǎn)超過其他系列單片機(jī)的功能,因而又稱為“混合型單片機(jī)”。MSP430具有非常高的集成度,單片集成了多通道的12位A/D轉(zhuǎn)換、片內(nèi)精密比較器、多個(gè)具有PWM功能的定時(shí)器、片內(nèi)USART、看門狗定時(shí)器、片內(nèi)數(shù)控振蕩器、大量的I/O端口以及大容量的片內(nèi)存儲(chǔ)器。同時(shí),MSP430F149是Flash存儲(chǔ)器型單片機(jī),具有良好的仿真開發(fā)技術(shù),設(shè)置有JTAG仿真接口和高級(jí)語(yǔ)言編譯器。在系統(tǒng)支持軟件下,在線實(shí)現(xiàn)對(duì)目標(biāo)系統(tǒng)的硬件調(diào)試及軟件開發(fā),包括匯編語(yǔ)言、C語(yǔ)言、連接及動(dòng)態(tài)調(diào)試,具有單步、多斷點(diǎn)和跟蹤,并且開放全部存儲(chǔ)器、寄存器,可以方便、可靠地對(duì)系統(tǒng)進(jìn)行軟硬件開發(fā)[12]。
基于以上特點(diǎn),該系列單片機(jī)在便攜式儀表、智能傳感器、實(shí)用檢測(cè)儀器、電機(jī)控制、家庭自動(dòng)化等領(lǐng)域的應(yīng)用較為普遍。
1.2 TMS320LF2407A
2407A是TI公司為滿足工業(yè)控制應(yīng)用,尤其是電機(jī)控制而設(shè)計(jì)的。把一個(gè)高性能的 DSP核和許多外圍設(shè)備集成到單片內(nèi)。2407A的40 MIPS的處理速度可以滿足快速地處理大量數(shù)據(jù)和算法的需要。
2407A具有豐富的外設(shè)模塊: 3K字的Flash程序存儲(chǔ)器、1.5K字的數(shù)據(jù)/程序RAM、544字雙口RAM(DARAM)和2K字的單口RAM(SARAM)、2個(gè)事件管理器EVA和EVB、16通道輸入的A/D轉(zhuǎn)換器,具有看門狗定時(shí)器模塊(WDT)、串行通信接口(SCI)、16位的串行外設(shè)接口模塊(SPI)、控制器局域網(wǎng)絡(luò)(CAN)2.0B模塊、基于鎖相環(huán)的時(shí)鐘發(fā)生器、高達(dá)40個(gè)可單獨(dú)編程或復(fù)用的通用輸入/輸出引腳、5個(gè)外部中斷。由此可以看出,2407A確實(shí)有著很強(qiáng)的實(shí)時(shí)處理能力,不失為高性能伺服驅(qū)動(dòng)控制的理想器件之一[3]。
1.3 硬件接口設(shè)計(jì)與SPI通信的實(shí)現(xiàn)
SPI通信設(shè)備在硬件連接上只需要將主機(jī)的發(fā)送與從機(jī)的接收相連,將主機(jī)的接收與從機(jī)的發(fā)送相連,將主機(jī)產(chǎn)生的時(shí)鐘信號(hào)輸出至從機(jī)的時(shí)鐘引腳上。單片機(jī)與外設(shè)的硬件連接如圖1所示。
圖1 MSP430F149與DSP的接口連接電路
單片機(jī)MSP430F149作為串行通信的主機(jī), DSP 2407A則作為從機(jī)(slave)。其中,SPICLK為SPI時(shí)鐘引腳, SPISIMO為SPI從動(dòng)輸入/主動(dòng)輸出,SPISOMI為從動(dòng)輸出/主動(dòng)輸入,SPISTE為從動(dòng)發(fā)送使能。
從圖1可以看出,SPI通過一根時(shí)鐘引線將主機(jī)和從機(jī)同步,因此,它的串行數(shù)據(jù)交換不需要增加起始位、停止位等用于同步的格式位,直接將要傳送的數(shù)據(jù)寫入主機(jī)的SPI發(fā)送數(shù)據(jù)寄存器。這個(gè)寫入過程自動(dòng)啟動(dòng)主機(jī)的發(fā)送過程,即在同步時(shí)鐘SPICLK的節(jié)拍下把SPITXBUF的內(nèi)容一位一位地移到引腳SPISIMO;對(duì)于從機(jī),同樣在SPICLK的節(jié)拍下將出現(xiàn)在引腳SPISIMO上的數(shù)據(jù)一位一位地移到從機(jī)的移位寄存器,當(dāng)接收完一個(gè)完整的數(shù)據(jù)塊后,設(shè)置中斷標(biāo)志通知從機(jī)這個(gè)數(shù)據(jù)塊已接收完畢,并同時(shí)將移位寄存器接收到的內(nèi)容復(fù)制到從機(jī)的SPI接收數(shù)據(jù)寄存器SPIRXBUF。可以看出,用戶編程只需在發(fā)送數(shù)據(jù)時(shí)寫數(shù)據(jù)到SPI發(fā)送數(shù)據(jù)寄存器,在接收數(shù)據(jù)時(shí)讀SPI接收數(shù)據(jù)寄存器,其余的工作都由SPI模塊自動(dòng)完成[4]。
2 軟件設(shè)計(jì)
MSP430F149和DSP都允許用戶用C語(yǔ)言和匯編語(yǔ)言進(jìn)行編程。系統(tǒng)中DSP對(duì)電機(jī)實(shí)現(xiàn)實(shí)時(shí)控制,對(duì)運(yùn)行速度要求嚴(yán)格,所以程序采用匯編語(yǔ)言實(shí)現(xiàn)。MSP430實(shí)現(xiàn)按鍵顯示、數(shù)據(jù)管理和指令傳輸?shù)裙δ埽瑢?duì)運(yùn)行速度要求不高,所以采用C語(yǔ)言實(shí)現(xiàn)。
軟件設(shè)計(jì)的主要任務(wù)是:初始化相應(yīng)的寄存器;單片機(jī)在相應(yīng)的界面發(fā)送數(shù)據(jù);DSP及時(shí)接收到達(dá)串口的數(shù)據(jù),識(shí)別并保存數(shù)據(jù)。
2.1 通信協(xié)議的設(shè)置
兩個(gè)設(shè)備之間要實(shí)現(xiàn)相互通信,首先必須規(guī)定用以傳輸數(shù)據(jù)的協(xié)議。一般來說,主機(jī)發(fā)送命令和配置信息給從機(jī),而從機(jī)則向主機(jī)發(fā)送反饋信息。系統(tǒng)主要實(shí)現(xiàn)的是單片機(jī)向DSP發(fā)送數(shù)據(jù)信息,單片機(jī)首先發(fā)送指令數(shù)據(jù)表示主機(jī)發(fā)送數(shù)據(jù)的過程開始。如果發(fā)送的是0,則標(biāo)志著該過程的開始。為了避免誤操作指令數(shù)據(jù)發(fā)送兩次,DSP接收的兩個(gè)數(shù)據(jù)都是0時(shí)進(jìn)行相應(yīng)的操作,否則重新傳輸指令數(shù)據(jù)。然后把單片機(jī)需要傳輸?shù)臄?shù)據(jù)存放在一個(gè)數(shù)組里面依次傳送,比如要傳輸3個(gè)數(shù)據(jù),則定義數(shù)組a[0]和a[1]存放指令數(shù)據(jù),a[2]到a[4]存放需要傳送的數(shù)組。
2.2 串行口的初始化
單片機(jī)的SPI初始化包括:把相應(yīng)的I/O口配置成具有SPI特殊功能的接口,時(shí)鐘模式的選定,波特率的選擇,發(fā)送接收數(shù)據(jù)長(zhǎng)度的選擇,內(nèi)部相對(duì)應(yīng)的時(shí)鐘使能。所有設(shè)置都是通過設(shè)計(jì)相對(duì)應(yīng)的SPI控制寄存器實(shí)現(xiàn)的[5]。
初始化程序如下:
WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on
BCSCTL2 = SELM1 + SELS;//選擇高速晶體振蕩器作為時(shí)鐘源
UCTL1=CHAR + SYNC + MM + SWRST;//SPIZ主模式8位數(shù)據(jù),單片機(jī)作為主動(dòng)模式
UTCTL1=STC+SSEL1+CKPL ;//數(shù)據(jù)在下降沿輸出,系統(tǒng)主時(shí)鐘,三線模式
UBR01=0x02;
UBR11=0x00;//波特率設(shè)為fclk/2
UMCTL1=0x00;
ME2=USPIE1;//模塊使能2
P5SEL|=0x0F;//低4位為模塊端口功能
P5OUT|=0xf0;
UCTL1&= ~SWRST;//復(fù)位結(jié)束
2407A的SPI初始化與單片機(jī)的初始化相類似,但是DSP作為從器件,所以其波特率由主器件決定不需要再進(jìn)行設(shè)計(jì)。
2.3 MSP430發(fā)送數(shù)據(jù)
系統(tǒng)具有薄膜按鍵和液晶顯示,可以方便地在需要的時(shí)候發(fā)送數(shù)據(jù)。比如,在設(shè)計(jì)完參數(shù)后就會(huì)出現(xiàn)一個(gè)選擇界面,讓操作者選擇是進(jìn)行參數(shù)保存、參數(shù)備份還是傳遞參數(shù)給DSP,操作者可以根據(jù)自己不同的需要選擇相應(yīng)的功能。如果選擇參數(shù)傳遞功能,則單片機(jī)會(huì)跳到相應(yīng)的程序段執(zhí)行參數(shù)傳遞的任務(wù)。發(fā)送數(shù)據(jù)程序如下:
P5OUT &= 0x1f;//片選DSP芯片
while((U1IFG & UTXIFG1) != UTXIFG1);
for(k=0;k<6;k++) {//傳輸?shù)臄?shù)據(jù)個(gè)數(shù)
P5OUT &= 0x1f;
while((U1IFG & UTXIFG1) != UTXIFG1);
TXBUF1=a[k];//發(fā)送數(shù)據(jù)
while((UTCTL1&0x01)==0);//發(fā)送完成
delay(10);
P5OUT &= 0x2f;
}
2.4 DSP接收數(shù)據(jù)
DSP接收單片機(jī)發(fā)送過來的數(shù)據(jù)是通過中斷方式實(shí)現(xiàn)的,每傳輸一個(gè)數(shù)據(jù)就發(fā)生一次中斷。主程序完成對(duì)DSP的初始化后進(jìn)入等待狀態(tài),一旦接收到單片機(jī)的中斷信號(hào),DSP就進(jìn)入中斷服務(wù)子程序,將接收到的數(shù)據(jù)存放在70H開始的存儲(chǔ)單元中。當(dāng)所有數(shù)據(jù)傳輸完成后,將這些數(shù)據(jù)賦給相應(yīng)的變量。這里要注意的是,DSP的SPIRXBUF是16位,而單片機(jī)發(fā)送的數(shù)據(jù)是8位,所以在DSP接收到數(shù)據(jù)以后需要做處理,把高8位屏蔽掉。可以通過與00FF相與來達(dá)到這個(gè)目的。中斷程序流程如圖2所示。
中斷程序如下:
LDP#6
LACCK;K=K+1
ADD#1
SACLK
MAR*,AR2;AR2為存儲(chǔ)單元地址指針
LDP#DP_PF1
LACCSPIRXBUF
AND#00FFH;高位屏蔽掉
SACL*+
LDP#6
LACCK
SUB#1;判斷是否為指令數(shù)據(jù)
BCNDL1,NEQ
LDP#0
LACC#70H
SUB#0
BCNDL3,NEQ;不是0則跳到L3
BL2;是0則跳到L2
L1: …;判斷是否是第2個(gè)數(shù)據(jù)
L4: LACCK;判斷數(shù)據(jù)是否傳送完畢
SUB#05H
BCNDL5,EQ
BL2
L5:LDP#0;數(shù)據(jù)全部發(fā)送完畢
LACC72H
LDP#6
SACLSPEED;賦值給相應(yīng)變量
……?T
L3: SPLKK,0;K=0
LDP#0
LARAR2,#70H;地址指針指回70H
L2: CLRCINTM;開中斷
RET
3 結(jié)論
實(shí)驗(yàn)證明,應(yīng)用SPI通信進(jìn)行MSP430單片機(jī)與DSP之間的串口通信完全滿足伺服系統(tǒng)實(shí)時(shí)性的要求。同時(shí),由于SPI接口功能比較完善,通信協(xié)議清晰,時(shí)序簡(jiǎn)單,無(wú)須外加其他元器件即可方便地實(shí)現(xiàn)DSP與主機(jī)之間數(shù)據(jù)的串行通信,簡(jiǎn)化了系統(tǒng)設(shè)計(jì),增強(qiáng)系統(tǒng)的實(shí)時(shí)處理能力和應(yīng)用范圍。結(jié)構(gòu)靈活性強(qiáng),便于擴(kuò)展,同時(shí)減輕了主CPU負(fù)擔(dān),提高了系統(tǒng)的可靠性。
審核編輯:湯梓紅
-
dsp
+關(guān)注
關(guān)注
554文章
8059瀏覽量
350410 -
mcu
+關(guān)注
關(guān)注
146文章
17317瀏覽量
352635 -
控制器
+關(guān)注
關(guān)注
112文章
16445瀏覽量
179444 -
SPI
+關(guān)注
關(guān)注
17文章
1721瀏覽量
92117
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
用SPI總線實(shí)現(xiàn)DSP和MCU之間的高速通信
一種通過SPI接口協(xié)議實(shí)現(xiàn)DSP與其它設(shè)備通信的方法
![一種通過<b class='flag-5'>SPI</b>接口協(xié)議實(shí)現(xiàn)<b class='flag-5'>DSP</b>與其它設(shè)備<b class='flag-5'>通信</b>的方法](https://file1.elecfans.com//web2/M00/A4/DA/wKgZomUMNfeAF-xxAABUus9oAbQ170.jpg)
CPLD的DSP多SPI端口通信設(shè)計(jì)
![CPLD的<b class='flag-5'>DSP</b>多<b class='flag-5'>SPI</b>端口<b class='flag-5'>通信</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A5/E5/wKgZomUMOq6AcJTHAAAWGd8YdMA857.jpg)
ARM與DSP的SPI通信設(shè)計(jì)實(shí)現(xiàn)
![ARM與<b class='flag-5'>DSP</b>的<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>設(shè)計(jì)實(shí)現(xiàn)](https://file.elecfans.com/web2/M00/48/FB/pYYBAGKhtDGAHh5kAAALszyyPpY981.jpg)
關(guān)于DSP多SPI端口通信設(shè)計(jì)的探究
![關(guān)于<b class='flag-5'>DSP</b>多<b class='flag-5'>SPI</b>端口<b class='flag-5'>通信</b>設(shè)計(jì)的探究](https://file.elecfans.com/web2/M00/4A/1E/pYYBAGKhvJuAFVmyAAA4y-_JDYo017.png)
基于SPI通信接口的兩片DSP的雙向通信和任務(wù)同步
![基于<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>接口的兩片<b class='flag-5'>DSP</b>的雙向<b class='flag-5'>通信</b>和任務(wù)同步](https://file.elecfans.com/web2/M00/49/39/poYBAGKhwJCAID_ZAABAjCFF3vo128.png)
如何利用SPI模塊進(jìn)行雙DSP同步串行通信設(shè)計(jì)
![如何利用<b class='flag-5'>SPI</b>模塊進(jìn)行雙<b class='flag-5'>DSP</b>同步串行<b class='flag-5'>通信</b>設(shè)計(jì)](https://file.elecfans.com/web1/M00/82/04/pIYBAFw0bu2AS7-TAAAQHqGowZQ412.jpg)
基于FPGA與MCU通信的SPI協(xié)議設(shè)計(jì)
![基于FPGA與<b class='flag-5'>MCU</b><b class='flag-5'>通信</b>的<b class='flag-5'>SPI</b>協(xié)議設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
DSP與FPGA間SPI通信(DSP為主、FPGA為從)
![<b class='flag-5'>DSP</b>與FPGA間<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>(<b class='flag-5'>DSP</b>為主、FPGA為從)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
SPI通信筆記
![<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>筆記](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MCU SPI接口訪問非標(biāo)準(zhǔn)SPI ADC的方法
![<b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b>接口訪問非標(biāo)準(zhǔn)<b class='flag-5'>SPI</b> ADC的方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于MSP430單片機(jī)MCU與DSP的SPI通信設(shè)計(jì)
![基于MSP430單片機(jī)<b class='flag-5'>MCU</b>與<b class='flag-5'>DSP</b>的<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論