版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、項(xiàng)目10 MCU之間的串行通信(二)學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)n通過本項(xiàng)目的學(xué)習(xí),能夠熟練闡述串行外圍器件接口(SPI)模塊的特點(diǎn);能夠熟悉SPI控制寄存器1(SPI1C1)的配置;能夠熟悉SPI控制寄存器2(SPI2C2)的配置;能夠熟悉SPI波特率寄存器(SPI1BR)的配置;能夠熟悉SPI狀態(tài)寄存器(SPI1S)的配置;能夠熟悉SPI數(shù)據(jù)寄存器(SPI1D)的配置;能夠應(yīng)用串行外圍器件接口(SPI)模塊編寫相關(guān)的應(yīng)用程序。學(xué)習(xí)要求學(xué)習(xí)要求n能夠熟練闡述串行外圍器件接口(SPI)模塊的特點(diǎn)n能夠熟悉PI控制寄存器1(SPI1C1)的配置n能夠熟悉SPI控制寄存器2(SPI2C2)的配置n能夠熟悉SP
2、I波特率寄存器(SPI1BR)的配置n能夠熟悉SPI狀態(tài)寄存器(SPI1S)的配置n能夠熟悉SPI數(shù)據(jù)寄存器(SPI1D)的配置n能夠應(yīng)用串行外圍器件接口(SPI)模塊編寫相關(guān)的應(yīng)用程序項(xiàng)目導(dǎo)入項(xiàng)目導(dǎo)入n由兩塊飛思卡爾MC9S08GB60型單片機(jī)組成的兩個(gè)MCU之間的數(shù)據(jù)通信電路。主SPI器件,重復(fù)發(fā)送數(shù)據(jù)“0-9”,接收到確認(rèn)數(shù)據(jù)后,把確認(rèn)數(shù)據(jù)送到端口A中顯示出來。從SPI器件接收到一組“0-9”數(shù)據(jù)后回送一個(gè)確認(rèn)數(shù)據(jù)“5A”給主SPI器件,表示已接收到數(shù)據(jù)。兩個(gè)MCU間的通信硬件電路原理圖如圖10-12所示。項(xiàng)目分析項(xiàng)目分析n1用最少的元器件構(gòu)成兩個(gè)單片機(jī)通信的最小應(yīng)用系統(tǒng)。n 2應(yīng)用MC
3、9S08GB60型單片機(jī)的串行外圍器件接口模塊(SPI),將兩個(gè)單片機(jī)的數(shù)據(jù)信息互相傳遞。n在動(dòng)手實(shí)現(xiàn)兩個(gè)單片機(jī)之間的通信之前,首先學(xué)習(xí)MC9S08GB60型單片機(jī)串行外圍器件接口模塊(SPI)的相關(guān)知識(shí)及其寄存器的配置。相關(guān)知識(shí)相關(guān)知識(shí)n10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPI ( Serial Peripheral Interface,串行外圍器件接口) 總線是Motorola公司推出的一種同步串行接口技術(shù)。SPI總線系統(tǒng)是一種同步串
4、行外圍器件接口,允許MCU 與各種外圍設(shè)備以串行方式進(jìn)行通信、數(shù)據(jù)交換。外圍設(shè)備包括FLASHRAM、A/ D 轉(zhuǎn)換器、網(wǎng)絡(luò)控制器、MCU等。SPI是一種高速的、全雙工、同步的通信總線,并且在芯片的引腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。 10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n其接口包括以下四種信號(hào)線: (1)MOSI 主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入 (2)MISO 主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出 (3)SCLK(SPSCK) 時(shí)鐘信號(hào),由主器件產(chǎn)生 (4)/SS 從
5、器件使能信號(hào),由主器件控制10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n串行外圍器件接口(SPI)工作模式有兩種:主模式和從模式。SPI是一種允許一個(gè)主設(shè)備啟動(dòng)一個(gè)從設(shè)備的同步通訊的協(xié)議,從而完成數(shù)據(jù)的交換。也就是SPI是一種規(guī)定好的通訊方式。這種通信方式的優(yōu)點(diǎn)是占用端口較少,一般4根就夠基本通訊了(不算電源線)。同時(shí)傳輸速度也很高。一般來說要求主設(shè)備要有SPI控制器(也可用模擬方式),就可以與基于SPI的芯片通訊了。SPI接口是在CPU和外圍低速器件之間進(jìn)行同步串行數(shù)據(jù)傳輸,在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,高位在前低位在后,為全雙工通信,數(shù)據(jù)傳輸速度總體來說比I2C總線要
6、快,速度可達(dá)到幾Mbps。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nMC9S08GB60型單片機(jī)提供1個(gè)串行外圍器件(SPI)模塊,與該模塊相關(guān)的4個(gè)引腳與端口E共享,如圖10-1所示。例如:該模塊的MOSI1與端口E的PTE4是同屬一個(gè)引腳的。若作為串行外圍器件(SPI)模塊使用,引腳的方向由該模塊的寄存器配置,否則引腳作為通用I/O接口使用。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n串行外圍器件(SPI)模塊的特性如下:n主或從模式運(yùn)行n全雙工或單線雙向選項(xiàng)n可編程發(fā)送波特率n雙緩沖發(fā)送和接
7、收n串行時(shí)鐘相位和極性選項(xiàng)n從選擇輸出n可選擇的先高位MSB 移位或先低位LSB移位10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n圖10-2中顯示了兩個(gè) MCU 的SPI模塊的主從連接。主器件發(fā)起所有SPI 數(shù)據(jù)傳輸。在傳輸過程中,主器件將數(shù)據(jù)(在MOSI 引腳上)傳送給從器件,同時(shí)又可從從器件中接收數(shù)據(jù)(在MISO 引腳上)。這種傳輸在兩個(gè)SPI 系統(tǒng)的SPI 移位寄存器中有效地交換的數(shù)據(jù)。SPSCK是時(shí)鐘信號(hào),它由主器件產(chǎn)生并發(fā)送,而從器件則是通過該引腳接收時(shí)鐘信號(hào)。從器件必須由從選擇輸入(SS引腳)上的低電平進(jìn)行選擇。在該系統(tǒng)中,主器件把其SS 引腳配置為可選的從選擇輸出
8、。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n圖10-3是 SPI 模塊的結(jié)構(gòu)圖。SPI 的中心元件是SPI 移位寄存器。發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)寫入至雙緩沖發(fā)送器(即是寫入SPID寄存器),然后轉(zhuǎn)送至位于數(shù)據(jù)傳輸起點(diǎn)的SPI移位寄存器。接收數(shù)據(jù)時(shí),在接收1個(gè)字節(jié)數(shù)據(jù)后,數(shù)據(jù)被傳輸?shù)诫p緩沖接收器,此時(shí)數(shù)據(jù)可以被讀?。◤腟PID寄存器讀?。R_復(fù)用邏輯電路控制著MCU 引腳和SPI 模塊間的連接。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n當(dāng) SPI配置為主SPI 器件時(shí),時(shí)鐘輸出被連接到SPSCK1引腳,
9、移位寄存器的輸出被連接到MOSI1,移位寄存器的輸入從MISO1引腳接入;當(dāng) SPI 配置為從SPI器件時(shí), SPSCK引腳為時(shí)鐘輸入,MOSI1 引腳為移位寄存器輸出, MISO引腳為移位寄存器器輸入。在外部 SPI 系統(tǒng),只需將所有SPSCK 管腳彼此連接,所有MISO 管腳連接起來,所有MOSI管腳連接起來就可以了,如圖10-2所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n當(dāng)檢查到SPI 發(fā)送緩沖器空標(biāo)志(SPTEF = 1)時(shí),將數(shù)據(jù)寫入主SPI 器件中的SPI 數(shù)據(jù)寄存器就會(huì)引發(fā)SPI 傳輸。每當(dāng)SPI 移位寄存器可用時(shí),該數(shù)據(jù)便從發(fā)送數(shù)據(jù)緩沖器移至移位寄存器。
10、為了適應(yīng)不同制造商的各種同步串行外圍器件,SPI 系統(tǒng)有一個(gè)時(shí)鐘極性(CPOL)位和一個(gè)時(shí)鐘相位(CPHA)控制位,可以從四種時(shí)鐘格式中選擇一種進(jìn)行數(shù)據(jù)傳輸。CPOL位有選擇性地插入了與時(shí)鐘串行的取反邏輯。CPHA位選擇時(shí)鐘和數(shù)據(jù)間的兩種不同時(shí)鐘相位關(guān)系。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPI模塊的波特率發(fā)生器的時(shí)鐘源是總線時(shí)鐘。4個(gè)預(yù)分頻位(SPPR3SPPR0)可選擇1、2、3、4、5、6、7或8作為預(yù)分頻系數(shù)。3個(gè)速率選擇位(SPR2SPR0)分別用2、4、8、16、32、64、128、256或51
11、2來除預(yù)分頻器階段的輸出,以獲取內(nèi)部SPI主模式波特率時(shí)鐘,如圖10-6所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n串行外圍器件(SPI)模塊有5個(gè)8位寄存器,用于選擇SPI 選項(xiàng)、控制波特率、報(bào)告SPI狀態(tài)和發(fā)送/接收數(shù)據(jù)。這5個(gè)寄存器分別是:SPI控制寄存器1(SPI1C1)、SPI控制寄存器2(SPI2C2)、SPI波特率寄存器(SPI1BR)、SPI狀態(tài)寄存器(SPI1S)、SPI數(shù)據(jù)寄存器(SPI1D)。下面分別描述:10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.1.1 SPI控
12、制寄存器控制寄存器1(SPI1C1)n該寄存器是一個(gè)可讀可寫的8位寄存器,主要用于SPI模塊的功能配置,如使能控制、中斷使能等,如圖10-7所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPIE- SPI 中斷使能位 ( 用于 SPRF 和 MODF)n 該位是SPI接收緩沖器已滿(SPRF)和模式故障(MODF)事件的中斷使能位。該位有兩種狀態(tài):n 1當(dāng)SPRF 或MODF 為1,請(qǐng)求硬件中斷n 0禁止從SPRF 和MODF 中中斷(使用輪詢)10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPE-SPI系統(tǒng)使能位n該位若禁止SPI系統(tǒng),將暫停正在進(jìn)行的任
13、何傳輸,并清除數(shù)據(jù)緩沖器、最后初始化內(nèi)部狀態(tài)設(shè)備。如果SPRF位被清除,那么SPTEF=1,以指示SPI 發(fā)送數(shù)據(jù)緩沖器空。該位有兩種狀態(tài):n 1SPI系統(tǒng)使能n 0禁止SPI系統(tǒng)使能10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPTIE-SPI發(fā)送中斷使能位n該位是SPI 發(fā)送緩沖器空(SPTEF)的中斷使能位,該位有兩種狀態(tài):n 1當(dāng)SPTEF 為1 時(shí),請(qǐng)求硬件中斷n 0禁止從SPTEF 中中斷(使用輪詢)10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nMSTR-主/從模式選擇位n該位有兩種狀態(tài):n 1SPI 模塊配置為主SPI 器件n 0SPI 模塊配置
14、為輔SPI 器件10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nCPOL-時(shí)鐘極性選擇位n該位有兩種狀態(tài):n 1SPI 時(shí)鐘低有效(閑置高態(tài))n 0SPI 時(shí)鐘高有效(閑置低態(tài))10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nCPHA-時(shí)鐘相位n該位的狀態(tài)決定時(shí)鐘格式,主要用于不同類型的同步串行外圍器件。n 1SPSCK上的第一個(gè)邊沿出現(xiàn)在8 周期數(shù)據(jù)傳輸?shù)牡谝粋€(gè)周期的起點(diǎn)n 0SPSCK上的第一個(gè)邊沿出現(xiàn)在8 周期數(shù)據(jù)傳輸?shù)牡谝粋€(gè)周期的中央10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSSOE-從選擇輸出使能位n該位結(jié)合SPI1C2寄存器中的模式故
15、障使能(MODFEN)位和主從(MSTR) 控制位,以確定SS引腳的功能。如表10-1:10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nLSBFE-LSB先發(fā)位(移位寄存器方向)n該位有兩種狀態(tài):n 1SPI 串行數(shù)據(jù)傳輸始于最低位n 0SPI 串行數(shù)據(jù)傳輸始于最高位10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n例:SPI 串行數(shù)據(jù)傳輸始于最低位。分別用匯編語言和C語言實(shí)現(xiàn)。n匯編程序:nBSET 0,SPI1C1 ;將寄存器SPI1C1的第0位置1,即位LSBFE為1nC語言程序:nSPI1C1= SPI1C1 | 0 x01;/將寄存器SPI1C1的內(nèi)容和十六
16、進(jìn)制數(shù)01相或,n 即是改為L(zhǎng)SBFE位10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.1.2 SPI控制寄存器控制寄存器2(SPI1C2)n該寄存器是一個(gè)可讀可寫的8位寄存器,用于控制SPI 系統(tǒng)的可選功能。位7、6、5 和2 不執(zhí)行,始終讀為0。如圖10-8所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nMODFEN-主模式故障功能使能位n當(dāng)以從模式配置SPI 時(shí),該位沒有意義或影響(SS引腳是從選擇輸入)。在主模式中,該位決定SS 引腳的使用方式。該位有兩種狀態(tài):n 1模式故障功能使能,主SS 引腳用作模式故障輸入或從選擇輸出n 0模式故障功能禁止
17、,主SS 引腳恢復(fù)為不受SPI 控制的通用I/O接口10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nBIDIROE-雙向模式輸出使能位n雙向模式在“SPI引腳控制0”(SPC0 = 1)使能時(shí), BIDIROE位決定SPI數(shù)據(jù)輸出驅(qū)動(dòng)器是否被使能為單個(gè)雙向SPI I/O管腳。根據(jù)SPI是配置為主SPI 還是從SPI,它將MOSI (MOMI)或MISO(SISO)引腳分別用作單個(gè)SPI 數(shù)據(jù)I/O 管腳,當(dāng)SPC0 = 0, BIDIROE 沒有意義或影響。該位有兩種狀態(tài):n 1SPI I/O 管腳作為輸出使能n 0輸出驅(qū)動(dòng)器禁止,因此SPI 數(shù)據(jù)I/O 管腳作為輸入10.1 串
18、行外圍器件接口串行外圍器件接口SPI的概念的概念nSPISWAI-SPI在等待模式中停止位n該位有兩種狀態(tài):n 1當(dāng)MCU 進(jìn)入等待模式時(shí)SPI 時(shí)鐘停止n 0在等待模式中SPI 時(shí)鐘繼續(xù)運(yùn)行10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPC0-SPI引腳控制0位nSPC0位用于選擇單線雙向模式。如果MSTR = 0(從模式),SPI 將MISO(SISO) 引腳用于雙向SPI 數(shù)據(jù)傳輸。如果MSTR = 1(主模式),SPI 將MOSI (MOMI)引腳用于雙向SPI 數(shù)據(jù)傳輸。當(dāng)SPC0 =1,BIDIROE位用于使能或禁止單個(gè)雙向SPI I/O 管腳的輸出驅(qū)動(dòng)器。該位有
19、兩種狀態(tài):n 1SPI 配置用于單線雙向運(yùn)行n 0SPI 為數(shù)據(jù)輸入和數(shù)據(jù)輸出使用獨(dú)立引腳10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.1.3 SPI波特率寄存器(波特率寄存器(SPIBR)n該寄存器用于為SPI 主器件設(shè)置預(yù)分頻器和波特率系數(shù)。該寄存器可以隨時(shí)讀取或?qū)懭耄鐖D10-9所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPPR2:SPPR1:SPPR0- SPI 波特率預(yù)分頻系數(shù)n該3 位字段為SPI 波特率預(yù)分頻器選擇8 個(gè)系數(shù)中的1個(gè),如表10-2 所示。該預(yù)分頻器的輸入是總線速率時(shí)鐘 (BUSCLK)。該預(yù)分頻器的輸出連接SPI 波
20、特率系數(shù)的輸入,見圖10-6所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPR2:SPR1:SPR0- SPI 波特率系數(shù)n該3位字段為SPI 波特率系數(shù)選擇8 個(gè)系數(shù)中的一個(gè),如表9-3所示。 該被除數(shù)的輸入來自SPI 波特率預(yù)分頻器。該被除數(shù)的輸出是主模式的SPI 波特率時(shí)鐘。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.1.4 SPI狀態(tài)寄存器(狀態(tài)寄存器(SPI1S)n該寄存器有3 個(gè)只讀狀態(tài)位。位6, 3, 2, 1 和
21、0 不執(zhí)行,始終讀為0,對(duì)該寄存器寫入是沒有意義或影響的,如圖10-10所示。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPRF-SPI 讀緩沖器已滿標(biāo)志位n在完成SPI傳輸時(shí)SPRF位置1,表示所接收到的數(shù)據(jù)可以從SPI 數(shù)據(jù)寄存器 (SPID)中讀取。若要清除SPRF標(biāo)志,先讀取該標(biāo)志,然后讀取SPI 數(shù)據(jù)寄存器即可。該位有兩種狀態(tài):n 1接收數(shù)據(jù)緩沖器中有數(shù)據(jù)n 0接收數(shù)據(jù)緩沖器中無數(shù)據(jù)可用10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nSPTEF-發(fā)送緩沖器空標(biāo)志位n當(dāng)發(fā)送數(shù)據(jù)緩沖器為空時(shí)SPTEF位置1。若要清除該位,先讀取已置位SPTEF 的SPI
22、S寄存器,然后將數(shù)據(jù)值寫入SPID發(fā)送緩沖器即可。n該位有兩種狀態(tài):n 1SPI 發(fā)送緩沖器空n 0SPI 發(fā)送緩沖器不空10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念nMODF-主模式故障標(biāo)志位n如果SPI 配置為主SPI模式,且從選擇輸入引腳進(jìn)入低電平,MODF位置1,表示其他一些SPI器件也配置為主SPI模式。只有當(dāng)MSTR = 1、MODFEN = 1、SSOE = 0 時(shí),SS 引腳才作為模式故障錯(cuò)誤輸入,否則將永遠(yuǎn)不會(huì)置位MODF。當(dāng)MODF 為1 時(shí),如要清除MODF,可以先讀MODF位,然后寫入SPI 控制寄存器1(SPIC1)。該位有兩種狀態(tài):n 1檢測(cè)到模式故
23、障錯(cuò)誤n 0無模式故障錯(cuò)誤10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n10.1.5 SPI數(shù)據(jù)寄存器(數(shù)據(jù)寄存器(SPI1D)n如圖10-11,讀取該寄存器時(shí),返回的是接收數(shù)據(jù)緩沖器的數(shù)據(jù)。將數(shù)據(jù)寫入該寄存器時(shí),SPI模塊會(huì)把數(shù)據(jù)寫入至發(fā)送數(shù)據(jù)緩沖器。當(dāng)SPI配置為主SPI模式時(shí),向發(fā)送數(shù)據(jù)緩沖器寫入數(shù)據(jù)將引發(fā)一個(gè)SPI傳輸。如果SPI 發(fā)送緩沖器空標(biāo)志(SPTEF)已置1,則表示發(fā)送緩沖器中有一定的空間來準(zhǔn)備新的發(fā)送數(shù)據(jù),則可把數(shù)據(jù)寫入發(fā)送數(shù)據(jù)緩沖器。10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念10.1 串行外圍器件接口串行外圍器件接口SPI的概念的概念n在
24、置位SPRF后并完成另外一個(gè)數(shù)傳輸據(jù)前的這段時(shí)間,可以隨時(shí)從SPID寄存器中讀取數(shù)據(jù)。如果在新數(shù)據(jù)傳輸結(jié)束前未能從接收數(shù)據(jù)緩沖器讀取數(shù)據(jù),就會(huì)導(dǎo)致接收溢出,新傳輸?shù)臄?shù)據(jù)將會(huì)丟失。10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n上述內(nèi)容提到,MCU之間的數(shù)據(jù)和MCU與外部設(shè)備的信息交換稱為通信。通信的基本方式有兩種:并行通信和串行通信。而串行通信又分為同步串行通信和異步串行通信。SPI器件之間的通信為同步串行通信。下面例子是兩個(gè)MCU之間通過采用SPI同步串行通信方式進(jìn)行數(shù)據(jù)通信。10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n例:MCU之間的數(shù)據(jù)通信
25、。主SPI器件,重復(fù)發(fā)送數(shù)據(jù)“0-9”,接收到確認(rèn)數(shù)據(jù)后,把確認(rèn)數(shù)據(jù)送到端口A中顯示出來。從SPI器件接收到一組“0-9”數(shù)據(jù)后回送一個(gè)確認(rèn)數(shù)據(jù)“5A”給主SPI器件,表示已接收到數(shù)據(jù)。兩個(gè)MCU間的通信硬件電路原理圖如圖10-12所示。圖10-13為主SPI器件程序方框圖,圖10-14從SPI器件程序方框圖。10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nSPI主器件匯
26、編源程序:n INCLUDE derivative.incn XDEF _Startup, mainn XREF _SEG_END_SSTACK 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n;- nMY_ZEROPAGE: SECTION SHORT ; 變量定義區(qū)ncont1 ds 1;nvolum ds 1n;-n ORG $FFE0 ; 中斷向量地址n_vect:n DC.W isrVspi1 ; 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n; code section ;主程序nMyCode: SECTIONnmain:n_Start
27、up:n LDHX #_SEG_END_SSTACK ; 初始化堆棧指針n TXSn CLI ; 中斷使能n JSR MCU_init ; 調(diào)用初始化子程序10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nmainLoop:n BRSET 7,SPI1S,receive_routing ;若為接收滿標(biāo)志為1則轉(zhuǎn) n BRA mainLoopn receive_routing:n MOV SPI1D,PTAD ;將接收到的數(shù)據(jù)送到PTAD寄存器中n LDA SPI1S ;清除標(biāo)志n BRA mainLoop10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n
28、 MCU_init:n n MOV #$FF,PTAD ;輸出為1 n MOV #$FF,PTADD ;端口A方向?yàn)檩敵?n MOV #$00,volum ;初始化兩個(gè)變量n MOV #$0A,cont1 n CLR SPI1C1 ; n MOV #$19,SPI1C2 ;故障模式全能 SPI I/O 管腳作為輸出使能 配置用于單線雙向運(yùn)行 n MOV #$11,SPI1BR ;時(shí)鐘頻率為500K n LDA SPI1S ;清除標(biāo)志 n MOV #$7A,SPI1C1 ;SPI系統(tǒng)使能 請(qǐng)求硬件中斷 配置為主SPI器件 SPI時(shí)鐘低有效(閑置高態(tài)) n RTS10.2 串行外圍器件(串行外圍器
29、件(SPI)模塊的應(yīng)用)模塊的應(yīng)用10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n ;-n XDEF isrVspi1 ;SPI發(fā)送中斷子程序nisrVspi1:n n LDA SPI1S ;清除標(biāo)志 n DBNZ cont1,loop ;cont1變量減1不等則轉(zhuǎn)n MOV #$0A,cont1n MOV #$00,volumn RTInloop:n INC volum ;重復(fù)發(fā)送0-9的內(nèi)容n MOV volum,SPI1Dn RTI10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nSPI從器件匯編源程序:n INCLUDE derivative.
30、incn XDEF _Startup, mainn XREF _SEG_END_SSTACK n ;-n ORG $FFE0 ;中斷向量表n_vect:n DC.W isrVspi1 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nMY_ZEROPAGE: SECTION SHORT ; 變量定義nCOUNT ds 1;nVOLM ds 1n;-nMyCode: SECTION ;代碼區(qū)nmain:10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n_Startup:n LDHX #_SEG_END_SSTACK ; 初始化堆棧n TXSn CLI ;
31、中斷使能n n SPI1C1:SPIE=0,SPE=0,SPTIE=0,MSTR=0,CPOL=0,CPHA=0,SSOE=0,LSBFE=0 n CLR SPI1C1 n ; SPI1C2: MODFEN=1,BIDIROE=0,SPISWAI=0,SPC0=0 n MOV #$10,SPI1C2 n ; SPI1BR: SPPR2=0,SPPR1=0,SPPR0=1,SPR2=0,SPR1=0,SPR0=1 n MOV #$11,SPI1BR 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n LDA SPI1S ; 讀SPI1S清除 MODF 標(biāo)志 n ;SPI1C1
32、: SPIE=1,SPE=1,SPTIE=0,MSTR=0,CPOL=1,CPHA=1,SSOE=0,LSBFE=0 n MOV #$CC,SPI1C1 n n LDA #$0n STA COUNT ;初始化計(jì)數(shù)變量nmainLoop:n ; Insert your code heren NOPn feed_watchdog ;喂看門狗用于防干擾n BRA mainLoopn;- 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n XDEF isrVspi1 ;SPI中斷子程序nisrVspi1:n LDA SPI1S ; 讀SPI1S清除 MODF 標(biāo)志 n MOV SP
33、I1D,VOLM ;讀取數(shù)值 存放在變量VOLM中n INC COUNT ;計(jì)數(shù)器加1n LDA COUNT ;比較,看是否讀取了10個(gè)數(shù)據(jù),是則跳轉(zhuǎn)到SEND_DATAn CBEQA #$A,SEND_DATAn RTI10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nSEND_DATA: n LDA #$5An STA SPI1D ;發(fā)送回復(fù)信號(hào)5An LDA #$0 ;初始化計(jì)數(shù)變量,重新計(jì)數(shù)n STA COUNTn RTI10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nSPI主器件C語言源程序:n#include n#include deriv
34、ative.h nbyte count1,volum;nvoid MCU_init(void);n_interrupt void isrVspi1(void);10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nvoid (* near const _vect)(void) 0 xFFE0 = n n isrVspi1, /SPI發(fā)送中斷入口地址 n n;10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nvoid main(void) /主程序n EnableInterrupts; /中斷使能n MCU_init(); /初始化n n for(;) n n
35、 _RESET_WATCHDOG(); /喂看門狗,用于防干擾 n if(SPI1S=SPI1S_SPRF_MASK) /是否有接收滿標(biāo)志n /有接收滿標(biāo)志則把接收到的數(shù)據(jù)送到PTAD中n n (void)(SPI1S = 0); /清除標(biāo)志位n PTAD=SPI1D;n n n n n10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n void MCU_init(void) /初始化子程序n n /*SPI1C1:SPIE=0,SPE=0,SPTIE=0,MSTR=0,CPOL=0,CPHA=0,SSOE=0,LSBFE=0 */n SPI1C1 = 0 x00; /先禁
36、止所有位n /* SPI1C2: MODFEN=0,BIDIROE=0,SPISWAI=0,SPC0=0 */n SPI1C2 = 0 x00; /模式故障功能禁止 輸出驅(qū)動(dòng)器禁止 SPI 為數(shù)據(jù)輸入和數(shù)據(jù)輸出使用獨(dú)立引腳 n /* SPI1BR: SPPR2=0,SPPR1=0,SPPR0=1,SPR2=0,SPR1=1,SPR0=1 */n SPI1BR = 0 x13; /預(yù)分頻系數(shù)為2,波特率系數(shù)為16 n (void)(SPI1S = 0); /清除標(biāo)志位n/*SPI1C1:SPIE=0,SPE=1,SPTIE=1,MSTR=1,CPOL=0,CPHA=0,SSOE=0,LSBFE=
37、0 */n SPI1C1 = 0 x70; /SPI系統(tǒng)使能位,SPI發(fā)送中斷使能位,SPI 模塊配置為主SPI 器件 n PTAD = 0 xFF; /數(shù)據(jù)為FF n PTADD = 0 xFF; /設(shè)置為輸出口n n count1 = 0 x0a; /計(jì)數(shù)變量為0An volum = 0 x00; /要發(fā)送的數(shù)據(jù) n n 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n_interrupt void isrVspi1(void) / SPI發(fā)送中斷子程序nn n (void)(SPI1S = 0); /清除標(biāo)志位n count1-=1; /計(jì)數(shù)變量減1n if(cou
38、nt1=0) /計(jì)數(shù)變量是否等于0n n count1 = 0 x0a; /是,則重新設(shè)值n volum = 0 x00; n n SPI1D=volum; /不是,把要發(fā)送的數(shù)據(jù)發(fā)送出去n volum+=1; /要發(fā)送的數(shù)據(jù)加1nn/-10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nSPI從器件C語言源程序:n#include n#include derivative.h nbyte count,volm; /聲明變量及函數(shù)nvoid MCU_init(void);n_interrupt void isrVspi1(void) ;n void (* near const _vect)(void) 0 xFFE0 = n n isrVspi1, /SPI接收滿中斷地址 n n;10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用nvoid main(void) /主程序n EnableInterrupts; /中斷使能n MCU_init();n for(;) n n _RESET_WATCHDOG(); /喂看門狗,用于防干擾n n n 10.2 串行外圍器件(串行外圍器件(SPI)模塊的應(yīng)用)模塊的應(yīng)用n void MCU_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年園林景觀照明系統(tǒng)設(shè)計(jì)與安裝合同3篇
- 2024年版新員工勞動(dòng)協(xié)議模板指導(dǎo)樣例版B版
- 音樂教學(xué)工作計(jì)劃
- 2021后勤工作總結(jié)范文
- 全年工作計(jì)劃集合六篇
- 2021員工辭職報(bào)告集錦15篇
- 公司的活動(dòng)總結(jié)感悟10篇
- 公司技術(shù)員個(gè)人工作總結(jié)例文8篇
- 教導(dǎo)工作計(jì)劃四篇
- 遠(yuǎn)程培訓(xùn)總結(jié)(15篇)
- 國(guó)開電大軟件工程形考作業(yè)3參考答案
- 中職產(chǎn)教融合建設(shè)實(shí)施方案
- GB/T 16462.1-2023數(shù)控車床和車削中心檢驗(yàn)條件第1部分:臥式機(jī)床幾何精度檢驗(yàn)
- 通用電子嘉賓禮薄
- 廣東省深圳市南山區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(含解析)
- 品質(zhì)體系規(guī)劃
- 檢驗(yàn)科的分子組出科小結(jié)
- 安全生產(chǎn)合規(guī)性評(píng)估報(bào)告
- 大象版小學(xué)科學(xué)四年級(jí)下冊(cè)5.1《小船與浮力》課件
- 鼻竇炎-疾病研究白皮書
- 污泥( 廢水)運(yùn)輸服務(wù)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論