DSP

TMS320F28xx SPI master/slave example

2019-07-13 11:56发布

串行外设接口(SPI)是一个高速同步的串行输入/输出口。SPI的通信速率和通信数据长度都是可编程的,SPI通常用于DSP和外部外设及其他处理器之间的通信。主要用于显示驱动器、ADC及日历时钟等器件间接口,也可采用主/从模式实现多处理器间的通信。 本文示例采用了两块TMS320F28xx开发板,将四个外部引脚SPISOMI、SPISIMO、SPISTE、SPICLK一一对接,主要实现两个DSP间的通信。 示例代码基于TMS320F28xx开发包中的spi_loopback修改而来。我将spi_loopback工程复制并修改成两个工程:spi_master和spi_slave,分别作为SPI主机和从机。 首先是main(),主机和从机的main函数基本一致,初始化的过程与原spi_loopback工程一样,我只是将主要的数据处理过程改为调用函数spi_task(),以方便查看代码。 主机的SPI初始化函数spi_init() 从机的SPI初始化函数spi_init() 主/从机的FIFO初始化函数spi_fifo_init() 主机的数据处理函数spi_task(),该函数发送SPI_MASTER_XMIT,并查看读到的数值是否是与从机约定好的SPI_SLAVE_WAIT,如果是才将需要从机处理的数据发送给从机,待处理数据发送完毕,主机就开始不停发送SPI_MASTER_WAIT,等待从机回传处理结果。 从机的数据处理函数spi_task(),首先从机一直处于等待状态,当接收到SPI_MASTER_XMIT后便开始接收len长度的数据,数据处理完毕将处理结果回传给主机。这里需要注意的是回传处理结果之前需要将FIFO接收寄存器复位,否则在处理过程中从机已接收到主机发来的多个SPI_MASTER_WAIT,调用spi_xmit()就无法得到正确的数据。 spi_task()中用到的常数 主/从机的spi_xmit()函数,该函数在spi_loopback中只负责发送数据,在本例中我改为发送数据后立即接收数据。