CMT2380F32模块开发15-SPI例程
Posted andylauren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMT2380F32模块开发15-SPI例程相关的知识,希望对你有一定的参考价值。
这篇文章基本就是水一篇,因为例程需要操作铁电存储器FM25640,我的开发板上没有这个,我也没有买这个芯片,这个芯片也不便宜,10元左右,所以这篇就讲讲原理,简单讲讲函数吧。
SPI 接口是工作于全双工模式下的同步串行数据通信接口,使用4个引脚进行通信:MISO、MOSI、SCK、CS/SSN。当SPI作为主机时,输出CS和SCK信号以控制通信过程。当SPI作为从机时,在SSN和SCK信号的控制下进行通信。
支持 SPI 主机模式、SPI 从机模式。支持标准四线全双工通信。支持配置串行时钟极性和相位。主机模式支持 7 种通信速率。帧长度固定为 8 比特,优先传送 MSB。
spi硬件链接图如下
时序大致是这样,具体采样时机与模式有关,也就是说主从机的模式必须一致,否则无法通信。
接口注释写的很好了,应该直接就可以使用。
Gpio_SetFunc_SPI_CS_P03();
Gpio_SetFunc_SPIMISO_P23();
Gpio_SetFunc_SPIMOSI_P24();
Gpio_SetFunc_SPICLK_P25();
配置io管脚。
Spi_SetCS(TRUE);
//配置SPI
SPIConfig.bCPHA = Spicphafirst;
SPIConfig.bCPOL = Spicpollow;
SPIConfig.bIrqEn = FALSE;
SPIConfig.bMasterMode = SpiMaster;
SPIConfig.u8BaudRate = SpiClkDiv2;
SPIConfig.pfnIrqCb = NULL;
Spi_Init(&SPIConfig);
初始化spi模块,包括中断,时钟,模式,主从等。
Spi_SetCS(FALSE);
Spi_SendData(0x06);
Spi_SetCS(TRUE);
写数据就是这么简单。
Spi_SetCS(FALSE);
Spi_SendData(0x03); //读命令
Spi_SendData(0x00); //写地址
Spi_SendData(0x00);
for(i=0;i<10;i++) //收数据
Buff[10+i] = Spi_ReceiveData();
Spi_SetCS(TRUE);
读数据也很简单。
从机配置也很简单,唯一的差别是需要主动检测cs引脚。
//配置SPI
SPIConfig.bCPHA = Spicphafirst;
SPIConfig.bCPOL = Spicpollow;
SPIConfig.bIrqEn = FALSE;
SPIConfig.bMasterMode = SpiSlave;
SPIConfig.u8BaudRate = SpiClkDiv32;
SPIConfig.pfnIrqCb = NULL;
Spi_Init(&SPIConfig);
//等待CS电平由高电平变为低电平
while(1 == M0P_GPIO->P0IN_f.P03);
Buff[0] = Spi_ReceiveData(); //获取主机发送来的数据
根据手册可知,从机中断只支持发送错误中断,并不支持cs有效中断,所以必须通过程序检测cs电平。
以上是关于CMT2380F32模块开发15-SPI例程的主要内容,如果未能解决你的问题,请参考以下文章