是不是Serial Periphieral Interface , 串行外設接口
RC32332/4中的SPI接口:
SPI四由個引腳:spi_miso,spi_mosi,spi_sck,spi_ss_n。
SPI支持RC32332與外部設備(E2ROM etc...)全雙工模式的,同步串行數據傳輸。
主設備通過spi_mosi發送數據給從設備,從設備通過主設備的spi_miso發送數據給主設備,兩個方向的傳輸可以同時同步進行。
主設備發送數據:
將發送數據寫入SPI Data Register(SPDR),這個數據將被移到shift register後被立即發送,在8個串行時鐘周期後,SPI標識位(SPI Flag,SPIF)被設置,表示數據傳輸完成。在進行下壹次傳輸前,必須通過讀取SPI 狀態寄存器(SPI Status Register),清除SPIF位和SPDR內容。對於打開SPI中斷,在傳輸完成後,將會產生SPI中斷信息。
SPI四個寄存器,基地址0x1800 0900
SP_Clock Divisor/Prescalar Register(SPCNT) offset:0x00
SP_Control Register SPCNTL 0x04
SP_Status Register (SPSR) 0x08
SP_Data I/O Register (SPDR) 0x0C
SPCNT:設置spi_sck=system clock / [2*(SPCNT+1)*SPR];
SPCNTL:
SPIE:1-在SPIF設1時使能SPI 卡中斷;0-關SPI中斷(默認);
SPE:1-打開SPI,0-關閉SPI(默認)
MSTR:1-SPI主模式;0-保留使用,RC32334/2只能為SPI主模式
CPOL:時鐘級性,0-當傳輸時spi_sck為邏輯0(Default),1-當傳輸時spi_sck為邏輯1.
CPHA:
SPR:00除以2(Default);01除以4;10除以16;11除以32
SPSR:
SPIF:傳輸完成標致,0-空閑,為傳輸做好準備,1-數據傳輸完成,被隱式設置。
WCOL:寫沖突,如果為1,則出現寫沖突,此時的寫入將被忽略。
MODF:Master Error Flag,置1說明出現違例。
SPDR:
數據寄存器,由主設備發起數據傳輸,當數據傳輸完成,主從SPI設備的SPIF狀態位都將被置1。
當要發送數據時,向此寄存器寫入數據,當數據傳輸完成後,SPIF狀態寄存器被置1,讀取SPSR,而後從此寄存器讀取接收到的數據。
主模式編程範例:
系統時鐘頻率67MHz下初始壹個2MHz的SPI接口。
1.設置SPCNT寄存器為0x0000 0008,設置SPI時鐘為3.7MHz
2.設置SPCR寄存器為0x0000 00F0,設置SPIE=1,使能SPI中斷,SPE=1使能SPI接口。MSTR=1,這個通常設為1。CPOL=0時鐘為低電頻表示SPI非激活,CPHA=0:在第壹個活動沿采樣數據。SPR=0,將內部時鐘二分,則SPI時鐘為3.7/2=1.85MHz;
3.設置中斷掩碼寄存器14(0x1800_05E4)為0x0000 0001,打開系統SPI中斷服務。
4.讀取SPSR和SPDR寄存器,清除SPIF位。
5.設置PIO中的spi_ss_n的輸出模式,並設置為低電頻。
6.將要發送的數據寫入SPDR寄存器。
7.等待SPI中斷產生,中斷服務程序完成以下步驟
8.讀取SPSR,確保沒有任何錯誤發生。
9.讀取SPDR寄存器,獲取SPDR寄存器的內容,同時重置SPSR中的SPIF位。
10.設置SPI中斷重置寄存器(0x1800_05E8)為0x0000_0001,清除SPI中斷Pending寄存器。
11.如果完成了命令系列,拉高spi_ss_n引腳。
12.重復5-11的步驟,完成新壹倫的命令。
////
初始化SPI應該註意幾點內容:
1.正確選擇主機或從機,以及工作模式(極性),數據傳輸率。
2.註意傳送字節的順序,是低位優先(LBS First)還是高位優先(MSB First)。
3.正確設置MOSI和MISO接口的輸入,輸出方向,輸入引腳上拉電阻,可以節省總線上的吊高電阻。