特性
大部分lpc2000系列微控制器具有兩個(gè)硬件spi接口(lpc2104/lpc2105/lpc2106只有一個(gè)),它們具有如下特性:
完全獨(dú)立的spi控制器;
遵循同步串行接口(spi)規(guī)范;
全雙工數(shù)據(jù)通信;
可配置為spi主機(jī)或從機(jī);
最大數(shù)據(jù)位速率為外設(shè)時(shí)鐘fpclk的1/8。
spi簡(jiǎn)介
spi是一種全雙工的同步串行接口,一個(gè)spi總線可以連接多個(gè)主機(jī)和多個(gè)從機(jī)。在同一時(shí)刻只允許一個(gè)主機(jī)操作總線,并且同時(shí)只能和一個(gè)從機(jī)通信。
串行時(shí)鐘由主機(jī)產(chǎn)生,當(dāng)主機(jī)發(fā)送一字節(jié)數(shù)據(jù)(通過(guò)mosi)的同時(shí),從機(jī)返回一字節(jié)數(shù)據(jù)(通過(guò)miso)。
spi電氣連接
使用spi通信需要4個(gè)引腳,分別為:
spi傳輸時(shí)序
spi工作模式
lpc2000在spi通信中可作為從機(jī)也可以作為主機(jī),這取決于硬件設(shè)計(jì)和軟件設(shè)置。
當(dāng)器件作為主機(jī)時(shí),使用一個(gè)io引腳拉低相應(yīng)從機(jī)的選擇引腳(ssel),傳輸?shù)钠鹗加芍鳈C(jī)發(fā)送數(shù)據(jù)來(lái)啟動(dòng),時(shí)鐘(sck)信號(hào)由主機(jī)產(chǎn)生。通過(guò)mosi發(fā)送數(shù)據(jù),同時(shí)通過(guò)miso引腳接收從機(jī)發(fā)出的數(shù)據(jù)。
當(dāng)器件作為從機(jī)時(shí),傳輸在從機(jī)選擇引腳(ssel)被主機(jī)拉低后開始,接收主機(jī)輸出的時(shí)鐘信號(hào),在讀取主機(jī)數(shù)據(jù)的同時(shí)通過(guò)miso引腳輸出數(shù)據(jù)。
spi接口內(nèi)部結(jié)構(gòu)
spi寄存器描述
spi寄存器描述
——spi控制寄存器
spcr寄存器包含一些可編程位來(lái)控制spi功能模塊的功能,該寄存器必須在數(shù)據(jù)傳輸之前進(jìn)行設(shè)定。
cpol:時(shí)鐘極性控制。
1:sck為低有效;
0:sck為高有效;
cpol:主模式控制。
1:spi處于主模式;
0:spi處于從模式;
lsbf:字節(jié)移動(dòng)方向控制。
1:每字節(jié)數(shù)據(jù)從低位(lsb)開始傳輸;
0:每字節(jié)數(shù)據(jù)從高位(msb)開始傳輸;
spie:spi中斷使能。
1:每次spif或modf置位時(shí)都會(huì)產(chǎn)生硬件中斷;
0:spi中斷被禁止;
spi寄存器描述
——spi狀態(tài)寄存器
spsr寄存器為只讀寄存器,用于監(jiān)視spi功能模塊的狀態(tài),包括一般性功能和異常狀況。
讀溢出:當(dāng)spi功能模塊內(nèi)部讀緩沖區(qū)包含沒有讀出的數(shù)據(jù),而新的傳輸已經(jīng)完成,就會(huì)發(fā)生讀溢出。如果spif位置位 (讀緩沖區(qū)已滿),新接收到的數(shù)據(jù)將會(huì)丟失,而狀態(tài)寄存器的讀溢出(rovr)位將置位。
寫沖突:在spi數(shù)據(jù)傳輸過(guò)程當(dāng)中不應(yīng)向spi數(shù)據(jù)寄存器寫入數(shù)據(jù)。不能向spi數(shù)據(jù)寄存器寫入數(shù)據(jù)的時(shí)間從傳輸啟動(dòng)時(shí)開始,直到spif置位時(shí)讀取狀態(tài)寄存器為止。如果在這段時(shí)間內(nèi)寫spi數(shù)據(jù)寄存器,寫入的數(shù)據(jù)將會(huì)丟失,狀態(tài)寄存器中的寫沖突位(wcol)置位。
模式錯(cuò)誤:ssel信號(hào)在spi功能模塊為主機(jī)時(shí)必須無(wú)效,不能用作gpio。當(dāng)spi功能模塊為主機(jī)時(shí),如果ssel信號(hào)被激活(將ssel變?yōu)榈碗娖?,表示有另外一個(gè)主機(jī)將該器件選擇為從機(jī)。這種狀態(tài)稱為模式錯(cuò)誤。
從機(jī)中止:如果ssel信號(hào)在傳輸結(jié)束之前變?yōu)楦唠娖?,從傳輸將被認(rèn)為中止。此時(shí),正在處理的發(fā)送或接收數(shù)據(jù)都將丟失,狀態(tài)寄存器的從機(jī)中止(abrt)位置位。
spi寄存器描述
——spi數(shù)據(jù)寄存器
spdr寄存器為spi提供數(shù)據(jù)的發(fā)送和接收。處于主模式時(shí),向該寄存器寫入數(shù)據(jù),將啟動(dòng)spi數(shù)據(jù)傳輸。從數(shù)據(jù)傳輸開始到spif狀態(tài)位置位并且沒有讀取狀態(tài)寄存器的這段時(shí)間內(nèi)不能對(duì)該寄存器執(zhí)行寫操作。
spi寄存器描述
——spi時(shí)鐘計(jì)數(shù)寄存器
作為主機(jī)時(shí),spccr寄存器控制sck的頻率。寄存器的值為一位sck時(shí)鐘所占用的pclk周期數(shù)。該寄存器的值必須為偶數(shù),并且必須不小于8。如果寄存器的值不符合以上條件,可能會(huì)導(dǎo)致產(chǎn)生不可預(yù)測(cè)的動(dòng)作。
spi速率 = fpclk / spccr
spi寄存器描述
——spi中斷寄存器
該寄存器包含spi接口的中斷標(biāo)志。
使用spi接口的注意要點(diǎn)
作主機(jī)時(shí),ssel引腳必須接上拉電阻,不能作為io口使用;
作主機(jī)時(shí),在發(fā)送一字節(jié)數(shù)據(jù)的同時(shí)接收一字節(jié)數(shù)據(jù);
spi時(shí)鐘分頻值必須大于或等于8;
數(shù)據(jù)寄存器與內(nèi)部移位寄存器之間沒有緩沖區(qū),寫spdr會(huì)使數(shù)據(jù)直接進(jìn)入移位寄存器。因此數(shù)據(jù)只能在上一次數(shù)據(jù)發(fā)送完成后寫入spdr寄存器。
spi應(yīng)用示例
——作為主機(jī)
spi應(yīng)用示例
——作為從機(jī)