本帖最后由 小夏天的大西瓜 于 2023-9-25 18:21 编辑
SPI作为主设备时,输出串行时钟到SCK引脚上,供从设备使用。
一、具体配置如下:
1. 配置SPI_I2S_SPBREG寄存器,定义串行时钟波特率。
2. 配置SPI_I2S_CCTL寄存器中CPOL、CPHA/CPHASEL位,确定时序模式。
3. 配置SPI_I2S_CCTL.SPILEN 来定义8或7位数据帧格式;配置SPI_I2S_GCTL.DW8_32 为
‘1’,可配置SPI_I2S_EXTCTL寄存器来定义成任意帧格式(SPILEN需固定为‘1’)。
4. 配置SPI_I2S_CCTL.LSBFE来确定数据收发的顺序(LSB或MSB位优先)。
5. 如果只接收而不发送数据,可配置SPI_I2S_RXDNR寄存器来定义需要接收的字节数(当接收到
指定个数字节后,SCK时钟输出会结束并保持在CPOL位配置的状态上)。
6. 配置寄存器SPI_I2S_GCTL中的MODE位为‘1’(主模式)、SPIEN位为‘1’(SPI功能使能)
并配置SPI工作所需的GPIO功能引脚。
7. 配置寄存器SPI_I2S_GCTL中TXEN、RXEN位为‘1’,打开发送、接收的许可(发送时打开
TXEN后写入数据到寄存器SPI_I2S_TXREG),SPI将在主模式下输出时钟SCK和同步数据MOSI到引脚
上,并从MISO引脚上采样输入数据;NSS是主设备可选的输出功能。
注意:必须配置主、从设备的时序模式和数据帧收发顺序为一致,以保证数据能正常传输。
二、数据发送过程
配置TXEN位为‘1’后,写数据到发送数据寄存器TXREG,此数据将传输到发送缓冲,主设备开始发
送。主设备按照预先配置好的波特率串行输出SCK时钟和MOSI数据到引脚上,此过程符合数据/时钟的相
关时序(由CPOL、CPHA/CPHASEL位决定);而且LSBFE位决定了数据串行传输顺序。
当数据第一位被发送时,硬件会置位SPI_I2S_INTSTAT.TX_INTF 标志,软件利用此标志来写
TXREG以实现数据的连续发送(配置SPI_I2S_INTEN.TX_IEN位为‘1’来产生CPU中断)。
三、数据接收过程
主设备接收到MISO引脚输入的一个完整数据时:
此数据通过移位寄存器,会在最后一个采样时钟边沿被传输到接收缓冲中;硬件也同时会置位
SPI_I2S_INTSTAT.RX_INTF标志。之后软件通过读SPI_I2S_RXREG,就能从接收缓冲中获取
该数据。
软件配置SPI_I2S_INTEN.RX_IEN位为‘1’可打开中断使能,利用CPU中断获取接收数据。
只接收时,接收完RXDNR定义的字节个数后,硬件将置位SPI_I2S_INTEN.RXMATCH_INTF标
志,同时主设备不再发送时钟信号,SCK输出将保持在CPOL位配置的状态上(固定高或低电
平)。
|