TMS320F28335——SPI使用笔记
一、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的位置。
也有可能设置了回环模式也会出现这种情况。发送接收代码如图