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的位置。

  也有可能设置了回环模式也会出现这种情况。发送接收代码如图

 

posted @ 2019-07-04 13:18  Dipsyhu  阅读(9652)  评论(0编辑  收藏  举报