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例程的主要内容,如果未能解决你的问题,请参考以下文章

CMT2380F32模块开发15-SPI例程

CMT2380F32模块开发18-模拟电压比较器例程

CMT2380F32模块开发18-模拟电压比较器例程

CMT2380F32模块开发18-模拟电压比较器例程

CMT2380F32模块开发7-reset例程

CMT2380F32模块开发7-reset例程