一、SPI硬件接口
GPIO54 ------- SPISIMOA
GPIO55 ------- SPISOMIA
GPIO56 ------- SPCLK
GPIO57 ------- SPSTEA
配置IO功能:
如上圖所示,需要配置IO為SPI模式 只需要寫入對應位為 1即可。代碼如下
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // Configure GPIO57 as SPISTEA
二、設置SPI相關寄存器
SPI寄存器描述文檔:http://www.ti.com/lit/ug/sprueu3a/sprueu3a.pdf
1、初始化SPI FIFO相關寄存器
SPIFFTX:FIFO發送寄存器
SPIFFRX:FIFO接收寄存器
SPIFFCT:FIFO控制寄存器
代碼如下:
void spi_fifo_init() { SpiaRegs.SPIFFTX.all=0xE040;//使能FIFO;清除發送中斷標志位;禁止FIFO發送中斷; //發送中斷級別定義為0; SpiaRegs.SPIFFRX.all=0x204f;//清除FF溢出標志位;清除溢出接受中斷標志位;禁止 //FF接受中斷;接受中斷級別為16; SpiaRegs.SPIFFCT.all=0x0;//SPITXBUF到移位寄存器傳送不延遲; }
2.設置SPI相關寄存器
SPICCR:配置控制寄存器
SPICTL:運行控制寄存器
SPIBRR:波特率寄存器
SPIPRI:優先級控制寄存器
初始化代碼:
//初始化SPI函數 void spi_init() { SpiaRegs.SPICCR.all =0x004F;// SPI軟件復位, 極性位為1(下降沿發送數據), 每次移 //進和移出16位字長度;禁止SPI內部回送(LOOKBACK)功能; SpiaRegs.SPICTL.all =0x0006; // 使能主機模式,正常相位,使能主機發送,禁止接收 //溢出中斷,禁止SPI中斷; SpiaRegs.SPIBRR =0x007F; //SPI波特率=25M/128 =195.3KHZ; SpiaRegs.SPICCR.all =0x00CF;//停止SPI軟件復位准備接收或發送;禁止回送模式; SpiaRegs.SPIPRI.bit.FREE = 1; // 自由運行 }
三、使用SPI發送數據
發送數據就比較簡單了只需要向 SPITXBUF 寫入數據即可。
//發送SPI數據 void spi_xmit(Uint16 a) { SpiaRegs.SPITXBUF=a; }
四 SPIA串口有時鍾線有數據輸出,但是SIMO IO沒有數據輸出的問題。
收發數據代碼:
SPI配置代碼:
由於MSB在前,數據是從高位一位一位的輸出,所以在 輸出8位的時候需要將數據移到bit15-bit8的位置。
也有可能設置了回環模式也會出現這種情況。發送接收代碼如圖