2011年6月18日 星期六

DIY - PIC:PIC18F4550 SPI 串列介面 (八十四)

DIY - PIC:PIC18F4550 SPI 串列介面 (八十四):

Microchip PIC18F4550 的主同步串口(Master Synchronous Serial Port,縮寫:MSSP)模組是一個串行接口,用於同其他外設或單片機器件進行通信的串列介面。 這些外設包括串列 EEPROM、移位寄存器、顯示驅動器和 A/D 轉換器等。

▲ SPI 匯流排,單一 master 對複合 slave
MSSP 模組可以工作在以下兩種模式: 
• 串列外設介面(Serial Peripheral Interface,縮寫:SPI) 
• I2C (Inter-Integrated Circuit)


SPI 模式允許同時同步發送和接收 8 位元資料。 該模組支持SPI 的所有四種模式。 通常使用以下三個引腳來完成通信: 
• 串列資料輸出(Serial Data Out, SDO)- RC7/RX/DT/SDO (Pin 26) 
• 串列資料登錄(Serial Data In, SDI)- RB0/AN12/INT0/FLT0/SDI/SDA (Pin 33) 
• 串列時鐘(Serial Clock, SCK)- RB1/AN10/INT1/SCK/SCL (Pin 34) 
• 串列時鐘(Chip Select, CS)- RC0 (可自由選擇) (Pin 15)

▲ 18F4550 的 SPI 框圖
▲ SDI數據變化在 CLK上升沿 時有效,SDO數據變化在SCK下降沿時有效。
工作原理當初始化SPI 時,需要通過對相應的控制位(SSPCON1<5:0> 和 SSPSTAT<7:6>)編程來設置選項。 這些控制位元允許設置以下選項: 
• 主模式(SCK 作為時鐘輸出) 
• 從模式(SCK 作為時鐘輸入) 
• 時鐘極性(SCK 處於空閒狀態) 
• 輸入資料的採樣階段(資料輸出時間的中間或末端) 
• 時鐘邊沿(在SCK 的上升沿/ 下降沿輸出資料) 
• 時鐘速率(僅主模式下) 
• 從動選擇模式(僅從模式下)

▲ SSPSTAT:MSSP 狀態寄存器 (SPI模式)
MSSP 模組由一個發送/ 接收移位寄存器(SSPSR)和一個緩衝寄存器(SSPBUF)組成。SSPSR 將數據移入/ 出器件,最高有效位在前。在新資料接收完畢前,SSPBUF保存上次寫入SSPSR 的資料。一旦8 位元資料接收完畢,該位元組就被移入SSPBUF寄存器。 然後,緩衝器滿檢測位BF(SSPSTAT<0>)和中斷標誌位元SSPIF 均被置1。 這種雙重緩衝資料接收方式(SSPBUF)允許在讀取剛接收的資料之前,就開始接收下一個位元組。 在資料發送/ 接收期間,任何試圖寫SSPBUF 寄存器的操作均無效,並會將寫衝突檢測位WCOL(SSPCON1<7>)置1。用戶必須用軟體將 WCOL 位元清零才能判斷後續對SSPBUF 寄存器的寫入是否成功。
 
為確保應用軟體能有效地接收資料,應該在要發送的下一資料位元組寫入SSPBUF 之前,讀取SSPBUF 中現有的數據。 緩衝器滿標誌位元BF(SSPSTAT<0>)用於表示何時SSPBUF 載入了已接收的資料(發送完成)。當SSPBUF 中的資料被讀取後,BF 位即被清零。 如果SPI僅僅作為一個發送器,則不必理會該位。通常可用MSSP 中斷來判斷發送或接收何時完成。如果不使用中斷來處理資料的收發,用軟體查詢方法同樣可確保不會發生寫衝突。例19-1 顯示裝載SSPBUF (SSPSR)進行資料發送的過程。用戶不能直接讀寫SSPSR 寄存器,只能通過訪問SSPBUF 寄存器來間接訪問。 此外,MSSP 狀態寄存器(SSPSTAT)指示各種狀態。

▲ SSPCON1:MSSP 控制寄存器1 (SPI模式)
要使能串口,必須將MSSP使能位SSPEN(SSPCON1<5>)置1。 要重定或重新配置SPI 模式,應先將SSPEN位清零,重新初始化SSPCON寄存器,然後將SSPEN位置1。 這將把SDI、SDO、SCK和SS引腳配置為串口引腳。 要讓上述引腳充當串口引腳,必須按如下說明正確設置其中一些引腳的資料方向位元(在TRIS 寄存器中): 
• SDI 由SPI 模組自動控制 
• SDO 必須將TRISC<7> 位清零 
• SCK (主模式)必須將TRISB<1> 位清零 
• SCK (從模式)必須將TRISB<1> 位置1 
• SS 必須將TRISA<5> 位置1 
對於不需要的任何串口功能,可通過將對應的資料方向(TRIS)寄存器設置為相反值來遮罩。

沒有留言:

張貼留言