單片微型計(jì)算機(jī)原理及接口技術(shù)-24-串行通信-I2C-8_第1頁(yè)
單片微型計(jì)算機(jī)原理及接口技術(shù)-24-串行通信-I2C-8_第2頁(yè)
單片微型計(jì)算機(jī)原理及接口技術(shù)-24-串行通信-I2C-8_第3頁(yè)
單片微型計(jì)算機(jī)原理及接口技術(shù)-24-串行通信-I2C-8_第4頁(yè)
單片微型計(jì)算機(jī)原理及接口技術(shù)-24-串行通信-I2C-8_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片微型計(jì)算機(jī)原理及接口技術(shù)(24)1/31內(nèi)容提綱二STC8H8K64U單片機(jī)I2C接口的寄存器一STC8H8K64U單片機(jī)I2C接口的簡(jiǎn)介三STC8H8K64U單片機(jī)I2C接口的應(yīng)用2/31STC8H8K64U單片機(jī)I2C接口的簡(jiǎn)介一3/31I2C接口簡(jiǎn)介STC8H8K64U單片機(jī)內(nèi)部集成了一個(gè)I2C串行總線控制器。使用SCL(時(shí)鐘線)和SDA(數(shù)據(jù)線)兩線進(jìn)行同步通信。通過(guò)相關(guān)特殊功能寄存器的設(shè)置,可將SCL和SDA切換到不同的I/O口上,以方便用戶將一組I2C總線當(dāng)作多組進(jìn)行分時(shí)復(fù)用。STC8H8K64U單片機(jī)的I2C總線提供了兩種操作模式:主機(jī)模式(SCL為輸出口,發(fā)送同步時(shí)鐘信號(hào))和從機(jī)模式(SCL為輸入口,接收同步時(shí)鐘信號(hào))。4/31與標(biāo)準(zhǔn)I2C協(xié)議相比較,STC8H8K64U單片機(jī)的I2C總線忽略了如下兩種機(jī)制:發(fā)送起始信號(hào)(START)后不進(jìn)行仲裁。時(shí)鐘信號(hào)(SCL)停留在低電平時(shí)不進(jìn)行超時(shí)檢測(cè)。I2C串行總線控制器工作在從機(jī)模式時(shí),SDA管腳的下降沿信號(hào)可以喚醒進(jìn)入掉電模式的MCU。(注意:由于I2C傳輸速度比較快,MCU喚醒后第一包數(shù)據(jù)一般是不正確的)5/31STC8H8K64U單片機(jī)I2C接口的寄存器二6/31與I2C接口有關(guān)的特殊功能寄存器如表所示。符號(hào)描述地址位符號(hào)復(fù)位值b7b6b5b4b3b2b1b0I2CCFGI2C配置寄存器FE80HENI2CMSSLMSSPEED[5:0]0000,0000I2CMSCRI2C主機(jī)控制寄存器FE81HEMSI---MSCMD[3:0]0xxx,0000I2CMSSTI2C主機(jī)狀態(tài)寄存器FE82HMSBUSYMSIF----MSACKIMSACKO00xx,xx10I2CSLCRI2C從機(jī)控制寄存器FE83H-ESTAIERXIETXIESTOI--SLRSTx000,0xx0I2CSLSTI2C從機(jī)狀態(tài)寄存器FE84HSLBUSYSTAIFRXIFTXIFSTOIFTXINGSLACKISLACKO0000,0000I2CSLADRI2C從機(jī)地址寄存器FE85HI2CSLADR[7:1]MA0000,0000I2CTXDI2C數(shù)據(jù)發(fā)送寄存器FE86H

0000,0000I2CRXDI2C數(shù)據(jù)接收寄存器FE87H

0000,0000I2CMSAUXI2C主機(jī)輔助控制寄存器FE88H-------WDTAxxxx,xxx07/311)ENI2C:I2C功能使能控制位0:禁止I2C功能1:允許I2C功能2)MSSL:I2C工作模式選擇位0:從機(jī)模式1:主機(jī)模式(1)I2C配置寄存器(I2CCFG)符號(hào)地址b7b6b5b4b3b2b1b0I2CCFGFE80HENI2CMSSLMSSPEED[5:0]8/311、I2C主機(jī)模式1、I2C主機(jī)模式3)MSSPEED[5:0]:I2C總線速度(等待時(shí)鐘數(shù))控制,I2C總線速度=SYSclk/2/(MSSPEED*2+4)(1)I2C配置寄存器(I2CCFG)符號(hào)地址b7b6b5b4b3b2b1b0I2CCFGFE80HENI2CMSSLMSSPEED[5:0]MSSPEED[5:0]對(duì)應(yīng)的時(shí)鐘數(shù)041628……x2x+4……62128631309/31只有當(dāng)I2C模塊工作在主機(jī)模式時(shí),MSSPEED參數(shù)設(shè)置的等待參數(shù)才有效。此等待參數(shù)主要用于主機(jī)模式的以下幾個(gè)信號(hào):TSSTA:起始信號(hào)的建立時(shí)間(SetupTimeofSTART)THSTA:起始信號(hào)的保持時(shí)間(HoldTimeofSTART)TSSTO:停止信號(hào)的建立時(shí)間(SetupTimeofSTOP)THSTO:停止信號(hào)的保持時(shí)間(HoldTimeofSTOP)THCKL:時(shí)鐘信號(hào)的低電平保持時(shí)間(HoldTimeofSCLLow)THCKH:時(shí)鐘信號(hào)的高電平保持時(shí)間(HoldTimeofSCLHigh)I2C總線速度=SYSclk/2/(MSSPEED*2+4)例:當(dāng)24MHz的工作頻率下需要400K的I2C總線速度時(shí),MSSPEED=(24M/400K/2-4)/2=1310/311)EMSI:主機(jī)模式中斷使能控制位0:關(guān)閉主機(jī)模式的中斷1:允許主機(jī)模式的中斷2)MSCMD[3:0]:主機(jī)命令0000:待機(jī),無(wú)動(dòng)作。0001:起始命令。發(fā)送START信號(hào)。如果當(dāng)前I2C控制器處于空閑狀態(tài),即MSBUSY(I2CMSST.7)為0時(shí),寫(xiě)此命令會(huì)使控制器進(jìn)入忙狀態(tài),硬件自動(dòng)將MSBUSY狀態(tài)位置1,并開(kāi)始發(fā)送START信號(hào);若當(dāng)前I2C控制器處于忙狀態(tài),寫(xiě)此命令可觸發(fā)發(fā)送START信號(hào)。發(fā)送START信號(hào)的波形如下圖所示:(2)I2C主機(jī)控制寄存器(I2CMSCR)符號(hào)地址b7b6b5b4b3b2b1b0I2CMSCRFE81HEMSI---MSCMD[3:0]11/310010:發(fā)送數(shù)據(jù)命令。寫(xiě)此命令后,I2C總線控制器會(huì)在SCL管腳上產(chǎn)生8個(gè)時(shí)鐘,并將I2CTXD寄存器里面數(shù)據(jù)按位送到SDA管腳上(先發(fā)送高位數(shù)據(jù))。發(fā)送數(shù)據(jù)的波形如下圖所示:(2)I2C主機(jī)控制寄存器(I2CMSCR)0011:接收ACK命令。寫(xiě)此命令后,I2C總線控制器會(huì)在SCL管腳上產(chǎn)生1個(gè)時(shí)鐘,并將從SDA端口上讀取的數(shù)據(jù)保存到MSACKI(I2CMSST.1)。接收ACK的波形如下圖所示:12/310100:接收數(shù)據(jù)命令。寫(xiě)此命令后,I2C總線控制器會(huì)在SCL管腳上產(chǎn)生8個(gè)時(shí)鐘,并將從SDA端口上讀取的數(shù)據(jù)依次左移到I2CRXD寄存器(先接收高位數(shù)據(jù))。接收數(shù)據(jù)的波形如下圖所示:(2)I2C主機(jī)控制寄存器(I2CMSCR)0101:發(fā)送ACK命令。寫(xiě)此命令后,I2C總線控制器會(huì)在SCL管腳上產(chǎn)生1個(gè)時(shí)鐘,并將MSACKO(I2CMSST.0)中的數(shù)據(jù)發(fā)送到SDA端口。發(fā)送ACK的波形如下圖所示:13/310110:停止命令。發(fā)送STOP信號(hào)。寫(xiě)此命令后,I2C總線控制器開(kāi)始發(fā)送STOP信號(hào)。信號(hào)發(fā)送完成后,硬件自動(dòng)將MSBUSY狀態(tài)位清零。STOP信號(hào)的波形如下圖所示:(2)I2C主機(jī)控制寄存器(I2CMSCR)0111:保留。1000:保留。1001:起始命令+發(fā)送數(shù)據(jù)命令+接收ACK命令。此命令為命令0001、命令0010、命令0011三個(gè)命令的組合,下此命令后控制器會(huì)依次執(zhí)行這三個(gè)命令。14/311010:發(fā)送數(shù)據(jù)命令+接收ACK命令。此命令為命令0010、命令0011兩個(gè)命令的組合,下此命令后控制器會(huì)依次執(zhí)行這兩個(gè)命令。1011:接收數(shù)據(jù)命令+發(fā)送ACK(0)命令。此命令為命令0100、命令0101兩個(gè)命令的組合,下此命令后控制器會(huì)依次執(zhí)行這兩個(gè)命令。注意:此命令所返回的應(yīng)答信號(hào)固定為ACK(0),不受MSACKO位的影響。1100:接收數(shù)據(jù)命令+發(fā)送NAK(1)命令。此命令為命令0100、命令0101兩個(gè)命令的組合,下此命令后控制器會(huì)依次執(zhí)行這兩個(gè)命令。注意:此命令所返回的應(yīng)答信號(hào)固定為NAK(1),不受MSACKO位的影響。(2)I2C主機(jī)控制寄存器(I2CMSCR)15/31(3)I2C主機(jī)輔助控制寄存器(I2CMSAUX)符號(hào)地址b7b6b5b4b3b2b1b0I2CMSAUXFE88H-------WDTAWDTA:主機(jī)模式時(shí)I2C數(shù)據(jù)自動(dòng)發(fā)送允許位0:禁止自動(dòng)發(fā)送1:使能自動(dòng)發(fā)送若自動(dòng)發(fā)送功能被使能,當(dāng)MCU執(zhí)行完成對(duì)I2CTXD數(shù)據(jù)寄存器的寫(xiě)操作后,I2C控制器會(huì)自動(dòng)觸發(fā)“1010”命令,即自動(dòng)發(fā)送數(shù)據(jù)并接收ACK信號(hào)。16/31(4)I2C主機(jī)狀態(tài)寄存器(I2CMSST)符號(hào)地址b7b6b5b4b3b2b1b0I2CMSSTFE82HMSBUSYMSIF----MSACKIMSACKOMSBUSY:主機(jī)模式時(shí)I2C控制器狀態(tài)位(只讀位)0:控制器處于空閑狀態(tài)1:控制器處于忙碌狀態(tài)當(dāng)I2C控制器處于主機(jī)模式時(shí),在空閑狀態(tài)下,發(fā)送完成START信號(hào)后,控制器便進(jìn)入到忙碌狀態(tài),忙碌狀態(tài)會(huì)一直維持到成功發(fā)送完成STOP信號(hào),之后狀態(tài)會(huì)再次恢復(fù)到空閑狀態(tài)。MSIF:主機(jī)模式的中斷請(qǐng)求位(中斷標(biāo)志位)。當(dāng)處于主機(jī)模式的I2C控制器執(zhí)行完成寄存器I2CMSCR中MSCMD命令后產(chǎn)生中斷信號(hào),硬件自動(dòng)將此位1,向CPU發(fā)請(qǐng)求中斷,響應(yīng)中斷后MSIF位必須用軟件清零。MSACKI:主機(jī)模式時(shí),發(fā)送“0011”命令到I2CMSCR的MSCMD位后所接收到的ACK數(shù)據(jù)。(只讀位)MSACKO:主機(jī)模式時(shí),準(zhǔn)備將要發(fā)送出去的ACK信號(hào)。當(dāng)發(fā)送“0101”命令到I2CMSCR的MSCMD位后,控制器會(huì)自動(dòng)讀取此位的數(shù)據(jù)當(dāng)作ACK發(fā)送到SDA。17/312、I2C從機(jī)模式ESTAI:從機(jī)模式時(shí)接收到START信號(hào)中斷允許位0:禁止從機(jī)模式時(shí)接收到START信號(hào)時(shí)發(fā)生中斷1:使能從機(jī)模式時(shí)接收到START信號(hào)時(shí)發(fā)生中斷ERXI:從機(jī)模式時(shí)接收到1字節(jié)數(shù)據(jù)后中斷允許位0:禁止從機(jī)模式時(shí)接收到數(shù)據(jù)后發(fā)生中斷1:使能從機(jī)模式時(shí)接收到1字節(jié)數(shù)據(jù)后發(fā)生中斷ETXI:從機(jī)模式時(shí)發(fā)送完成1字節(jié)數(shù)據(jù)后中斷允許位0:禁止從機(jī)模式時(shí)發(fā)送完成數(shù)據(jù)后發(fā)生中斷1:使能從機(jī)模式時(shí)發(fā)送完成1字節(jié)數(shù)據(jù)后發(fā)生中斷ESTOI:從機(jī)模式時(shí)接收到STOP信號(hào)中斷允許位0:禁止從機(jī)模式時(shí)接收到STOP信號(hào)時(shí)發(fā)生中斷1:使能從機(jī)模式時(shí)接收到STOP信號(hào)時(shí)發(fā)生中斷SLRST:復(fù)位從機(jī)模式(1)I2C從機(jī)控制寄存器(I2CSLCR)符號(hào)地址b7b6b5b4b3b2b1b0I2CSLCRFE83H-ESTAIERXIETXIESTOI--SLRST18/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)SLBUSY:從機(jī)模式時(shí)I2C控制器狀態(tài)位(只讀位)0:控制器處于空閑狀態(tài)1:控制器處于忙碌狀態(tài)當(dāng)I2C控制器處于從機(jī)模式時(shí),在空閑狀態(tài)下,接收到主機(jī)發(fā)送START信號(hào)后,控制器會(huì)繼續(xù)檢測(cè)之后的設(shè)備地址數(shù)據(jù),若設(shè)備地址與當(dāng)前I2CSLADR寄存器中所設(shè)置的從機(jī)地址相同時(shí),控制器便進(jìn)入到忙碌狀態(tài),忙碌狀態(tài)會(huì)一直維持到成功接收到主機(jī)發(fā)送STOP信號(hào),之后狀態(tài)會(huì)再次恢復(fù)到空閑狀態(tài)。符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO19/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)STAIF:從機(jī)模式時(shí)接收到START信號(hào)后的中斷請(qǐng)求位。從機(jī)模式的I2C控制器接收到START信號(hào)后,硬件會(huì)自動(dòng)將此位置1,并向CPU發(fā)請(qǐng)求中斷,響應(yīng)中斷后STAIF位必須用軟件清零。STAIF被置1的時(shí)間點(diǎn)如下圖所示:符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO20/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)RXIF:從機(jī)模式時(shí)接收到1字節(jié)的數(shù)據(jù)后的中斷請(qǐng)求位。從機(jī)模式的I2C控制器接收到1字節(jié)的數(shù)據(jù)后,在第8個(gè)時(shí)鐘的下降沿時(shí)硬件會(huì)自動(dòng)將此位置1,并向CPU發(fā)請(qǐng)求中斷,響應(yīng)中斷后RXIF位必須用軟件清零。RXIF被置1的時(shí)間點(diǎn)如下圖所示:符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO21/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)TXIF:從機(jī)模式時(shí)發(fā)送完成1字節(jié)的數(shù)據(jù)后的中斷請(qǐng)求位。從機(jī)模式的I2C控制器發(fā)送完成1字節(jié)的數(shù)據(jù)并成功接收到1位ACK信號(hào)后,在第9個(gè)時(shí)鐘的下降沿時(shí)硬件會(huì)自動(dòng)將此位置1,并向CPU發(fā)請(qǐng)求中斷,響應(yīng)中斷后TXIF位必須用軟件清零。TXIF被置1的時(shí)間點(diǎn)如下圖所示:符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO22/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)STOIF:從機(jī)模式時(shí)接收到STOP信號(hào)后的中斷請(qǐng)求位。從機(jī)模式的I2C控制器接收到STOP信號(hào)后,硬件會(huì)自動(dòng)將此位置1,并向CPU發(fā)請(qǐng)求中斷,響應(yīng)中斷后STOIF位必須用軟件清零。STOIF被置1的時(shí)間點(diǎn)如下圖所示:符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO23/31(2)I2C從機(jī)狀態(tài)寄存器(I2CSLST)SLACKI:從機(jī)模式時(shí),接收到的ACK數(shù)據(jù)。SLACKO:從機(jī)模式時(shí),準(zhǔn)備將要發(fā)送出去的ACK信號(hào)。符號(hào)地址b7b6b5b4b3b2b1b0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKO24/31(3)I2C從機(jī)地址寄存器(I2CSLADR)I2CSLADR[7:1]:從機(jī)設(shè)備地址當(dāng)I2C控制器處于從機(jī)模式時(shí),控制器在接收到START信號(hào)后,會(huì)繼續(xù)檢測(cè)接下來(lái)主機(jī)發(fā)送出的設(shè)備地址數(shù)據(jù)以及讀/寫(xiě)信號(hào)。當(dāng)主機(jī)發(fā)送出的設(shè)備地址與I2CSLADR[7:1]中所設(shè)置的從機(jī)設(shè)備地址相同時(shí),控制器才會(huì)向CPU發(fā)出中斷求,請(qǐng)求CPU處理I2C事件;否則若設(shè)備地址不同,I2C控制器繼續(xù)監(jiān)控,等待下一個(gè)起始信號(hào),對(duì)下一個(gè)設(shè)備地址繼續(xù)比較。MA:從機(jī)設(shè)備地址比較控制(MAtch)0:設(shè)備地址必須與I2CSLADR[7:1]相同1:忽略I2CSLADR[7:1]中的設(shè)置,接受所有的設(shè)備地址符號(hào)地址b7b6b5b4b3b2b1b0I2CSLADRFE85HI2CSLADR[7:1]MA25/31I2C總線協(xié)議規(guī)定I2C總線上最多可掛載128個(gè)I2C設(shè)備(理論值),不同的I2C設(shè)備用不同的I2C從機(jī)設(shè)備地址進(jìn)行識(shí)別。I2C主機(jī)發(fā)送完成起始信號(hào)后,發(fā)送的第一個(gè)數(shù)據(jù)(DATA0)的高7位即為從機(jī)設(shè)備地址(DATA0[7:1]為I2C設(shè)備地址),最低位為讀寫(xiě)信號(hào)。當(dāng)I2C設(shè)備從機(jī)地址寄存器MA(I2CSLADR.0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論