1. 程式人生 > >F28027第九課---SPI操作解讀

F28027第九課---SPI操作解讀

這周又是忙碌的一週,經常加班到一兩點,又荒廢了將近一週,都不好意思了,所以今天把事情做完後,匆忙吃晚飯就回來了。
今天我們要學習的是SPI(Serial Peripheral Interface)序列外設介面。
先來看個總圖:
SPI
從上面大概可以知道,SPI主要有三部分組成:資料寫入讀出、SPI使能和時鐘、中斷。分解後就比較好理解SPI整體的工作原理了:首先設定好使能和時鐘,寫好中斷服務子程式,然後開始資料的傳輸,當完成一個位元組單位資料的讀入讀出時,產生中斷。
瞭解了概念後,我們現在來具體學習SPI。
我把整個英文文件看完後,認為歸納為兩部分:4線操作模式和3線操作模式。其中4線模式是基礎,所以我們先從4線模式開始學習。
所謂的四線也就是:SPISOMI、SPISIMO、SPISTE、SPICLK。具體解釋如下:
SPISOMI:SPI 從模式的輸出引腳,或者主模式的輸入引腳;
SPISIMO:SPI 從模式的輸入引腳,或者主模式的輸出引腳;
SPISTE:SPI 從模式的傳送使能引腳;
SPICLK:SPI 序列時鐘引腳;
看了上面的四線解釋,現在又引出了一個話題,什麼是主模式/從模式?
簡單的說就是主機和從機的區別,主機提供時鐘。
SPI


上面這張圖就是一個初步的總結了。
下面我們就要開始學習SPI操作的相關知識了。既然要學習操作,肯定要對暫存器有個大概的初步認識,我先來一張總表:
SPI
暫存器的作用相信大家看名稱大概就知道就幹嘛的了,我們就不浪費時間在英語解讀上面了。
SPI
上面這種圖是非常典型的主從控制器組網連線方式。
主控制器通過傳送SPICLK時鐘訊號來啟動資料傳輸。不管主模式還是從模式,資料都是通過時鐘訊號控制移位暫存器寫入讀出。有個比較重要的一點就是:主控制器能在任何時候進行資料傳輸,因為它控制著時鐘訊號。
貼個圖,簡單介紹下移位的意思:
移位
主從模式怎麼設定呢?它是通過SPICTL.2位的設定來限定的。
那我們下面來具體說說主模式/從模式。
首先是主模式,也就是SPICTL.2=1,提供整個序列網路的時鐘,資料從SPISIMO引腳輸出,從SPISOMI引腳讀入。另外還有一個暫存器–SPIBRR,波特率暫存器,能夠提供125種不同的傳輸速率。
波特率選擇和計算如下:
SPIBRR

主模式具體的工作過程如下:
MASTER
看完了主模式,現在來說從模式,SPICTL.2=0,資料從SPISOMI引腳輸出,從SPISIMO引腳讀入,從外部網路獲取的SPICLK訊號被用作序列移位時鐘訊號。傳輸速率由時鐘訊號控制,該時鐘訊號不能超過LSPCLK/4。
slave

說完了資料部分,我們現在來看看中斷部分。
主要有五個控制器位用來初始化中斷:
SPI INT ENA bit (SPICTL.0)—中斷使能位;
SPI INT FLAG bit (SPISTS.6)—中斷標誌位;
OVERRUN INT ENA bit (SPICTL.4)—超限中斷使能位;
RECEIVER OVERRUN FLAG(SPISTS.7)—接收器超限中斷標誌位;
SPI PRIORITY(SPIPRI.6)—中斷優先順序選擇位;

看完了中斷,我們再來看下時鐘。
SPI有四種時鐘模式,模式選擇由CLOCK POLARITY bit (SPICCR.6) 和 CLOCK PHASE bit (SPICTL.3)控制。其中CLOCK POLARITY bit選擇有效的時鐘跳變沿,時鐘上升沿或者下降沿;CLOCK PHASE bit控制時延半個時鐘週期。直接給大家上一幅圖,大家就明白了:
CLK
CLK

看完了中斷和時鐘,我們再來學習下初始化。
當系統復位後,預設配置如下:
1、MASTER/SLAVE = 0,預設配置為從模式;
2、TALK = 0,傳輸能力禁止;
3、在時鐘下降沿進行資料的鎖存;
4、傳輸長度為一位;
5、SPI中斷禁止;
6、SPIDAT資料為0000h;
7、SPI四線配置為普通IO模式;
我們需要的SPI配置是:
1、SPI SW RESET bit (SPICCR.7)清空,強制SPI處於復位狀態;
2、初始化SPI的配置、模式、位元率和引腳;
3、SPI SW RESET bit (SPICCR.7)置1,將SPI從復位狀態釋放;
4、寫資料到SPIDAT or SPITXBUF;
5、當傳輸完成後,也就是SPISTS.6 = 1,從SPIRXBUF讀出有用資料;

下面來看個五位長資料主從控制器傳輸的例子:
示例
示例

看完例子,來看四線最後一個內容:SPI FIFO
FIFO很好理解,就是first in,first out 先進先出。那主要有什麼特點呢?
FIFO
FIFO
最後一點,可程式設計中斷級別,來看看中斷
FIFO
FIFO
FIFO

到這裡四線就講完了,現在來看看三線模式。
3線
四線和三線主要的變化就是那兩個輸入快取暫存器變成一個了。但同時也有一個問題,就是傳送和接收相當於連線在一起了,在進行資料的讀寫時,都要非常小心。
在三線模式中,TALK bit (SPICTL.1)這一位很重要,這位在傳輸資料時必須置1,在讀資料的時候之前必須清零。在主模式中,為了啟動讀資料,在TALK位清零讀資料之前,必須先寫一個假資料到SPIDAT or SPIRXBUF暫存器。
三線控制如下:
3線
來看看三線主從模式的幾個例子。
首先是3線主模式傳輸:
主模式傳輸
然後是主模式接收:
主模式接收
接著是從模式傳輸:
從模式傳輸
最後是從模式接收:
從模式接收

好了,SPI的理論知識到這裡就講完了,又是兩個半小時過去了,我們抓緊時間,今晚把實踐課也講完。
F28027菜鳥交流qq群107691092