小夏天的大西瓜 发表于 2023-9-26 08:50

灵动MCU SPI从动方式配置过程

SPI作为从设备时,SCK引脚输入来自主设备的串行时钟,因此从设备工作时不使用波特率发生器,
不需配置寄存器SPI_I2S_SPBRG(从设备下无效)。
1、配置过程如下:
1. 配置SPI_I2S_GCTL.SPILEN,定义数据帧格式为7位或者8位;配置SPI_I2S_GCTL.DW8_32为
‘1’,可配置SPI_I2S_EXTCTL寄存器来定义成任意帧格式(SPILEN需固定为‘1’)。
2. 配置寄存器SPI_I2S_CCTL中的CPOL、CPHA/CPHASEL位,以确定时序模式。
3. 配置SPI_I2S_CCTL.LSBFE,确定数据帧的收发顺序(LSB或MSB位优先)。
4. 配置寄存器SPI_I2S_GCTL中的MODE位为‘0’(从模式),SPIEN位为‘1’(SPI功能使能)
并配置SPI工作所需的GPIO功能引脚。
5. 配置寄存器SPI_I2S_GCTL中TXEN、RXEN位为‘1’,打开发送、接收的许可(发送时需提前写
入数据到寄存器SPI_I2S_TXREG),SPI将在从模式下接收MOSI引脚数据,并从MISO引脚输出数据。
注意:必须配置主、从设备的时序模式和数据帧收发顺序为一致,以保证数据能正常传输。
2、数据发送过程
写数据到发送数据寄存器SPI_I2S_TXREG后,整个数据会一起传输到发送缓冲。
当从设备接收到SCK引脚上的时钟信号,也同时接收到MOSI 引脚传来的第一个数据位;从设备利用
SCK的变化边沿,把发送数据逐位发送到MISO引脚上。发送数据的过程符合数据/时钟的相关时序(由
CPOL、CPHA/CPHASEL位来决定)。
但在高速传输时(配置SPI_I2S_CCTL.TXEDGE=1),数据将不再按照输入的SCK时钟边沿而变化
而会提前以内部PCLK的时钟边沿把数据送到MISO引脚上(此提前量不会早于前一位数据接收采样的
SCK时钟边沿)。
当数据第一位被发送时,硬件会置位SPI_I2S_INTSTAT.TX_INTF 标志,软件可利用此标志来写
TXREG以实现数据的连续发送(配置SPI_I2S_INTEN.TX_IEN位为‘1’来产生CPU中断)。
注意:从机时钟信号由主机提供,因此,连续传输的前提必须是主机能提供连续不断的时钟。
3、数据接收过程
从设备接收到MOSI引脚输入的一个完整数据时:
 此数据通过移位寄存器,会在最后一个采样时钟边沿被传输到接收缓冲中;硬件也同时会置位
SPI_I2S_INTSTAT.RX_INTF标志。之后软件通过读SPI_I2S_RXREG,就能从接收缓冲中获取
该数据。
 软件配置SPI_I2S_INTEN.RX_IEN位为‘1’来打开中断使能,利用CPU中断获取接收数据。

tpgf 发表于 2023-10-12 11:42

可以经过微小的配置将从模式改为主模式吗

kxsi 发表于 2023-10-12 11:53

spi的通讯方式必须是一对一是吗

zljiu 发表于 2023-10-12 12:11

如果通讯速度快数据大的话 是不是需要使用双缓冲呢

磨砂 发表于 2023-10-12 13:27

主从设备之间时钟的偏差在多少范围内能保证通讯正常呢

晓伍 发表于 2023-10-12 13:45

磨砂 发表于 2023-10-12 13:27
主从设备之间时钟的偏差在多少范围内能保证通讯正常呢

其实只要在当前通讯种类的容差范围内就行

aoyi 发表于 2023-10-12 20:46

spi在通讯的时候存在卡顿的现象吗

中国龙芯CDX 发表于 2023-12-28 10:31

aoyi 发表于 2023-10-12 20:46
spi在通讯的时候存在卡顿的现象吗

这个应该不会吧,卡顿问题一般是性能问题
页: [1]
查看完整版本: 灵动MCU SPI从动方式配置过程