第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例_第1頁(yè)
第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例_第2頁(yè)
第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例_第3頁(yè)
第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例_第4頁(yè)
第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第12章MC9S12系列SPI和I2C模塊與其應(yīng)用實(shí)例第一頁(yè),共63頁(yè)。第12章

MC9S12系列SPI和I2C模塊

及其應(yīng)用實(shí)例

SPI模塊

SPI模塊結(jié)構(gòu)組成和特點(diǎn)

SPI模塊寄存器及設(shè)置SPI模塊應(yīng)用實(shí)例

I2C總線接口

I2C模塊結(jié)構(gòu)組成和特點(diǎn)

I2C模塊寄存器及設(shè)置

I2C模塊在智能車系統(tǒng)中的應(yīng)用 單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二頁(yè),共63頁(yè)。12.1SPI模塊

串行外設(shè)接口(SerialPeripheralInterface,SPI)總線系統(tǒng)是一種同步串行外設(shè)接口,可以用于MCU與各種外圍設(shè)備間以串行方式進(jìn)行通信。外圍設(shè)備包括EEPROM、Flash、實(shí)時(shí)時(shí)鐘模塊、液晶顯示模塊、AD轉(zhuǎn)換器等。SPI總線接口由一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備組成,主設(shè)備啟動(dòng)與從設(shè)備的同步通信,從而完成數(shù)據(jù)傳輸。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三頁(yè),共63頁(yè)。12.1SPI模塊

SPI總線接口一般需要使用4根線連接,如圖12.1所示。

單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四頁(yè),共63頁(yè)。12.1SPI模塊

①串行時(shí)鐘(SerialClock,SCK)線是主機(jī)和從機(jī)之間數(shù)據(jù)傳輸?shù)耐叫盘?hào)。對(duì)于主機(jī)而言,SCK是時(shí)鐘輸出引腳;對(duì)于從機(jī)則SCK是時(shí)鐘輸入引腳。在主機(jī)模式下,SCK時(shí)鐘信號(hào)來源于主機(jī)(如微控制器)內(nèi)部總線時(shí)鐘。如果傳輸數(shù)據(jù)寬度為8位,則每當(dāng)主機(jī)發(fā)起一次傳送時(shí),則SCK引腳上就會(huì)產(chǎn)生8個(gè)時(shí)鐘周期。在主機(jī)與從機(jī)之間,數(shù)據(jù)傳輸發(fā)生在SCK信號(hào)的跳變沿(如上升沿),等待數(shù)據(jù)穩(wěn)定后,在另一個(gè)SCK跳變沿(如下降沿)采集數(shù)據(jù)。 ②主機(jī)輸入、從機(jī)輸出(MasterIn/SlaveOut,MISO)數(shù)據(jù)線是SPI模塊的兩根串行數(shù)據(jù)線之一。在全雙工模式下,SPI主機(jī)的MISO連接到SPI從機(jī)的MISO,這樣,數(shù)據(jù)由從機(jī)傳送到主機(jī)。在SPI設(shè)備配置為主機(jī)工作模式時(shí),主機(jī)通過其MISO引腳接收數(shù)據(jù)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五頁(yè),共63頁(yè)。12.1SPI模塊 ③主機(jī)輸出、從機(jī)輸入(MasterOut/SlaveIn,MOSI)數(shù)據(jù)線是SPI模塊的另外一根串行數(shù)據(jù)線。在全雙工模式下,SPI主機(jī)的MOSI連接到SPI從機(jī)的MOSI。這樣,主機(jī)通過MOSI發(fā)送數(shù)據(jù)的同時(shí),從機(jī)通過MOSI接收數(shù)據(jù)。在SPI設(shè)備配置為主機(jī)工作模式時(shí),主機(jī)通過其MOSI引腳發(fā)送數(shù)據(jù)。 ④從機(jī)選擇線SS(低電平有效)。SS(SlaveSelect)在主機(jī)和從機(jī)模式中具有不同的功能。在從機(jī)模式下,是一次數(shù)據(jù)傳輸開始前允許SPI工作的片選信號(hào);在主機(jī)模式下,SS可以置位MODF標(biāo)志位,保證一個(gè)系統(tǒng)只有一個(gè)SPI接口作為主機(jī)。 從圖12.1可以看出,SPI主從機(jī)接口的工作原理,如同一個(gè)移位寄存器,一半在主機(jī)內(nèi),一半在外設(shè)中。當(dāng)SPI工作時(shí),通過串行時(shí)鐘線SCK的同步信號(hào),循環(huán)移位,從而實(shí)現(xiàn)了主機(jī)與外設(shè)的數(shù)據(jù)交換。實(shí)際使用時(shí),這種數(shù)據(jù)交換可能按照一個(gè)方向移位,具體的數(shù)據(jù)流動(dòng)方向與工作方式有關(guān)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第六頁(yè),共63頁(yè)。12.1SPI模塊 SPI的工作模式主要有以下三種。 ①主機(jī)模式。在主機(jī)模式下,串行時(shí)鐘(SCK)由主機(jī)內(nèi)部時(shí)鐘分頻得到,用來同步主/從機(jī)雙方移位寄存器的數(shù)據(jù)傳輸。當(dāng)向主機(jī)MC9S12XS128的SPI數(shù)據(jù)寄存器SPIDR寫入數(shù)據(jù)后,數(shù)據(jù)傳送開始。如果此時(shí)主機(jī)SPI移位寄存器為空,則數(shù)據(jù)立即被傳送到移位寄存器,數(shù)據(jù)在SCK的控制下從主機(jī)MOSI引腳串行輸出,傳送給從機(jī)設(shè)備。從MOSI引腳輸出數(shù)據(jù),從MISO引腳輸入數(shù)據(jù)。

②從機(jī)模式。在從機(jī)模式下,從機(jī)串行時(shí)鐘(SCK)由主機(jī)產(chǎn)生,從機(jī)SPI的SCK引腳為輸入口。引腳為從機(jī)的片選輸入引腳,低電平有效,在數(shù)據(jù)傳送前需要置為低電平,并保持到數(shù)據(jù)傳送結(jié)束。從機(jī)通過SCK與主機(jī)同步,進(jìn)行數(shù)據(jù)的讀/寫操作,從MOSI引腳輸入數(shù)據(jù),從MISO引腳輸出數(shù)據(jù)。

③全雙工模式(即雙向工作模式)。在全雙工模式下,無論是主機(jī)模式還是從機(jī)模式,同時(shí)只用一個(gè)引腳傳輸數(shù)據(jù)。數(shù)據(jù)傳輸方向由主機(jī)MC9S12XS128的SPICR2寄存器中的BIDIROE位進(jìn)行選擇,詳見后面的寄存器部分介紹。

MC9S12XS128內(nèi)置有1個(gè)SPI接口模塊SPI0,使用端口PORTS4~PORTS7。以下著重介紹SPI模塊的特性、寄存器功能及設(shè)置,并通過應(yīng)用實(shí)例,說明SPI模塊的編程實(shí)現(xiàn)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第七頁(yè),共63頁(yè)。12.2SPI模塊結(jié)構(gòu)組成和特點(diǎn)

MC9S12XS128內(nèi)置的SPI模塊如圖12.2所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第八頁(yè),共63頁(yè)。12.2SPI模塊結(jié)構(gòu)組成和特點(diǎn) SPI模塊具有以下基本特征:正常模式:主機(jī)模式和從機(jī)模式;全雙工模式;從機(jī)選擇輸出;具有CPU中斷能力的模式故障錯(cuò)誤標(biāo)志;雙緩沖操作;極性和相位可編程的串行時(shí)鐘。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第九頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 MC9S12XS128的SPI模塊共有5個(gè)寄存器,詳見表12-1。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.1SPI控制寄存器1(SPICR1)

SPI控制寄存器1(SPIControlRegister1,SPICR1)如圖12.3所示。

讀:任何時(shí)刻;寫:任何時(shí)刻。 SPIE:SPI中斷使能位,該位使能允許SPI狀態(tài)標(biāo)志位SPIF或者M(jìn)ODF產(chǎn)生中斷請(qǐng)求。 0表示禁止SPI中斷請(qǐng)求;

1表示允許SPI中斷請(qǐng)求。 SPE:SPI模塊功能使能位,該位使能允許使用SPI模塊功能并設(shè)置相應(yīng)的端口引腳為SPI模塊功能應(yīng)用。如果清零SPE位,SPI模塊禁用且被強(qiáng)制進(jìn)入空閑狀態(tài),SPISR寄存器中的狀態(tài)位復(fù)位。 0表示禁用SPI模塊功能(應(yīng)用于低功耗); 1表示使用SPI模塊功能。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十一頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.1SPI控制寄存器1(SPICR1) SPTIE:SPI發(fā)送中斷使能位,該位使能允許SPI狀態(tài)標(biāo)志位SPTEF產(chǎn)生中斷請(qǐng)求。 0表示禁止SPTEF中斷請(qǐng)求; 1表示允許SPTEF中斷請(qǐng)求。 MSTR:SPI主/從模式選擇位,該位確定SPI模塊工作在主機(jī)模式還是從機(jī)模式。將SPI模塊從主機(jī)模式切換到從機(jī)模式,或者反向切換,都會(huì)使SPI系統(tǒng)進(jìn)入空閑狀態(tài)。 0表示從機(jī)模式; 1表示主機(jī)模式。 CPOL:SPI時(shí)鐘極性選擇位,該位確定時(shí)鐘SCK極性為反向還是非反向。為了保證兩個(gè)SPI模塊之間傳輸數(shù)據(jù),SPI模塊必須設(shè)置相同的CPOL位值。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示時(shí)鐘SCK高電平有效,低電平空閑; 1表示時(shí)鐘SCK低電平有效,高電平空閑。 CPHA:SPI時(shí)鐘相位選擇位,該位確定SPI時(shí)鐘模式。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示在時(shí)鐘SCK奇數(shù)邊沿(1、3、5、…)采樣數(shù)據(jù); 1表示在時(shí)鐘SCK偶數(shù)邊沿(2、4、6、…)采樣數(shù)據(jù)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十二頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.1SPI控制寄存器1(SPICR1) SPI的時(shí)鐘模式如圖12.4和圖12.5所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十三頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.1SPI控制寄存器1(SPICR1) SSOE:從機(jī)選擇輸出使能位。當(dāng)SPICR2寄存器中的MODFEN置位時(shí),主機(jī)模式下,通過設(shè)置SSOE位確定SS引腳輸入/輸出特性,詳見表12-2。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 LSBFE:SPI最低位LSB先發(fā)送使能位,該位不影響數(shù)據(jù)寄存器中最高位MSB和最低位LSB的位置,讀取或?qū)懭霐?shù)據(jù)寄存器,MSB總是在第7位。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示SPI先傳送數(shù)據(jù)最高位MSB; 1表示SPI先傳送數(shù)據(jù)最低位LSB。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十四頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.2SPI控制寄存器2(SPICR2) SPI控制寄存器2(SPIControlRegister2,SPICR2)如圖12.6所示。

讀:任何時(shí)刻;寫:任何時(shí)刻,寫保留位無效。 XFRW:傳送數(shù)據(jù)寬度位,該位確定SPI傳送數(shù)據(jù)寬度。如果選擇8位數(shù)據(jù)傳送寬度,則使用SPIDRL作為數(shù)據(jù)寄存器而不使用SPIDRH。如果選擇16位數(shù)據(jù)傳送寬度,則使用SPIDRH和SPIDRL組成16位數(shù)據(jù)寄存器。請(qǐng)參考12.3.4節(jié)關(guān)于發(fā)送/接收數(shù)據(jù)掛起和中斷標(biāo)志位清除機(jī)制的信息。主機(jī)模式下,該位變化將中止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示傳送8位數(shù)據(jù)寬度; 1表示傳送16位數(shù)據(jù)寬度。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十五頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.2SPI控制寄存器2(SPICR2) MODFEN:模式錯(cuò)誤使能位,該位使能允許檢測(cè)SPISR寄存器中的模式錯(cuò)誤標(biāo)志位MODF。如果SPI為主機(jī)模式且MODFEN位為“0”時(shí),則SS引腳不能應(yīng)用于SPI模塊功能,僅作為通用I/O口使用;如果SPI為從機(jī)模式,無論MODFEN為何值,SS引腳都作為SPI模塊輸入功能使用。MODFEN位設(shè)置對(duì)SS引腳的功能影響參見表12-2。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示SS引腳不使用SPI模塊功能; 1表示SS引腳使用SPI模塊功能,具有MODF位特性。 BIDIROE:雙向工作模式下輸出使能位。當(dāng)SPC0=1,SPI模塊處于雙向工作模式時(shí),該位確定SPI模塊MOSI和MISO的輸出緩沖。主機(jī)模式下,該位確定MOSI端口的輸出緩沖;從機(jī)模式下,該位確定MISO端口的輸出緩沖。主機(jī)模式下,當(dāng)SPC0置位時(shí),該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 0表示禁止輸出緩沖功能; 1表示允許輸出緩沖功能。 SPISWAI:等待模式下SPI模塊時(shí)鐘停止位,該位用于等待模式下的低功耗應(yīng)用。 0表示等待模式下SPI模塊時(shí)鐘正常工作; 1表示等待模式下SPI模塊時(shí)鐘停止工作。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十六頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.2SPI控制寄存器2(SPICR2) SPC0:串行引腳控制位0,該位確定雙向引腳的功能配置,詳見表12-3。主機(jī)模式下,該位變化將終止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十七頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.3SPI波特率寄存器(SPIBR)

SPI波特率寄存器(SPIBaudRateRegister,SPIBR)如圖12.7所示。

讀:任何時(shí)刻;寫:任何時(shí)刻,對(duì)保留位寫操作無效。 SPPR2~SPPR0:SPI波特率預(yù)分頻位。主機(jī)模式下,這些位的變化將中止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。 SPR2~SPR0:SPI波特率選擇位。主機(jī)模式下,這些位的變化將中止正在進(jìn)行的數(shù)據(jù)傳送,且SPI系統(tǒng)被強(qiáng)制進(jìn)入空閑模式。

這些位的配置可以選擇不同的SPI波特率,波特率選擇配置詳見表12-4。波特率計(jì)算公式為

波特率分頻系數(shù)=(SPPR+1)×2(SPR+1)

波特率=總線時(shí)鐘/波特率分頻系數(shù)單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十八頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.3SPI波特率寄存器(SPIBR)單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第十九頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.3SPI波特率寄存器(SPIBR)單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.4SPI狀態(tài)寄存器(SPISR) SPI狀態(tài)寄存器(SPIStatusRegister,SPISR)如圖12.8所示。

讀:任何時(shí)刻;寫:無效。 SPIF:SPIF中斷標(biāo)志位。接收到的數(shù)據(jù)被傳送至SPI數(shù)據(jù)寄存器SPIDR后,該位置位。關(guān)于清除SPIF位的詳細(xì)說明,參見表12-5。 0表示數(shù)據(jù)傳送沒有完成; 1表示數(shù)據(jù)已傳送到SPI數(shù)據(jù)寄存器。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十一頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.4SPI狀態(tài)寄存器(SPISR)

注1:這種情況下,SPIDRH寄存器中的數(shù)據(jù)丟失。

注2:SPIDRH可以被重復(fù)讀取數(shù)據(jù),對(duì)SPIF位沒有任何影響。只有在SPIF=1時(shí),讀取SPISR寄存器,之后再讀取SPIDRL寄存器,則SPIF位才能清除。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十二頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.4SPI狀態(tài)寄存器(SPISR) SPTEF:SPI發(fā)送空中斷標(biāo)志位。當(dāng)發(fā)送數(shù)據(jù)寄存器為空SPIDR時(shí),該位置位。關(guān)于清除該標(biāo)志位以及發(fā)送SPIDR寄存器中的數(shù)據(jù)的詳細(xì)說明,參見表12-6。 0表示SPI數(shù)據(jù)寄存器SPIDR非空; 1表示SPI數(shù)據(jù)寄存器SPIDR已空。

注1:SPTEF=0時(shí),任何對(duì)SPIDRH或SPIDRL寄存器寫操作會(huì)被忽略。

注2:這種情況下,SPIDRH中的數(shù)據(jù)無效。

注3:SPIDRH可以被重復(fù)寫入數(shù)據(jù),對(duì)SPIF位沒有任何影響。只有在SPTEF=1時(shí),讀取SPISR寄存器,之后再寫SPIDRL寄存器,則SPTEF位才能清除。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十三頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.4SPI狀態(tài)寄存器(SPISR) MODF:模式錯(cuò)誤標(biāo)志位。當(dāng)SPI配置為主機(jī)時(shí),且SPICR2寄存器中的MODFEN=1時(shí),如果主機(jī)檢測(cè)到SS引腳輸入變低,該位置位。當(dāng)MODF置位后,通過讀取SPI狀態(tài)寄存器SPISR,然后寫數(shù)據(jù)到SPI控制寄存器SPICR1清除該位。 0表示模式錯(cuò)誤未發(fā)生; 1表示模式錯(cuò)誤已發(fā)生。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十四頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.5SPI數(shù)據(jù)寄存器(SPIDR:SPIDRH,SPIDRL) SPI數(shù)據(jù)寄存器(SPIDataRegister,SPIDR)如圖12.9和12.10所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十五頁(yè),共63頁(yè)。12.3SPI模塊寄存器及設(shè)置 12.3.5SPI數(shù)據(jù)寄存器(SPIDR:SPIDRH,SPIDRL)

讀:任何時(shí)刻,只在SPIF置位后讀取數(shù)據(jù)有效;寫:任何時(shí)刻。 SPI數(shù)據(jù)寄存器SPIDR是SPI數(shù)據(jù)傳送的輸入/輸出寄存器。寫入數(shù)據(jù)到SPIDR寄存器,則允許該數(shù)據(jù)進(jìn)入發(fā)送隊(duì)列并發(fā)送。對(duì)于SPI主機(jī),當(dāng)移位寄存器中的數(shù)據(jù)發(fā)送完成后,隊(duì)列數(shù)據(jù)就會(huì)被立即發(fā)送。SPI狀態(tài)寄存器SPISR中的發(fā)送空標(biāo)志位SPTEF表明SPI數(shù)據(jù)寄存器是否準(zhǔn)備好接收新數(shù)據(jù)。

當(dāng)SPIF置位時(shí),SPIDR寄存器中的接收數(shù)據(jù)有效。

如果SPIF位被清零且已經(jīng)接收到數(shù)據(jù),則接收到的數(shù)據(jù)會(huì)從移位寄存器傳送到SPIDR寄存器,然后置位SPIF。

如果SPIF=1,但沒有對(duì)接收到的SPIDR寄存器中的第一個(gè)數(shù)據(jù)進(jìn)行及時(shí)操作,這時(shí)又接收到了第二個(gè)數(shù)據(jù),第二個(gè)數(shù)據(jù)在移位寄存器中將一直保持有效直到接收到第三個(gè)數(shù)據(jù),而SPIDR寄存器中的第一個(gè)數(shù)據(jù)保持不變。

如果SPIF=1,且有效數(shù)據(jù)在移位寄存器中,SPIF位在第三個(gè)數(shù)據(jù)開始接收前被清零了,則移位寄存器中的第二個(gè)數(shù)據(jù)會(huì)傳送到SPIDR寄存器,而SPIF位重新為1。

如果SPIF=1,且有效數(shù)據(jù)在移位寄存器中,SPIF在第三個(gè)數(shù)據(jù)開始接收后才被清零,則移位寄存器中的第二個(gè)數(shù)據(jù)將變?yōu)闊o效,也不會(huì)被傳送到SPIDR寄存器,這時(shí)第三個(gè)數(shù)據(jù)將會(huì)接收到移位寄存器中。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十六頁(yè),共63頁(yè)。12.4SPI模塊應(yīng)用實(shí)例

本實(shí)例使用SPI發(fā)送數(shù)據(jù),實(shí)例電路原理圖如圖12.11所示,圖中74LS164是8位串行輸入/并行輸出移位寄存器,通過該芯片將MC9S12XS128中SPI模塊的MOSI輸出的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),輸出的并行數(shù)據(jù)連接到4位8段數(shù)碼管的段引腳,4位共陽(yáng)極數(shù)碼管的公共端由PORTA0~PORTA3控制。編程實(shí)現(xiàn)4位數(shù)碼管從左到右分別顯示數(shù)字3210。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十七頁(yè),共63頁(yè)。12.4SPI模塊應(yīng)用實(shí)例程序清單:?jiǎn)纹瑱C(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十八頁(yè),共63頁(yè)。12.4SPI模塊應(yīng)用實(shí)例程序清單:?jiǎn)纹瑱C(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第二十九頁(yè),共63頁(yè)。12.4SPI模塊應(yīng)用實(shí)例程序清單:?jiǎn)纹瑱C(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十頁(yè),共63頁(yè)。12.4SPI模塊應(yīng)用實(shí)例程序清單:?jiǎn)纹瑱C(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十一頁(yè),共63頁(yè)。12.5I2C總線接口12.5.1I2C總線概述

NXP半導(dǎo)體(原Philips半導(dǎo)體)公司于20世紀(jì)80年代初推出了一種簡(jiǎn)單的雙向二線制串行通信總線,這種總線被稱為Inter-IC(I2C或IIC或I2C)總線。目前I2C總線已經(jīng)成為業(yè)界嵌入式應(yīng)用的標(biāo)準(zhǔn)解決方案,同SPI總線一樣,被廣泛地應(yīng)用在基于微控制器與各種外圍設(shè)備之間的串行通信,可以作為控制、診斷與電源管理等方面的數(shù)據(jù)通信總線,主要應(yīng)用領(lǐng)域包括消費(fèi)類電子、電信產(chǎn)品等。多個(gè)符合I2C總線標(biāo)準(zhǔn)的器件都可以通過同一條I2C總線進(jìn)行通信,而不需要額外的地址譯碼器。I2C是一種兩線制串行總線,因此操作非常簡(jiǎn)單。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十二頁(yè),共63頁(yè)。12.5I2C總線接口12.5.1I2C總線概述

I2C總線有很多特點(diǎn),如下所述:總線僅由2根信號(hào)線組成,分別是數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)??偩€協(xié)議簡(jiǎn)單。協(xié)議容易實(shí)現(xiàn),即使微控制器內(nèi)部沒有集成I2C總線接口,也能夠方便地利用開漏或集電極開路的I/O或準(zhǔn)雙向I/O端口模擬實(shí)現(xiàn)。支持的器件多,NXP半導(dǎo)體最早提出I2C總線協(xié)議,目前恩智浦半導(dǎo)體(NXP)、飛思卡爾半導(dǎo)體(Freescale)、德州儀器(TI)、美國(guó)國(guó)家半導(dǎo)體(NationalSemiconductor)、意法半導(dǎo)體(ST)、美信半導(dǎo)體(Maxim)等公司都有大量帶有I2C總線接口的產(chǎn)品,這為用戶設(shè)計(jì)產(chǎn)品時(shí)選擇合適的I2C器件提供了廣闊的空間??偩€上可同時(shí)掛接多個(gè)器件,同一條I2C總線上可以掛接很多個(gè)器件,一般可達(dá)數(shù)十個(gè)以上,甚至更多。器件之間是靠不同的編址來區(qū)分的,而不需要附加的I/O線或地址譯碼部件。總線可裁減性好,在原有總線連接的基礎(chǔ)上可以隨時(shí)新增或者刪除器件,用軟件可以很容易實(shí)現(xiàn)I2C總線的自檢功能,能夠及時(shí)發(fā)現(xiàn)總線上器件的變動(dòng)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十三頁(yè),共63頁(yè)。12.5I2C總線接口12.5.1I2C總線概述

總線電氣兼容性好,I2C總線規(guī)定器件之間以開漏I/O互連,這樣只要選取適當(dāng)?shù)纳侠娮杈湍茌p易實(shí)現(xiàn)3V/5V邏輯電平的兼容,而不需要額外的電平轉(zhuǎn)換。支持多種通信方式,一主多從是最常見的通信方式,此外還支持雙主機(jī)通信、多主機(jī)通信以及廣播通信模式等。通信速率高,I2C總線標(biāo)準(zhǔn)傳輸速率為100kb/s,在快速模式下為400kb/s。按照以后修訂的版本,位傳輸速率可高達(dá)3.4Mb/s。兼顧低速通信,I2C總線的通信速率也可以低至幾kb/s以下,用于支持低速器件(比如通過軟件模擬的實(shí)現(xiàn)方法)或者用來延長(zhǎng)通信距離。通信距離較遠(yuǎn),一般情況下,I2C總線通信距離可達(dá)幾米到十幾米,通過降低傳輸速率等辦法,通信距離可延長(zhǎng)到數(shù)十米乃至數(shù)百米。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十四頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理 I2C總線只需要兩根信號(hào)線,一根是串行數(shù)據(jù)線SDA,另一根是串行時(shí)鐘線SCL。在系統(tǒng)中,I2C總線的典型結(jié)構(gòu)如圖12.12所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十五頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理

在介紹I2C總線工作原理之前,首先必須明確幾個(gè)基本概念:發(fā)送器(Transmitter):發(fā)送數(shù)據(jù)到總線的器件;接收器(Receiver):從總線接收數(shù)據(jù)的器件;主機(jī)(Master):初始化發(fā)送、產(chǎn)生時(shí)鐘信號(hào)和終止信號(hào)發(fā)送的器件;從機(jī)(Slave):被主機(jī)尋址的器件。

I2C總線是雙向傳輸?shù)目偩€,因此主機(jī)和從機(jī)都可能成為發(fā)送器和接收器。如果主機(jī)向從機(jī)發(fā)送數(shù)據(jù),則主機(jī)是發(fā)送器,從機(jī)是接收器;如果主機(jī)讀取從機(jī)數(shù)據(jù),則主機(jī)是接收器,從機(jī)是發(fā)送器。不論主機(jī)是發(fā)送器還是接收器,時(shí)鐘信號(hào)SCL都要由主機(jī)產(chǎn)生。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十六頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理

以下簡(jiǎn)要介紹I2C總線的標(biāo)準(zhǔn)規(guī)范。

1.I2C總線上數(shù)據(jù)的有效性

I2C總線中數(shù)據(jù)線SDA的電平狀態(tài)必須在時(shí)鐘線SCL處于高電平期間保持穩(wěn)定不變;SDA的電平狀態(tài)只有在SCL處于低電平期間才允許改變,但是在I2C總線的起始條件和停止條件例外。I2C總線上數(shù)據(jù)有效性如圖12.13所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十七頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理 2.I2C總線起始條件和停止條件 起始條件(起始信號(hào)):當(dāng)SCL處于高電平期間時(shí),SDA從高電平向低電平跳變時(shí)產(chǎn)生起始條件。 總線在起始條件產(chǎn)生后便處于忙的狀態(tài)。起始條件常常簡(jiǎn)記為S。 停止條件(停止信號(hào)):當(dāng)SCL處于高電平期間時(shí),SDA從低電平向高電平跳變時(shí)產(chǎn)生停止條件。 總線在停止條件產(chǎn)生后處于空閑狀態(tài)。停止條件簡(jiǎn)記為P,如圖12.14所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十八頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理 3.I2C總線的應(yīng)答信號(hào) 在I2C總線傳輸數(shù)據(jù)過程中,每傳輸1字節(jié)數(shù)據(jù),都要有一個(gè)應(yīng)答狀態(tài)位。接收器數(shù)據(jù)接收情況通過產(chǎn)生應(yīng)答位來告知發(fā)送器。應(yīng)答位的時(shí)鐘脈沖仍由主機(jī)產(chǎn)生,而應(yīng)答位的數(shù)據(jù)接收狀態(tài)則遵循“誰(shuí)接收誰(shuí)產(chǎn)生”的原則,即總是由接收器來產(chǎn)生應(yīng)答位,主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時(shí),應(yīng)答位由從機(jī)產(chǎn)生;主機(jī)接收從機(jī)數(shù)據(jù)時(shí),應(yīng)答位由主機(jī)產(chǎn)生。I2C總線標(biāo)準(zhǔn)規(guī)定:應(yīng)答位為0表示接收器應(yīng)答(ACK),常常簡(jiǎn)記為A;為1則表示非應(yīng)答(NACK),常常簡(jiǎn)記為A。發(fā)送器發(fā)送完數(shù)據(jù)之后,應(yīng)當(dāng)釋放SDA線(需要拉高SDA,輸出端口截止),以等待接收器產(chǎn)生應(yīng)答位。如果接收器在接收完最后一個(gè)字節(jié)的數(shù)據(jù),或者不能再接收更多的數(shù)據(jù)時(shí),應(yīng)當(dāng)產(chǎn)生非應(yīng)答來通知發(fā)送器。發(fā)送器如果發(fā)現(xiàn)接收器產(chǎn)生了非應(yīng)答狀態(tài),則應(yīng)當(dāng)終止發(fā)送。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第三十九頁(yè),共63頁(yè)。12.5I2C總線接口12.5.2I2C總線工作原理 4.I2C總線的數(shù)據(jù)傳送

I2C總線總是以字節(jié)(Byte)為單位收發(fā)數(shù)據(jù)的,每次傳送的數(shù)據(jù)是8位。每次傳輸從起始信號(hào)開始,之后傳送的字節(jié)數(shù)量沒有嚴(yán)格限制。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB,第7位),最后傳輸?shù)氖亲畹臀唬↙SB,第0位)。另外,每個(gè)字節(jié)之后還要跟一個(gè)應(yīng)答位,應(yīng)答位總是由接收器產(chǎn)生。所有數(shù)據(jù)傳送結(jié)束后,主控制器發(fā)出終止信號(hào)。

5.從機(jī)地址

I2C總線不需要額外的地址譯碼器和片選信號(hào)。多個(gè)具有I2C總線接口的器件都可以連接到同一條I2C總線上,它們之間通過器件地址來區(qū)分。主機(jī)是主控器件,不需要器件地址,其他器件都屬于從機(jī),需要配置有器件地址。必須保證同一條I2C總線上所有從機(jī)的地址都是唯一確定的,不能有重復(fù),否則I2C總線將不能正常工作。一般從機(jī)地址由7位地址位和一位讀/寫位標(biāo)志R/組成,7位地址占據(jù)高7位,讀/寫位在最后。讀/寫位是0,表示主機(jī)將要向從機(jī)寫入數(shù)據(jù);讀/寫位是1,則表示主機(jī)將要讀取從機(jī)數(shù)據(jù)。

I2C總線主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的基本格式如圖12.15所示,I2C總線主機(jī)讀取從機(jī)數(shù)據(jù)的基本格式如圖12.16所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十頁(yè),共63頁(yè)。12.6I2C模塊結(jié)構(gòu)組成和特點(diǎn) MC9S12DG128就內(nèi)置了I2C模塊,使用PortJ6和PortJ7兩個(gè)引腳作為SDA和SCL。本章以下內(nèi)容都是針對(duì)MC9S12DG128介紹I2C模塊的特性、寄存器功能及設(shè)置,并通過應(yīng)用實(shí)例和I2C模塊在自主尋跡智能車上的應(yīng)用,讓讀者掌握I2C模塊的應(yīng)用及編程方法。 MC9S12DG128內(nèi)置的I2C模塊如圖12.17所示。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十一頁(yè),共63頁(yè)。12.6I2C模塊結(jié)構(gòu)組成和特點(diǎn)I2C模塊具有以下基本特征:符合I2C總線標(biāo)準(zhǔn);支持多主機(jī)操作;軟件可編程設(shè)置256種串行時(shí)鐘頻率;軟件可編程選擇應(yīng)答位;字節(jié)數(shù)據(jù)中斷傳輸;仲裁丟失中斷,自動(dòng)將主機(jī)模式切換到從機(jī)模式;尋址識(shí)別中斷;起始信號(hào)和停止信號(hào)的產(chǎn)生/檢測(cè)功能;重復(fù)產(chǎn)生起始信號(hào);應(yīng)答位的產(chǎn)生/檢測(cè)功能;總線忙檢測(cè)。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十二頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 MC9S12DG128的I2C模塊共有5個(gè)寄存器,詳見表12-7。以下詳細(xì)介紹各寄存器的功能及每一位的作用。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十三頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.1I2C總線地址寄存器(IBAD) I2C總線地址寄存器(I2CBusAddressRegister,IBAD)如圖12.18所示。

讀:任何時(shí)刻;寫:任何時(shí)刻。 該寄存器針對(duì)被尋址從機(jī),由I2C總線產(chǎn)生響應(yīng)地址,但這個(gè)地址不是由主機(jī)通過總線進(jìn)行傳送的。

ADR7~ADR1:從機(jī)地址,包括I2C模塊使用的特殊從機(jī)地址,I2C總線的默認(rèn)模式是總線上的地址匹配從機(jī)地址。

Bit0:保留位,為了將來產(chǎn)品的兼容性而設(shè)置,讀取該位總為0。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十四頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.2I2C總線分頻寄存器(IBFD) I2C總線分頻寄存器(I2CBusFrequencyDividerRegister,IBFD)如圖12.19所示。

讀:任何時(shí)刻;寫:任何時(shí)刻。

IBC7~IBC0:I2C總線時(shí)鐘分頻系數(shù),該寄存器用于確定I2C總線的時(shí)鐘頻率,其中IBC7~I(xiàn)BC6定義預(yù)分頻增益系數(shù);IBC5~I(xiàn)BC3定義預(yù)分頻因子;IBC2~I(xiàn)BC0選擇保持時(shí)間長(zhǎng)度。寄存器中各位的含義詳見表12-8和表12-9。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十五頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.2I2C總線分頻寄存器(IBFD)單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十六頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.2I2C總線分頻寄存器(IBFD)單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十七頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.2I2C總線分頻寄存器(IBFD) I2C總線部分分頻對(duì)照表12-10所示,如需要查閱其他數(shù)值,可以參閱數(shù)據(jù)手冊(cè)S12IICV2.pdf。。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十八頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.3I2C總線控制寄存器(IBCR) I2C總線控制寄存器(I2CBusControlRegister,IBCR)如圖12.20所示。

讀:任何時(shí)刻;寫:任何時(shí)刻。

IBEN:I2C模塊使能位,該位控制I2C模塊的軟件復(fù)位。 0表示I2C模塊禁止且軟件復(fù)位,這時(shí)處于上電復(fù)位狀態(tài)。當(dāng)該位為0時(shí),I2C模塊功能禁止且處于軟件復(fù)位功能,但是其他寄存器仍然可以訪問; 1表示I2C模塊使能,該位必須在IBCR寄存器的其他位起作用前置位。如果I2C模塊在一個(gè)字節(jié)數(shù)據(jù)傳輸過程中使能,則從機(jī)模式會(huì)忽略當(dāng)前總線上的傳輸數(shù)據(jù),一旦檢測(cè)到后面的起始信號(hào)就開始進(jìn)行數(shù)據(jù)傳輸;而主機(jī)模式不檢測(cè)總線忙狀態(tài),因此如果一個(gè)起始信號(hào)產(chǎn)生,當(dāng)前總線周期可能會(huì)破壞,最終將導(dǎo)致當(dāng)前總線的主機(jī)或者I2C模塊丟失仲裁,隨后總線操作將返回正常模式。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第四十九頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.3I2C總線控制寄存器(IBCR) IBIE:I2C總線中斷使能位。 0表示I2C總線中斷禁止,此時(shí)I2C模塊不處理已產(chǎn)生的中斷; 1表示I2C總線中斷使能,I2C總線中斷發(fā)生時(shí),則IBSR狀態(tài)寄存器中的IBIF位置位。

MS/SL:主機(jī)/從機(jī)模式選擇位。微控制器復(fù)位后,該位清零。當(dāng)該位從0變?yōu)?時(shí),總線上會(huì)產(chǎn)生一個(gè)起始信號(hào),為主機(jī)工作模式。當(dāng)該位從1變?yōu)?時(shí),總線上會(huì)產(chǎn)生一個(gè)停止信號(hào),工作模式變?yōu)閺臋C(jī)模式。停止信號(hào)只有在IBIF標(biāo)志置位時(shí)才能夠產(chǎn)生。當(dāng)主機(jī)丟失仲裁時(shí),該位被清零但是不產(chǎn)生停止信號(hào)。 0表示從機(jī)模式; 1表示主機(jī)模式。

Tx/RX:發(fā)送/接收模式選擇位,該位選擇主機(jī)和從機(jī)數(shù)據(jù)傳輸?shù)姆较?。在從機(jī)模式和主機(jī)模式下,該位需要軟件置位,根據(jù)IBSR狀態(tài)寄存器中的SRW位來確定數(shù)據(jù)傳輸方向。在尋址周期,該位總為高電平。 0表示接收模式; 1表示發(fā)送模式。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五十頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.3I2C總線控制寄存器(IBCR) TXAK:發(fā)送應(yīng)答使能位。對(duì)于主機(jī)接收器和從機(jī)接收器,該位確定總線應(yīng)答周期的SDA值。如果I2C模塊使能,無需設(shè)置TXAK,I2C模塊總是響應(yīng)地址匹配器件。注意只有當(dāng)I2C模塊作為接收器時(shí),操作該位才有效。 0表示接收到1字節(jié)的數(shù)據(jù)后,在總線的第9個(gè)周期產(chǎn)生一個(gè)應(yīng)答位且發(fā)送到總線上; 1表示不發(fā)送應(yīng)答信號(hào)。

RSTA:重復(fù)起始信號(hào)位。主機(jī)模式時(shí),該位置1就會(huì)在總線上產(chǎn)生一個(gè)重復(fù)起始信號(hào)。讀取該位總是返回0。如果總線被另一個(gè)主機(jī)占用,試圖產(chǎn)生一個(gè)重復(fù)起始信號(hào)將導(dǎo)致仲裁丟失。 0表示禁止產(chǎn)生重復(fù)起始信號(hào); 1表示產(chǎn)生一個(gè)重復(fù)起始信號(hào)。

Bit1:保留位,為了將來產(chǎn)品的兼容性而設(shè)置,讀取該位總為0。

IBSWAI:等待模式下I2C總線模塊的時(shí)鐘停止位。 0表示在等待模式下,I2C總線模塊時(shí)鐘正常工作; 1表示在等待模式下,I2C總線模塊時(shí)鐘停止工作。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五十一頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.4I2C總線狀態(tài)寄存器(IBSR) I2C總線狀態(tài)寄存器(I2CBusStatusRegister,IBSR)如圖12.21所示。

該寄存器除了第1位(IBIF)和第4位(IBAL)外,其余位都是只讀的。

TCF:數(shù)據(jù)傳輸位。當(dāng)數(shù)據(jù)的一個(gè)字節(jié)正在傳輸時(shí),該位被清除。TCF在字節(jié)傳輸?shù)牡?個(gè)時(shí)鐘的下降沿置位。注意該位只在一個(gè)字節(jié)數(shù)據(jù)傳送到一個(gè)I2C模塊或者接收到一個(gè)I2C模塊的數(shù)據(jù)或數(shù)據(jù)傳輸完成時(shí)有效。 0表示數(shù)據(jù)傳輸正在進(jìn)行; 1表示數(shù)據(jù)傳輸完成。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五十二頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.4I2C總線狀態(tài)寄存器(IBSR)

該寄存器除了第1位(IBIF)和第4位(IBAL)外,其余位都是只讀的。

TCF:數(shù)據(jù)傳輸位。當(dāng)數(shù)據(jù)的一個(gè)字節(jié)正在傳輸時(shí),該位被清除。TCF在字節(jié)傳輸?shù)牡?個(gè)時(shí)鐘的下降沿置位。注意該位只在一個(gè)字節(jié)數(shù)據(jù)傳送到一個(gè)I2C模塊或者接收到一個(gè)I2C模塊的數(shù)據(jù)或數(shù)據(jù)傳輸完成時(shí)有效。 0表示數(shù)據(jù)傳輸正在進(jìn)行; 1表示數(shù)據(jù)傳輸完成。

IAAS:從機(jī)被尋址位。當(dāng)I2C模塊自身模塊地址(由I2C總線地址寄存器IBAD確定)與主機(jī)發(fā)送地址匹配時(shí),該位被置位。如果IBIE置位,MCU產(chǎn)生中斷。之后MCU需要檢測(cè)SRW位并設(shè)置相應(yīng)的Tx/RX模式。寫I2C總線控制寄存器IBCR清除該位。 0表示從機(jī)未被尋址; 1表示從機(jī)被尋址。

IBB:總線忙標(biāo)志位。該位表示總線狀態(tài)。 0表示當(dāng)檢測(cè)到一個(gè)起始信號(hào)時(shí),IBB置位,如果檢測(cè)到一個(gè)停止信號(hào),IBB被清除且總線進(jìn)入空閑狀態(tài); 1表示總線忙。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五十三頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.4I2C總線狀態(tài)寄存器(IBSR) IBAL:仲裁丟失。當(dāng)仲裁丟失時(shí)該位由硬件置位。在下列情況中,仲裁可能丟失: 在地址或數(shù)據(jù)傳輸周期中,如果主機(jī)產(chǎn)生的SDA為高電平,但是檢測(cè)SDA為低電平; 在一個(gè)數(shù)據(jù)應(yīng)答位接收過程中,如果主機(jī)產(chǎn)生的SDA為高電平,但是檢測(cè)SDA為低電平; 當(dāng)總線忙時(shí)試圖產(chǎn)生一個(gè)起始信號(hào); 在從機(jī)模式下一個(gè)重復(fù)起始信號(hào)被請(qǐng)求; 當(dāng)主機(jī)沒有請(qǐng)求時(shí),但檢測(cè)到一個(gè)停止信號(hào)。

IBAL位必須通過軟件置1清除,向該位寫0無效。

SRW:從機(jī)讀/寫位。當(dāng)IAAS被置位,該位表示主機(jī)發(fā)送從機(jī)尋址時(shí)的讀/寫控制位SRW值。SRW位僅當(dāng)I2C模塊處于從機(jī)模式時(shí)有效,通過檢測(cè)該位,MCU可以根據(jù)主機(jī)的命令選擇從機(jī)的發(fā)送/接收模式。 1表示從機(jī)接收,主機(jī)寫數(shù)據(jù)到從機(jī); 0表示從機(jī)發(fā)送,主機(jī)讀入從機(jī)數(shù)據(jù)。

IBIF:I2C總線中斷位。當(dāng)以下一種情況發(fā)生時(shí),該位置位: 仲裁丟失(IBAL=1); 字節(jié)傳輸完成(TCF=1); 從機(jī)被尋址(IAAS=1)。 如果IBIE=1,IBIF置位將會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求,該位必須通過軟件置1清除,向該位寫0無效。

RXAK:接收應(yīng)答使能位,為總線應(yīng)答周期的SDA值。如果接收到應(yīng)答位(RXAK)為0,表示在總線8位數(shù)據(jù)傳輸完成后已接收到應(yīng)答信號(hào)。如果RXAK為1,意味著在第9個(gè)時(shí)鐘周期仍然沒有檢測(cè)到應(yīng)答信號(hào)。 0表示已接收到應(yīng)答; 1表示未接收到應(yīng)答。單片機(jī)原理及嵌入式系統(tǒng)開發(fā)》》》第五十四頁(yè),共63頁(yè)。12.7I2C模塊寄存器及設(shè)置 12.7.5I2C總線數(shù)據(jù)輸入/輸出寄存器(IBDR) I2C總線數(shù)據(jù)輸入/輸出寄存器(I2CBusDataI/ORegister,IBDR)如圖12.22所示。

在主機(jī)發(fā)送模式,當(dāng)一個(gè)數(shù)據(jù)被寫入該寄存器,數(shù)據(jù)傳輸開始,先傳送最高位。在主機(jī)接收模式,讀取該寄存器啟動(dòng)下一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論