Microchip PIC18F4550 的主同步串口(Master Synchronous Serial Port,縮寫:MSSP)模組是一個串行接口,用於同其他外設或單片機器件進行通信的串列介面。 這些外設包括串列 EEPROM、移位寄存器、顯示驅動器和 A/D 轉換器等。
▲ SPI 匯流排,單一 master 對複合 slave |
• 串列外設介面(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下降沿時有效。 |
• 主模式(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模式) |
• SDI 由SPI 模組自動控制
• SDO 必須將TRISC<7> 位清零
• SCK (主模式)必須將TRISB<1> 位清零
• SCK (從模式)必須將TRISB<1> 位置1
• SS 必須將TRISA<5> 位置1
對於不需要的任何串口功能,可通過將對應的資料方向(TRIS)寄存器設置為相反值來遮罩。
沒有留言:
張貼留言