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

下載本文檔

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

文檔簡(jiǎn)介

1、同步串行通信同步串行通信SPI內(nèi)容提要內(nèi)容提要SPI總線(xiàn)協(xié)議總線(xiàn)協(xié)議MSP430 SPI模塊模塊SPI應(yīng)用應(yīng)用SPI總線(xiàn)介紹總線(xiàn)介紹SPI接口是接口是Motorola首先提出的首先提出的全雙工全雙工三三/四線(xiàn)四線(xiàn)同步同步串行外串行外圍接口,采用主從模式架構(gòu),支持多從設(shè)備應(yīng)用,一般只圍接口,采用主從模式架構(gòu),支持多從設(shè)備應(yīng)用,一般只支持單主設(shè)備。支持單主設(shè)備。利用利用34條線(xiàn)完成兩個(gè)芯片之間的雙工高速通信。兩條數(shù)條線(xiàn)完成兩個(gè)芯片之間的雙工高速通信。兩條數(shù)據(jù)線(xiàn)用于收發(fā)數(shù)據(jù),一條時(shí)鐘線(xiàn)用于同步,一條作為從機(jī)據(jù)線(xiàn)用于收發(fā)數(shù)據(jù),一條時(shí)鐘線(xiàn)用于同步,一條作為從機(jī)選擇。選擇。時(shí)鐘由主設(shè)備控制,時(shí)鐘由主設(shè)備控

2、制,當(dāng)主機(jī)發(fā)送一字節(jié)數(shù)據(jù)(通過(guò)主出從當(dāng)主機(jī)發(fā)送一字節(jié)數(shù)據(jù)(通過(guò)主出從入入MOSI引腳)的同時(shí),從機(jī)返回一字節(jié)數(shù)據(jù)(通過(guò)引腳)的同時(shí),從機(jī)返回一字節(jié)數(shù)據(jù)(通過(guò)主入主入從出從出MISO引腳)。引腳)??偩€(xiàn)上允許連接多個(gè)設(shè)備,總線(xiàn)上允許連接多個(gè)設(shè)備,在同一時(shí)刻只允許一個(gè)主機(jī)操在同一時(shí)刻只允許一個(gè)主機(jī)操作總線(xiàn),并且同時(shí)只能與一個(gè)從機(jī)通信。主機(jī)控制數(shù)據(jù)的作總線(xiàn),并且同時(shí)只能與一個(gè)從機(jī)通信。主機(jī)控制數(shù)據(jù)的傳輸過(guò)程。傳輸過(guò)程。目前應(yīng)用中的數(shù)據(jù)速率可達(dá)目前應(yīng)用中的數(shù)據(jù)速率可達(dá)Mbps級(jí)。級(jí)。一、一、SPI總線(xiàn)協(xié)議總線(xiàn)協(xié)議 SPI總線(xiàn)可在軟件的控制下構(gòu)成各種簡(jiǎn)單的或復(fù)雜的系統(tǒng): 1個(gè)主MCU和幾個(gè)從MCU 幾個(gè)

3、從MCU相互連接構(gòu)成多主機(jī)系統(tǒng)(分布式系統(tǒng)) 1個(gè)主MCU和1個(gè)或幾個(gè)從I/O設(shè)備 SPI總線(xiàn)結(jié)構(gòu)總線(xiàn)結(jié)構(gòu)SPI典型結(jié)構(gòu)如下:典型結(jié)構(gòu)如下:SPI工作模式工作模式 主機(jī)模式:主機(jī)模式: 當(dāng)器件作為主機(jī)時(shí),使用一個(gè)當(dāng)器件作為主機(jī)時(shí),使用一個(gè)IO引腳拉低相應(yīng)從機(jī)的引腳拉低相應(yīng)從機(jī)的選擇引腳選擇引腳(STE),傳輸?shù)钠鹗加芍鳈C(jī)發(fā)送數(shù)據(jù)來(lái)啟動(dòng),時(shí),傳輸?shù)钠鹗加芍鳈C(jī)發(fā)送數(shù)據(jù)來(lái)啟動(dòng),時(shí)鐘鐘(SCK)信號(hào)由主機(jī)產(chǎn)生。通過(guò)信號(hào)由主機(jī)產(chǎn)生。通過(guò)MOSI發(fā)送數(shù)據(jù),同時(shí)通發(fā)送數(shù)據(jù),同時(shí)通過(guò)過(guò)MISO引腳接收從機(jī)發(fā)出的數(shù)據(jù)。引腳接收從機(jī)發(fā)出的數(shù)據(jù)。 從機(jī)模式:從機(jī)模式: 當(dāng)器件作為從機(jī)時(shí),傳輸在從機(jī)選擇引腳當(dāng)器件作為

4、從機(jī)時(shí),傳輸在從機(jī)選擇引腳(STE)被主被主機(jī)拉低后開(kāi)始,接收主機(jī)輸出的時(shí)鐘信號(hào),在讀取主機(jī)數(shù)機(jī)拉低后開(kāi)始,接收主機(jī)輸出的時(shí)鐘信號(hào),在讀取主機(jī)數(shù)據(jù)的同時(shí)通過(guò)據(jù)的同時(shí)通過(guò)MISO引腳輸出數(shù)據(jù)。引腳輸出數(shù)據(jù)。SPI電氣連接電氣連接以線(xiàn)以線(xiàn)SPI為例,其通信時(shí)需要的為例,其通信時(shí)需要的4個(gè)引腳分別為:個(gè)引腳分別為:SPI主機(jī)主機(jī)SPI從機(jī)從機(jī)1SPI從機(jī)從機(jī)2STESPI BUSP0.1P0.2nCSnCS作作SPI主機(jī)時(shí),主機(jī)時(shí),STE要接上要接上拉電阻拉電阻MSP430G2553引腳圖引腳圖STE引腳作用引腳作用STE:從機(jī)模式發(fā)送接收允許控制引腳,控制多主從系統(tǒng):從機(jī)模式發(fā)送接收允許控制引腳,

5、控制多主從系統(tǒng)中的多個(gè)從機(jī)。該引腳不用于中的多個(gè)從機(jī)。該引腳不用于3線(xiàn)線(xiàn)SPI操作,可以在操作,可以在4線(xiàn)線(xiàn)SPI操作中使多主機(jī)共享總線(xiàn),避免發(fā)生沖突。操作中使多主機(jī)共享總線(xiàn),避免發(fā)生沖突。4線(xiàn)線(xiàn)SPI操作主模式中,操作主模式中,STE的含義如下:的含義如下:SIMO和和SCLK被強(qiáng)制進(jìn)入輸入狀態(tài)被強(qiáng)制進(jìn)入輸入狀態(tài)SIMO和和SCLK正常操作正常操作4線(xiàn)線(xiàn)SPI操作從模式中,操作從模式中,STE的含義如下:的含義如下:允許從機(jī)發(fā)送接收數(shù)據(jù),允許從機(jī)發(fā)送接收數(shù)據(jù),SIMO正常操作正常操作禁止從機(jī)發(fā)送接收數(shù)據(jù),禁止從機(jī)發(fā)送接收數(shù)據(jù),SIMO被強(qiáng)制進(jìn)入輸入狀態(tài)被強(qiáng)制進(jìn)入輸入狀態(tài)SPI數(shù)據(jù)傳輸數(shù)據(jù)傳輸

6、數(shù)據(jù)傳輸格式:數(shù)據(jù)傳輸格式: 通常是高位通常是高位(MSB)在前,低位在前,低位(LSB)在后。一些增在后。一些增強(qiáng)型強(qiáng)型MCU中可以通過(guò)軟件設(shè)置高位在前或低位在前。中可以通過(guò)軟件設(shè)置高位在前或低位在前。 下面以位數(shù)據(jù)的傳輸為例,看一下種不同數(shù)據(jù)傳輸下面以位數(shù)據(jù)的傳輸為例,看一下種不同數(shù)據(jù)傳輸格式的時(shí)序。首先介紹兩個(gè)概念:格式的時(shí)序。首先介紹兩個(gè)概念:1.時(shí)鐘極性:時(shí)鐘極性:表示時(shí)鐘信號(hào)在空閑時(shí)是高電平還是低電表示時(shí)鐘信號(hào)在空閑時(shí)是高電平還是低電平。平。2.時(shí)鐘相位:時(shí)鐘相位:決定數(shù)據(jù)是在決定數(shù)據(jù)是在SCK的起始沿采樣還是在的起始沿采樣還是在SCK的結(jié)束沿采樣。的結(jié)束沿采樣。SPI傳輸時(shí)序傳輸

7、時(shí)序時(shí)鐘相位為時(shí)鐘相位為1 1時(shí)鐘前沿?cái)?shù)時(shí)鐘前沿?cái)?shù)據(jù)輸出據(jù)輸出時(shí)鐘后沿?cái)?shù)時(shí)鐘后沿?cái)?shù)據(jù)采樣據(jù)采樣時(shí)鐘信號(hào)時(shí)鐘信號(hào)極性極性0 0極性極性1 1從機(jī)選擇從機(jī)選擇時(shí)鐘相位時(shí)鐘相位控制為控制為0 0時(shí)鐘前沿時(shí)鐘前沿?cái)?shù)據(jù)采樣數(shù)據(jù)采樣時(shí)鐘后沿時(shí)鐘后沿?cái)?shù)據(jù)輸出數(shù)據(jù)輸出時(shí)鐘前沿輸出時(shí)鐘前沿輸出時(shí)鐘后沿采樣時(shí)鐘后沿采樣時(shí)鐘前沿采樣時(shí)鐘前沿采樣時(shí)鐘后沿輸出時(shí)鐘后沿輸出傳輸模式傳輸模式根據(jù)時(shí)鐘極性根據(jù)時(shí)鐘極性(CPOL)及相位及相位(CPHA)不同可以組合成不同可以組合成4種工作模式:種工作模式:SPI0,SPI1,SP2,SP3.(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(

8、3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1傳輸模式傳輸模式時(shí)鐘極性時(shí)鐘極性(CPOL)定義了時(shí)鐘空閑狀態(tài)電平,定義了時(shí)鐘空閑狀態(tài)電平,對(duì)傳輸協(xié)議沒(méi)有重大影響。對(duì)傳輸協(xié)議沒(méi)有重大影響。CPOL=0:時(shí)鐘空閑狀態(tài)為低電平。:時(shí)鐘空閑狀態(tài)為低電平。CPOL=1:時(shí)鐘空閑狀態(tài)為高電平。:時(shí)鐘空閑狀態(tài)為高電平。傳輸模式傳輸模式時(shí)鐘相位時(shí)鐘相位(CPHA)定義數(shù)據(jù)的采樣時(shí)間。定義數(shù)據(jù)的采樣時(shí)間。CPHA=0:在時(shí)鐘的第一個(gè)跳變沿:在時(shí)鐘的第一個(gè)跳變沿(上升沿上升沿或下降沿或下降沿)進(jìn)行數(shù)據(jù)采樣。進(jìn)行數(shù)據(jù)采樣。CPHA=1:在時(shí)鐘的第二個(gè)跳變沿:在時(shí)鐘的第二個(gè)跳變沿(

9、上升沿上升沿或下降沿或下降沿)進(jìn)行數(shù)據(jù)采樣。進(jìn)行數(shù)據(jù)采樣。特點(diǎn)特點(diǎn)優(yōu)點(diǎn):優(yōu)點(diǎn):(1)接口簡(jiǎn)單,利于硬件設(shè)計(jì)與實(shí)現(xiàn)。)接口簡(jiǎn)單,利于硬件設(shè)計(jì)與實(shí)現(xiàn)。(2)時(shí)鐘速度快,且沒(méi)有系統(tǒng)開(kāi)銷(xiāo)。)時(shí)鐘速度快,且沒(méi)有系統(tǒng)開(kāi)銷(xiāo)。(3)相對(duì)抗干擾能力強(qiáng),傳輸穩(wěn)定。)相對(duì)抗干擾能力強(qiáng),傳輸穩(wěn)定。特點(diǎn)特點(diǎn) 缺點(diǎn):缺點(diǎn):(1)缺乏流控制機(jī)制,無(wú)論主器件還是從器)缺乏流控制機(jī)制,無(wú)論主器件還是從器件均不對(duì)消息進(jìn)行確認(rèn),主器件無(wú)法知道件均不對(duì)消息進(jìn)行確認(rèn),主器件無(wú)法知道從器件是否繁忙。因此,需要軟件彌補(bǔ),從器件是否繁忙。因此,需要軟件彌補(bǔ),增加了軟件開(kāi)發(fā)工作量。增加了軟件開(kāi)發(fā)工作量。(2)沒(méi)有多主器件協(xié)議,必須采用很復(fù)雜的

10、)沒(méi)有多主器件協(xié)議,必須采用很復(fù)雜的軟件和外部邏輯來(lái)實(shí)現(xiàn)多主器件架構(gòu)。軟件和外部邏輯來(lái)實(shí)現(xiàn)多主器件架構(gòu)。通用串行通信接口通用串行通信接口(USCI)模塊模塊通用串行通信接口通用串行通信接口(USCI)模塊支持多種串行通信模式。不模塊支持多種串行通信模式。不同的同的USCI 模塊支持不同的模式模塊支持不同的模式USCI_Ax 模塊支持:模塊支持:UART 模式模式IrDA 通信的脈沖整形通信的脈沖整形LIN 通信的自動(dòng)波特率檢測(cè)通信的自動(dòng)波特率檢測(cè)SPI 模式模式USCI_Bx 模塊支持:模塊支持:I2C 模式模式SPI 模式模式MSP430模塊特點(diǎn)模塊特點(diǎn)MSP430的的SPI模塊有如下特點(diǎn):

11、模塊有如下特點(diǎn):支持支持3線(xiàn)或線(xiàn)或4線(xiàn)線(xiàn)SPI操作操作支持支持7位或位或8位數(shù)據(jù)格式位數(shù)據(jù)格式接收和發(fā)送有單獨(dú)的移位寄存器接收和發(fā)送有單獨(dú)的移位寄存器接收和發(fā)送有獨(dú)立的緩沖器接收和發(fā)送有獨(dú)立的緩沖器接收和發(fā)送有獨(dú)立的中斷能力接收和發(fā)送有獨(dú)立的中斷能力時(shí)鐘的極性和相位可編程時(shí)鐘的極性和相位可編程主模式的時(shí)鐘頻率可編程主模式的時(shí)鐘頻率可編程傳輸速率可編程傳輸速率可編程支持連續(xù)收發(fā)操作支持連續(xù)收發(fā)操作支持主從方式支持主從方式主模式主模式MSP430 USCI作為主機(jī)、外圍設(shè)備作為從機(jī)作為主機(jī)、外圍設(shè)備作為從機(jī)從模式從模式外圍設(shè)備外圍設(shè)備作為主機(jī),作為主機(jī),MSP430 USCI作為從機(jī)作為從機(jī)SPI

12、模式下可用的模式下可用的USCI寄存器寄存器USCI_Ax和和USCI_Bx都有都有SPI模塊,下面以模塊,下面以USCI_Bx為例,介紹相關(guān)寄存器為例,介紹相關(guān)寄存器UCB控制寄存器控制寄存器 UCBxCTL1(USCI_Bx control register)00: 保留保留01: ACLK10:SMCLK11:SMCLK0: 不允許軟件復(fù)位不允許軟件復(fù)位1: 允許軟件復(fù)位允許軟件復(fù)位0: 前沿采樣,后沿輸出前沿采樣,后沿輸出1: 前沿輸出,后沿采樣前沿輸出,后沿采樣0: 從機(jī)模式從機(jī)模式1: 主機(jī)模式主機(jī)模式00: 三線(xiàn)制三線(xiàn)制01:四線(xiàn)制,四線(xiàn)制,UCxSTE=1選擇從機(jī)選擇從機(jī)10:

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

14、串口中斷允許寄存器 UCBxIE0: 發(fā)送中斷禁止發(fā)送中斷禁止1: 發(fā)送中斷允許發(fā)送中斷允許0: 接收中斷禁止接收中斷禁止1: 接收中斷允許接收中斷允許串口中斷標(biāo)志寄存器串口中斷標(biāo)志寄存器 UCBxIFG1: 發(fā)送緩沖器為空發(fā)送緩沖器為空1: 接收接收緩沖器為空緩沖器為空串口中斷向量值寄存器串口中斷向量值寄存器 UCBxIV00: 沒(méi)有中斷沒(méi)有中斷02:Interrupt source:Data received;Interrupt flag:UCRXIFG; Interrupt priority:Highest 04:Interrupt source:Transmit buffer empt

15、y;Interrupt flag:UCTXIFG; Interrupt priority:Lowest串口中斷緩沖器串口中斷緩沖器 UCBxRXBUF和和UCBxTXBUFUCRXBUFx: 接收緩沖器接收緩沖器UCTXBUFx: 發(fā)送緩沖器發(fā)送緩沖器應(yīng)用示例應(yīng)用示例 SPI主機(jī)與從機(jī)通過(guò)三線(xiàn)主機(jī)與從機(jī)通過(guò)三線(xiàn)SPI接口通信,主機(jī)發(fā)送數(shù)據(jù)給從機(jī),同時(shí)接口通信,主機(jī)發(fā)送數(shù)據(jù)給從機(jī),同時(shí)又接收從機(jī)發(fā)來(lái)的數(shù)據(jù),發(fā)送數(shù)據(jù)從又接收從機(jī)發(fā)來(lái)的數(shù)據(jù),發(fā)送數(shù)據(jù)從0 x01開(kāi)始遞增,從機(jī)接收到數(shù)據(jù),開(kāi)始遞增,從機(jī)接收到數(shù)據(jù),就立馬發(fā)出,主機(jī)接到這個(gè)數(shù)據(jù),進(jìn)入中斷如果發(fā)送和接收數(shù)據(jù)相同,就立馬發(fā)出,主機(jī)接到這個(gè)數(shù)

16、據(jù),進(jìn)入中斷如果發(fā)送和接收數(shù)據(jù)相同,則點(diǎn)亮則點(diǎn)亮LED燈,否則熄滅。波特率為燈,否則熄滅。波特率為500kbps程序流程圖程序流程圖RX ISR初始化初始化SPI模塊模塊初始化發(fā)送數(shù)據(jù)初始化發(fā)送數(shù)據(jù)MST_Data判斷發(fā)送緩沖是否為空,判斷發(fā)送緩沖是否為空,若是,則發(fā)送第一個(gè)字符若是,則發(fā)送第一個(gè)字符判斷發(fā)送緩沖是否為空,判斷發(fā)送緩沖是否為空,為空說(shuō)明上次發(fā)送完畢為空說(shuō)明上次發(fā)送完畢判斷本次接收到的字符判斷本次接收到的字符和上次發(fā)送是否相同,和上次發(fā)送是否相同,相同則亮燈相同則亮燈發(fā)送數(shù)據(jù)自加發(fā)送數(shù)據(jù)自加1,并賦值給發(fā)送緩沖并賦值給發(fā)送緩沖 主機(jī)主機(jī)RXISR初始化初始化SPI模塊模塊判斷發(fā)送

17、緩沖是否為空,判斷發(fā)送緩沖是否為空,為空說(shuō)明上次發(fā)送完畢為空說(shuō)明上次發(fā)送完畢本次接收到的數(shù)據(jù)本次接收到的數(shù)據(jù)賦值給發(fā)送緩沖賦值給發(fā)送緩沖 從機(jī)從機(jī)主機(jī)主機(jī)端口初始化端口初始化 P8SEL |= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1DIR |= BIT0 + BIT1; P1SEL |= BIT0 + BIT1;選擇選擇P1.1P1.0端口為輸出端口為輸出選擇選擇P1.1P1.0端口為輸出端口為輸出選擇選擇P8.4P8.6為外設(shè)功能為外設(shè)功能選擇選擇P8.4P8.6端口方向?yàn)檩敵龆丝诜较驗(yàn)檩敵鲋鳈C(jī)主機(jī)SPI模塊初始化模塊初始化UCB1CTL1 |

18、= UCSWRST;UCB1CTL0|=UCMST+UCSYNC+UCCKPL+UCMSB; UCB1CTL1 |= UCSSEL_2; UCB1BR0 = 2; UCB1BR1 = 0; UCB1IE |= UCRXIE; UCB1CTL1 &= UCSWRST選擇選擇SMCLKUSCI_Bx模塊邏輯復(fù)位模塊邏輯復(fù)位3線(xiàn),線(xiàn),8位,主機(jī)模式,位,主機(jī)模式,時(shí)鐘極性高,時(shí)鐘極性高,MSB先發(fā)送先發(fā)送配置波特率配置波特率打開(kāi)打開(kāi)SPI中斷中斷USCI_Bx復(fù)位釋放復(fù)位釋放主機(jī)主機(jī)其他配置其他配置 MST_Data = 0 x01; SLV_Data = 0 x00; P1OUT |= B

19、IT1; _delay_cycles(100); while (!(UC B1IFG&UCTXIFG); UC B1TXBUF = MST_Data;主機(jī)初始化數(shù)據(jù)主機(jī)初始化數(shù)據(jù)從機(jī)從機(jī)初始化初始化數(shù)據(jù)數(shù)據(jù)延時(shí)延時(shí)判斷發(fā)送緩沖是否為空,如果為空,判斷發(fā)送緩沖是否為空,如果為空,標(biāo)志位置位,則說(shuō)明上個(gè)數(shù)據(jù)未發(fā)送完畢,標(biāo)志位置位,則說(shuō)明上個(gè)數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢等待直到數(shù)據(jù)發(fā)送完畢發(fā)送第一個(gè)字符發(fā)送第一個(gè)字符從機(jī)選擇引腳從機(jī)選擇引腳主機(jī)主機(jī)接收中斷接收中斷#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(vo

20、id) 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ā)送緩沖是否為空,如果為空,判斷發(fā)送緩沖是否為空,如果為空,標(biāo)志位置位,則說(shuō)

21、明上個(gè)數(shù)據(jù)未發(fā)送完畢,標(biāo)志位置位,則說(shuō)明上個(gè)數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢等待直到數(shù)據(jù)發(fā)送完畢 如果接收與發(fā)送相同,點(diǎn)亮如果接收與發(fā)送相同,點(diǎn)亮LED發(fā)送下一個(gè)字符發(fā)送下一個(gè)字符從機(jī)從機(jī)端口初始化端口初始化 P8SEL |= BIT4+BIT5+BIT6; P8DIR |= BIT4+BIT5+BIT6; P1REN |= BIT4; P1OUT |= BIT4; P1IES &=BIT4; P1IFG &=BIT4; P1IE |= BIT4;使能使能P1.4內(nèi)部電阻內(nèi)部電阻選擇選擇P8.4P8.6為外設(shè)功能為外設(shè)功能選擇選擇P8.4P8.6端口方向?yàn)檩敵龆丝诜较驗(yàn)檩敵?/p>

22、P1.4上升沿捕獲,進(jìn)入中斷上升沿捕獲,進(jìn)入中斷P1.4 IFG 清零清零P1.4中斷使能中斷使能主機(jī)主機(jī)SPI模塊初始化模塊初始化UCB1CTL1 |= UCSWRST;UCB1CTL0 |= UCSYNC+UCCKPL+UCMSB; UCB1CTL1 &= UCSWRSTUSCI_Bx模塊邏輯復(fù)位模塊邏輯復(fù)位3線(xiàn),線(xiàn),8位,主機(jī)模式,位,主機(jī)模式,時(shí)鐘極性高,時(shí)鐘極性高,MSB先發(fā)送先發(fā)送USCI_Bx復(fù)位釋放復(fù)位釋放從機(jī)從機(jī)接收中斷接收中斷#pragma vector=USCI_ B1_VECTOR_interrupt void USCI_ B1_ISR(void) switch

23、(_even_in_range(UC B1IV,4) case 0: break; case 2: while (!(UC B1IFG&UCTXIFG); UCA0TXBUF = UCA0RXBUF; break; case 4: break; default: break; 判斷發(fā)送緩沖是否為空,如果為空,判斷發(fā)送緩沖是否為空,如果為空,標(biāo)志位置位,則說(shuō)明上個(gè)數(shù)據(jù)未發(fā)送完畢,標(biāo)志位置位,則說(shuō)明上個(gè)數(shù)據(jù)未發(fā)送完畢,等待直到數(shù)據(jù)發(fā)送完畢等待直到數(shù)據(jù)發(fā)送完畢發(fā)送下一個(gè)字符發(fā)送下一個(gè)字符從機(jī)從機(jī)主機(jī)開(kāi)始工作提示中斷主機(jī)開(kāi)始工作提示中斷#pragma vector=PORT1_VECTOR_i

24、nterrupt void Port_1(void) P1IFG &= BIT4; P1IE &= BIT4; UCB1CTL1 |= UCSWRST; UCB1CTL1 &= UCSWRST; UCB1IE |= UCRXIE;USCI_Bx復(fù)位釋放復(fù)位釋放主機(jī)準(zhǔn)備就緒,主機(jī)準(zhǔn)備就緒,USCI_Bx模塊邏輯復(fù)位模塊邏輯復(fù)位打開(kāi)打開(kāi)SPI中斷中斷 /| XIN|- | | | -|RST XOUT|- | | | P1.2|- Data Out (UCA0SIMO) | | LED -|P1.0 P1.1|- Data In (UCA0SOMI) | | Slave r

25、eset Serial Clock Out (UCA0CLK)三線(xiàn)制主機(jī)模式多次發(fā)數(shù)據(jù),每次發(fā)的數(shù)據(jù)都加三線(xiàn)制主機(jī)模式多次發(fā)數(shù)據(jù),每次發(fā)的數(shù)據(jù)都加1,第一次發(fā),第一次發(fā)1;同時(shí)也接收從機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù),第一次接同時(shí)也接收從機(jī)發(fā)過(guò)來(lái)的數(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 |= UCSWRST; P

26、1OUT = 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 modulatio

27、n 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;

28、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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論