夏 琳,鄭大勇
(1.中國電子科技集團公司第四十七研究所,沈陽110032;2.工業和信息化部電子第五研究所,廣州510610)
基于C8051F500的SPI接口研究
夏 琳1,鄭大勇2
(1.中國電子科技集團公司第四十七研究所,沈陽110032;2.工業和信息化部電子第五研究所,廣州510610)
主要介紹了C8051F500中的SPI(Serial Perripheral Interface)接口,尤其是對SPI0CKR時鐘速率控制寄存器、SPI0CFG配置寄存器、SPI0CN控制寄存器、SPI0DAT數據寄存器、Shift Register移位寄存器的結構和功能進行了詳細介紹,并深入研究了SPI接口的通信過程。通過仿真,驗證了主機與從機之間的數據傳輸以及各個寄存器的功能。
SPI接口;配置寄存器;控制寄存器;數據寄存器;移位寄存器
SPI(Serial Perripheral Interface)串行外圍設備接口,是Motorola公司推出的同步串行接口技術,是一種靈活的、全雙工,同步的串行通信總線。SPI可以作為主機和從機方式工作,具有三線和四線工作模式,在同一SPI總線上可支持多個主機和從機間的通信。從機選擇信號NSS可被設置為輸入以選擇工作在從機方式的SPI,以避免兩個以上主機同時進行數據傳輸時發生 SPI沖突。SPI在C8051F500芯片上只占用了四個引腳實現數據傳輸,節約了芯片的引腳數目,節省了布局空間,簡單易用。
SPI通信結構是一個環形總線結構,由串行時鐘信號SCK、串行數據MOSI和串行數據MISO、從機選擇信號NSS構成,其時序簡單,主要是在串行時鐘信號SCK的控制下,兩個雙向移位寄存器進行數據交換。其引腳功能描述見表1。
C8051F500中的增強型SPI結構如圖1所示,主要由SPI0CKR時鐘速率控制寄存器、SPI0CFG配置寄存器、SPI0CN控制寄存器、SPI0DAT數據寄存器、Shift Register移位寄存器和相關控制電路組成。

表1 引腳功能描述
2.1 SPI0CKR時鐘速率控制寄存器
SPI0CKR是一個8位的時鐘速率控制寄存器,當SPI被配置成主機工作方式時,由該寄存器控制輸出的串行時鐘SCK頻率。串行時鐘SCK頻率是從系統時鐘(SYSCLK)分頻得到的,由以下公式進行計算可得出,其中SYSCLK是系統時鐘,SPI0CKR[7:0]是SPI0CKR寄存器中的8位數值。

圖1 SPI接口結構圖

2.2 SPI0CFG配置寄存器
可以通過SPI0CFG配置寄存器對SPI串行時鐘的極性和相位以及主從工作方式進行設置,其組成如表2所示。

表2 SPI0CFG配置寄存器
每一位的功能如下:
·Bit7-SPIBSY:SPI工作繁忙標志,當SPI傳輸正在進行時(主/從機),該位被置1;
·Bit6-MSTEN:主機工作方式允許位,0表示禁止主機工作方式,1表示允許主機工作方式;
·Bit5-CKPHA:SPI時鐘相位配置,0表示在時鐘SCK周期的第一個邊沿進行數據采樣,1表示在時鐘SCK周期的第二個邊沿進行數據采樣;
·Bit4-CKPOL:SPI時鐘極性配置,0表示在空閑時時鐘SCK為低電平,1表示在空閑時時鐘SCK為高電平;
Bit3-SLVSEL:從機選擇標志位,當NSS引腳為低電平時,該位被置1,表示SPI是被選中的從器件;當NSS引腳為高電平時,該位被清0,表示SPI是未被選中的從器件;
·Bit2-NSSIN:NSS引腳輸入的瞬間值;
·Bit1-SRMT:移位寄存器空標志位(從機模式有效),當所有數據都被移入/移出移位寄存器,并沒有新數據從緩沖器讀出/寫入時,該位被置1;當數據從發送緩沖器傳送到移位寄存器或時鐘SCK發生變化時,該位被清0;主機工作方式時,該位為1;
·Bit0-RXBMT:接收緩沖器空標志位,當接收緩沖器中的數據被讀出且沒有新的數據時,該位被置1;如果接收緩沖器中有新數據未被讀出,則該位被清0;主機工作方式時,該位為1;
通過上述的功能簡介可以看出,SPI數據傳輸模式被設置成CPOL=1和CPHA=1時,在一個SCK時鐘周期內,每個單獨的SPI都能以全雙工方式,同時發送和接收一位數據。因此,SPI總線的頻率越快,時鐘周期越短,則SPI間數據交換的速率就越快。
2.3 SPI0CN控制寄存器
通過SPI0CN控制寄存器可以查看一些標志和設置SPI三/四線通信模式,主要是用到SPIF這個標志位,接收完成和發送完成都會置位這個標志,進入中斷服務程序。其組成如表3所示。

表3 SPI0CN控制寄存器
每一位的功能如下:
·Bit7-SPIF:SPI中斷標志位,在數據傳輸結束后,該位由硬件置1;如果中斷允許,該位置1將會使CPU轉到SPI中斷服務程序。該位不能被硬件自動清0,必須用軟件清0。
·Bit6-WCOL:寫沖突標志位,該位由硬件置1,并產生一個SPI中斷,表示在數據傳送期間對SPI數據寄存器進行了寫操作。該位不能被硬件自動清0,必須用軟件清0。
·Bit5-MODF:方式錯誤標志位,當檢測到主機工作方式沖突時,該位由硬件置1;該位不能被硬件自動清0,必須用軟件清0。
·Bit4-RXOVRN:接收溢出標志位,當前傳輸的最后一位已移入SPI移位寄存器,而接收緩沖器中仍保存著前一次傳輸未被讀取的數據時,該位由硬件置1,并產生一個中斷。該位不能被硬件自動清0,必須用軟件清0。
·Bit3/2-NSSMD[1:0]:選擇模式位,通過該兩位選擇NSS工作方式:00表示三線主/從機工作方式,NSS信號不連接到端口引腳;01表示四線從機或多主機工作方式,NSS是輸入引腳;1X表示四線單主機工作方式,NSS是一個輸出引腳。
·Bit1-TXBMT:發送緩沖器空標志位,當新數據被寫入發送緩沖器時,該位被清0;當發送緩沖器中的數據被傳送到移位寄存器時,該位被置1,表示可以向發送緩沖器寫入新的數據。
·Bit0-SPIEN:SPI使能位,1表示SPI允許,0表示SPI禁止;
2.4 SPI0DAT數據寄存器
SPI0DAT是一個8位的可讀寫數據寄存器,用于發送和接收SPI數據。在主機工作方式下,向SPI0DAT寫入數據時,數據被放到發送緩沖器中并啟動發送,讀SPI0DAT返回接收緩沖器的數據。
寫數據是將數據傳輸到發送緩沖器中,通過移位寄存器將發送緩沖器中的數據串行發送出去;讀數據是將移位寄存器接收到的串行數據傳輸到接收緩沖器中。
2.5 ShiftRegister移位寄存器
Shift Register是SPI內部的8位移位寄存器,它的主要作用是根據SPI時鐘信號狀態,往接收/發送緩沖器里移入/移出數據。
結合仿真,對主、從機之間的數據傳輸進行驗證,深入了解SPI的通信方式。
3.1 SPI仿真驗證
利用仿真軟件,以四線主/從機工作方式為例,SPI主從機數據傳輸仿真驗證環境如圖2所示。

圖2 仿真驗證圖
基于C8051F500的SPI主機初始化程序:
MOV A7,#0FH;//SFRPAGE=0F頁;
MOV A4,#0DH;//將端口設置為輸出推挽方式;
MOV E1,#04H;//交叉開關中允許SPI;
MOV C7,#40H;//交叉開關允許、I/O端口弱上拉;
MOV A7,#00H;//SFRPAGE=00頁;
MOV A1,#40H;//SPI主機模式;
CKPHA=0;
CKPOL=0;
MOV F8,#0DH;//SPI四線主機模式;SPI允許;
MOV A2,#17H;//SYSCLK=24MHz,fSCK=500KHz;
MOV A3,#AAH;//向主機SPI0DAT寫入數據AAH;
基于C8051F500的SPI從機初始化程序:
MOV A7,#0FH;//SFRPAGE=0F頁;
MOV A4,#0DH;//將端口設置為輸出推挽方式;
MOV E1,#04H;//交叉開關中允許SPI;
MOV C7,#40H;//交叉開關允許、I/O端口弱上拉;
MOV A7,#00H;//SFRPAGE=00頁;
MOV A1,#00H;//SPI從機模式;
CKPHA=0;
CKPOL=0;
MOV F8,#05H;//SPI四線從機模式;SPI允許;
3.2 SPI主機工作方式
SPI總線上的所有數據傳輸都由SPI主機啟動。通過將主機允許標志位MSTEN(SPI0CN.6)置1,將SPI置于主機工作方式。當處于主機工作方式時,向SPI數據寄存器(SPI0DAT)寫入一個數據字節時是寫發送緩沖器。如果SPI移位寄存器為空,發送緩沖器中的數據字節被傳送到移位寄存器,數據傳輸開始。SPI主機立即在MOSI線上串行移出數據,同時在SCK上提供串行時鐘。在傳輸結束后SPIF(SPIOCN.7)標志位被置為邏輯1。如果中斷被允許,在SPIF標志置位時將產生一個中斷請求。在全雙工操作中,當SPI主機在MOSI線向從器件發送數據時,被尋址的SPI從機可以同時在MISO線上向主機發送其移位寄存器中的內容。因此,SPIF標志既作為發送完成標志又作為接收數據準備好標志。從從機接收的數據字節以MSB在先的形式傳送到主器件的移位寄存器。當一個數據字節被完全移入移位寄存器時,便被傳送到接收緩沖器,處理器通過讀SPIODAT來讀該緩沖器。
3.3 SPI從機工作方式
當SPI被使能而未被配置為主機時,它將作為SPI從機工作。作為從機,由主機控制串行時鐘SCK,從MOSI移入數據,從MISO引腳移出數據。SPI邏輯中的位計數器對SCK邊沿計數。
當8位數據經過移位寄存器后,SPIF標志位被置為邏輯1,接收到的字節傳送到接收緩沖器中。通過讀數據寄存器SPI0DAT來讀取接收緩沖器中的數據。從機不能啟動數據傳送,通過寫數據寄存器SPI0DAT來預裝要發送給主機的數據到移位寄存器。寫往SPI0DAT的數據是雙緩沖的,首先被放在發送緩沖器,如果移位寄存器為空,發送緩沖器中的數據會立即被傳送到移位寄存器。當移位寄存器中己經有數據時,SPI將在下一次(或當前)SPI傳輸的最后一個SCK邊沿過去后再將發送緩沖器內的數據裝入移位寄存器。
在從機檢測到第一個SCK邊沿后,移位寄存器中的數據被鎖定。在第一個SCK邊沿之后寫入SPI0DAT的數據被保持在發送鎖存器中,直到當前傳輸結束。
結合仿真驗證對C8051F500中的SPI接口進行了深入研究,詳細了解了主機與從機之間的數據傳輸過程。如今,SPI串行接口主要應用在EEPROM、Flash、實時時鐘(RTC)、數模轉換器(ADC)、數字信號處理器(DSP)以及數字信號解碼器等器件中。它在芯片中只占四個引腳,用來完成控制以及數據傳輸,具有簡單易用的特性,現在越來越多的芯片上都集成了SPI技術。
[1]李剛,林凌.與8051兼容的共性能、高速單片機-C8051FXXX[M].北京:北京航空航天大學出版社,2002.
[2]潘琢金,施國君.C8051FXXX高速SOC單片機原理及應用[M].北京:北京航空航天大學出版社,2002.
[3]張毅剛,彭喜源.MCS-51單片機應用設計[M].哈爾濱:哈爾濱工業大學出版社,2003.
Study of SPIBased on C8051F500
XIA Lin1,ZHENG Da-yong2
(1.The47th Research Institute of China Electronics Technology Group Corporation,Shenyang 110032,China;2.CEPREI,Guangzhou 510610,China)
This paper mainly describes the Serial Perripheral Interface(SPI)in C8051F500,especially introduces the structure and the functions of SPI0CKR,SPI0CFG,SPI0CN,SPI0DAT and Shift Register,and studies the communication process of Serial Perripheral Interface(SPI)between master and slave device by simulation.
SPI;SPI0CFG;SPI0CN;SPI0DAT;Shift Register
10.3969/j.issn.1002-2279.2014.03.004
TN4
:A
:1002-2279(2014)03-0011-03
夏琳(1981-),女,沈陽市人,工程師,主研方向:集成電路設計。
2013-12-26