MSP430同步串行通信SPI_第1頁
MSP430同步串行通信SPI_第2頁
MSP430同步串行通信SPI_第3頁
MSP430同步串行通信SPI_第4頁
MSP430同步串行通信SPI_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、同步串行通信SPI內(nèi)容提要SPI總線協(xié)議MSP430 SPI模塊SPI應(yīng)用SPI總線介紹SPI接口是Motorola首先提出的全雙工三/四線同步串行外圍接口,采用主從模式架構(gòu),支持多從設(shè)備應(yīng)用,一般只支持單主設(shè)備。利用34條線完成兩個芯片之間的雙工高速通信。兩條數(shù)據(jù)線用于收發(fā)數(shù)據(jù),一條時鐘線用于同步,一條作為從機選擇。時鐘由主設(shè)備控制,當(dāng)主機發(fā)送一字節(jié)數(shù)據(jù)(通過主出從入MOSI引腳)的同時,從機返回一字節(jié)數(shù)據(jù)(通過主入從出MISO引腳)??偩€上允許連接多個設(shè)備,在同一時刻只允許一個主機操作總線,并且同時只能與一個從機通信。主機控制數(shù)據(jù)的傳輸過程。目前應(yīng)用中的數(shù)據(jù)速率可達Mbps級。一、SPI總

2、線協(xié)議 SPI總線可在軟件的控制下構(gòu)成各種簡單的或復(fù)雜的系統(tǒng):1個主MCU和幾個從MCU幾個從MCU相互連接構(gòu)成多主機系統(tǒng)(分布式系統(tǒng)) 1個主MCU和1個或幾個從I/O設(shè)備 SPI總線結(jié)構(gòu)SPI典型結(jié)構(gòu)如下:SPI工作模式 主機模式: 當(dāng)器件作為主機時,使用一個IO引腳拉低相應(yīng)從機的選擇引腳(STE),傳輸?shù)钠鹗加芍鳈C發(fā)送數(shù)據(jù)來啟動,時鐘(SCK)信號由主機產(chǎn)生。通過MOSI發(fā)送數(shù)據(jù),同時通過MISO引腳接收從機發(fā)出的數(shù)據(jù)。 從機模式: 當(dāng)器件作為從機時,傳輸在從機選擇引腳(STE)被主機拉低后開始,接收主機輸出的時鐘信號,在讀取主機數(shù)據(jù)的同時通過MISO引腳輸出數(shù)據(jù)。SPI電氣連接以線SP

3、I為例,其通信時需要的4個引腳分別為:引腳名稱類型描述SCK輸入/輸出串行時鐘,用于同步SPI接口間數(shù)據(jù)傳輸?shù)臅r鐘信號。該時鐘信號總是由主機驅(qū)動,并且從機接收STE輸入從機選擇,SPI從機選擇信號是一個低有效信號,用于指示被選擇參與數(shù)據(jù)傳輸?shù)膹臋C。每個從機都有各自特定的從機選擇輸入信號。MISO輸入/輸出主入從出,MISO信號是一個單向的信號,它將數(shù)據(jù)由從機傳輸?shù)街鳈C。MOSI輸入/輸出主出從入,MOSI信號是一個單向的信號,它將數(shù)據(jù)從主機傳輸?shù)綇臋C。SPI主機SPI從機1SPI從機2STESPI BUSP0.1P0.2nCSnCS作SPI主機時,STE要接上拉電阻MSP430G2553引腳圖

4、STE引腳作用STE:從機模式發(fā)送接收允許控制引腳,控制多主從系統(tǒng)中的多個從機。該引腳不用于3線SPI操作,可以在4線SPI操作中使多主機共享總線,避免發(fā)生沖突。4線SPI操作主模式中,STE的含義如下:SIMO和SCLK被強制進入輸入狀態(tài)SIMO和SCLK正常操作4線SPI操作從模式中,STE的含義如下:允許從機發(fā)送接收數(shù)據(jù),SIMO正常操作禁止從機發(fā)送接收數(shù)據(jù),SIMO被強制進入輸入狀態(tài)SPI數(shù)據(jù)傳輸數(shù)據(jù)傳輸格式: 通常是高位(MSB)在前,低位(LSB)在后。一些增強型MCU中可以通過軟件設(shè)置高位在前或低位在前。 下面以位數(shù)據(jù)的傳輸為例,看一下種不同數(shù)據(jù)傳輸格式的時序。首先介紹兩個概念:

5、1.時鐘極性:表示時鐘信號在空閑時是高電平還是低電平。2.時鐘相位:決定數(shù)據(jù)是在SCK的起始沿采樣還是在SCK的結(jié)束沿采樣。SPI傳輸時序時鐘相位為1時鐘前沿數(shù)據(jù)輸出時鐘后沿數(shù)據(jù)采樣時鐘信號極性0極性1從機選擇時鐘相位控制為0時鐘前沿數(shù)據(jù)采樣時鐘后沿數(shù)據(jù)輸出時鐘前沿輸出時鐘后沿采樣時鐘前沿采樣時鐘后沿輸出傳輸模式根據(jù)時鐘極性(CPOL)及相位(CPHA)不同可以組合成4種工作模式:SPI0,SPI1,SP2,SP3.(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1傳輸模式時鐘

6、極性(CPOL)定義了時鐘空閑狀態(tài)電平,對傳輸協(xié)議沒有重大影響。CPOL=0:時鐘空閑狀態(tài)為低電平。CPOL=1:時鐘空閑狀態(tài)為高電平。傳輸模式時鐘相位(CPHA)定義數(shù)據(jù)的采樣時間。CPHA=0:在時鐘的第一個跳變沿(上升沿或下降沿)進行數(shù)據(jù)采樣。CPHA=1:在時鐘的第二個跳變沿(上升沿或下降沿)進行數(shù)據(jù)采樣。特點優(yōu)點:(1)接口簡單,利于硬件設(shè)計與實現(xiàn)。(2)時鐘速度快,且沒有系統(tǒng)開銷。(3)相對抗干擾能力強,傳輸穩(wěn)定。特點 缺點:(1)缺乏流控制機制,無論主器件還是從器件均不對消息進行確認(rèn),主器件無法知道從器件是否繁忙。因此,需要軟件彌補,增加了軟件開發(fā)工作量。(2)沒有多主器件協(xié)議,

7、必須采用很復(fù)雜的軟件和外部邏輯來實現(xiàn)多主器件架構(gòu)。通用串行通信接口(USCI)模塊通用串行通信接口(USCI)模塊支持多種串行通信模式。不同的USCI 模塊支持不同的模式USCI_Ax 模塊支持:UART 模式IrDA 通信的脈沖整形LIN 通信的自動波特率檢測SPI 模式USCI_Bx 模塊支持:I2C 模式SPI 模式MSP430模塊特點MSP430的SPI模塊有如下特點:支持3線或4線SPI操作支持7位或8位數(shù)據(jù)格式接收和發(fā)送有單獨的移位寄存器接收和發(fā)送有獨立的緩沖器接收和發(fā)送有獨立的中斷能力時鐘的極性和相位可編程主模式的時鐘頻率可編程傳輸速率可編程支持連續(xù)收發(fā)操作支持主從方式主模式MS

8、P430 USCI作為主機、外圍設(shè)備作為從機從模式外圍設(shè)備作為主機,MSP430 USCI作為從機SPI模式下可用的USCI寄存器名稱描述訪問復(fù)位值寄存器訪問UCBxCTLW0USCI_Bx控制字0 讀/寫0001h字UCBxBRWUSCI_Bx波特率控制字讀/寫0000h字UCBxMCTLUSCI_Bx調(diào)制器控制 UCBxSTATUSCI_Bx狀態(tài)寄存器 讀/寫00h字節(jié)UCBxRXBUFUSCI_Bx接收緩存讀/寫00h字節(jié)UCBxTXBUF USCI_Bx發(fā)送緩存讀/寫00h字節(jié)UCBxI2COAUSCI_Bx I2C本機地址 讀/寫0000h字UCBxI2CSAUSCI_Bx I2C從

9、機地址讀/寫0000h字UCBxICTL USCI_Bx中斷控制讀/寫0200h 字UCBxIEUSCI_Bx中斷使能讀/寫00h字節(jié)UCBxIFG USCI_Bx中斷標(biāo)志讀/寫02h字節(jié)UCBxIVUSCI_Bx中斷向量 讀0000h字USCI_Ax和USCI_Bx都有SPI模塊,下面以USCI_Bx為例,介紹相關(guān)寄存器UCB控制寄存器 UCBxCTL1(USCI_Bx control register)00: 保留01: ACLK10:SMCLK11:SMCLK0: 不允許軟件復(fù)位1: 允許軟件復(fù)位0: 前沿采樣,后沿輸出1: 前沿輸出,后沿采樣0: 從機模式1: 主機模式00: 三線制0

10、1:四線制,UCxSTE=1選擇從機10:四線制,UCxSTE=0選擇從機11:I2C模式0: 異步通信1: 同步通信0: 時鐘空閑狀態(tài)為低電平1: 時鐘空閑狀態(tài)為高電平UCB控制寄存器 UCBxCTL0(USCI_Bx control register)0: LSB first1: MSB first0: 8-bit data1: 7-bit data波特率控制寄存器 UCBxBR0和UCBxBR1UCBxBR0是波特率發(fā)生器的低8位;UCBxBR1是波特率發(fā)生器的高8位.串口中斷允許寄存器 UCBxIE0: 發(fā)送中斷禁止1: 發(fā)送中斷允許0: 接收中斷禁止1: 接收中斷允許串口中斷標(biāo)志寄存

11、器 UCBxIFG1: 發(fā)送緩沖器為空1: 接收緩沖器為空串口中斷向量值寄存器 UCBxIV00: 沒有中斷02:Interrupt source:Data received;Interrupt flag:UCRXIFG; Interrupt priority:Highest 04:Interrupt source:Transmit buffer empty;Interrupt flag:UCTXIFG; Interrupt priority:Lowest串口中斷緩沖器 UCBxRXBUF和UCBxTXBUFUCRXBUFx: 接收緩沖器UCTXBUFx: 發(fā)送緩沖器應(yīng)用示例 SPI主機與從機

12、通過三線SPI接口通信,主機發(fā)送數(shù)據(jù)給從機,同時又接收從機發(fā)來的數(shù)據(jù),發(fā)送數(shù)據(jù)從0 x01開始遞增,從機接收到數(shù)據(jù),就立馬發(fā)出,主機接到這個數(shù)據(jù),進入中斷如果發(fā)送和接收數(shù)據(jù)相同,則點亮LED燈,否則熄滅。波特率為500kbps程序流程圖RX ISR初始化SPI模塊初始化發(fā)送數(shù)據(jù)MST_Data判斷發(fā)送緩沖是否為空,若是,則發(fā)送第一個字符判斷發(fā)送緩沖是否為空,為空說明上次發(fā)送完畢判斷本次接收到的字符和上次發(fā)送是否相同,相同則亮燈發(fā)送數(shù)據(jù)自加1,并賦值給發(fā)送緩沖 主機RXISR初始化SPI模塊判斷發(fā)送緩沖是否為空,為空說明上次發(fā)送完畢本次接收到的數(shù)據(jù)賦值給發(fā)送緩沖 從機主機端口初始化 P8SEL

13、|= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1DIR |= BIT0 + BIT1; P1SEL |= BIT0 + BIT1;選擇P1.1P1.0端口為輸出選擇P1.1P1.0端口為輸出選擇P8.4P8.6為外設(shè)功能選擇P8.4P8.6端口方向為輸出主機SPI模塊初始化UCB1CTL1 |= UCSWRST;UCB1CTL0|=UCMST+UCSYNC+UCCKPL+UCMSB; UCB1CTL1 |= UCSSEL_2; UCB1BR0 = 2; UCB1BR1 = 0; UCB1IE |= UCRXIE; UCB1CTL1 &= UCSWRS

14、T選擇SMCLKUSCI_Bx模塊邏輯復(fù)位3線,8位,主機模式,時鐘極性高,MSB先發(fā)送配置波特率打開SPI中斷USCI_Bx復(fù)位釋放主機其他配置 MST_Data = 0 x01; SLV_Data = 0 x00; P1OUT |= BIT1; _delay_cycles(100); while (!(UC B1IFG&UCTXIFG); UC B1TXBUF = MST_Data;主機初始化數(shù)據(jù)從機初始化數(shù)據(jù)延時判斷發(fā)送緩沖是否為空,如果為空,標(biāo)志位置位,則說明上個數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢發(fā)送第一個字符從機選擇引腳主機接收中斷#pragma vector=USCI_ B1_V

15、ECTOR_interrupt void USCI_ B1_ISR(void) switch(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); if (UC B1RXBUF=SLV_Data) P1OUT |= 0 x01; else P1OUT &= 0 x01; MST_Data+; SLV_Data+; UCB1TXBUF = MST_Data; _delay_cycles(500); break; case 4: break; default: break; 判斷發(fā)送緩沖是否為空,如

16、果為空,標(biāo)志位置位,則說明上個數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢 如果接收與發(fā)送相同,點亮LED發(fā)送下一個字符從機端口初始化 P8SEL |= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1REN |= BIT4; P1OUT |= BIT4; P1IES &=BIT4; P1IFG &=BIT4; P1IE |= BIT4;使能P1.4內(nèi)部電阻選擇P8.4P8.6為外設(shè)功能選擇P8.4P8.6端口方向為輸出P1.4上升沿捕獲,進入中斷P1.4 IFG 清零P1.4中斷使能主機SPI模塊初始化UCB1CTL1 |= UCSWRST;UCB1CTL0 |

17、= UCSYNC+UCCKPL+UCMSB; UCB1CTL1 &= UCSWRSTUSCI_Bx模塊邏輯復(fù)位3線,8位,主機模式,時鐘極性高,MSB先發(fā)送USCI_Bx復(fù)位釋放從機接收中斷#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(void) switch(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); UCA0TXBUF = UCA0RXBUF; break; case 4: break; default: br

18、eak; 判斷發(fā)送緩沖是否為空,如果為空,標(biāo)志位置位,則說明上個數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢發(fā)送下一個字符從機主機開始工作提示中斷#pragma vector=PORT1_VECTOR_interrupt void Port_1(void) P1IFG &= BIT4; P1IE &= BIT4; UCB1CTL1 |= UCSWRST; UCB1CTL1 &= UCSWRST; UCB1IE |= UCRXIE;USCI_Bx復(fù)位釋放主機準(zhǔn)備就緒,USCI_Bx模塊邏輯復(fù)位打開SPI中斷 /| XIN|- | | | -|RST XOUT|- | | | P1.2|- Data Ou

19、t (UCA0SIMO) | | LED -|P1.0 P1.1|- Data In (UCA0SOMI) | | Slave reset Serial Clock Out (UCA0CLK)三線制主機模式多次發(fā)數(shù)據(jù),每次發(fā)的數(shù)據(jù)都加1,第一次發(fā)1;同時也接收從機發(fā)過來的數(shù)據(jù),第一次接0,依次加1.波特率為500kbps#include unsigned char MST_Data, SLV_Data;int main(void) volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer UCA0CTL1

20、|= UCSWRST; P1OUT = 0 x00; / P1 setup for LED & reset output P1DIR |= BIT0 + BIT5; / P1SEL = BIT1 + BIT2 + BIT4; P1SEL2 = BIT1 + BIT2 + BIT4; UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; / 3-pin, 8-bit SPI master UCA0CTL1 |= UCSSEL_2; / SMCLK UCA0BR0 |= 0 x02; / /2 UCA0BR1 = 0; / UCA0MCTL = 0; / No

21、modulation UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* IE2 |= UCA0RXIE; / Enable USCI0 RX interruptP1OUT &= BIT5; / Now with SPI signals initialized, P1OUT |= BIT5; / reset slave _delay_cycles(75); / Wait for slave to initialize MST_Data = 0 x01; / Initialize data values SLV_Data = 0 x00;

22、 UCA0TXBUF = MST_Data; / Transmit first character _bis_SR_register(LPM0_bits + GIE); / CPU off, enable interrupts#pragma vector=USCIAB0RX_VECTOR_interrupt void USCIA0RX_ISR(void) volatile unsigned int i; while (!(IFG2 & UCA0TXIFG); / USCI_A0 TX buffer ready? if (UCA0RXBUF = SLV_Data) / Test for correct character RXd P1OUT |= BIT0; / If correct, light LED else P1OUT &= BIT0; / If incorrect, clear LED MST_Data+; / Increment master value SLV_Data+; / Increment expected slave value UCA0TXBUF = MST_Data; / Send next value _delay_cycles(50); / Add time between transmissions to

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論