串行外设接口(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,等待从机回传处理结果。