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中断获取接收数据。
|