【S32K3学习笔记】LPSPI


前言

通过前面的学习,已经可以实现最基础的引脚配置功能了,并实现了点亮LED的程序。下面将记录一下,S32K3的SPI模块的配置方法,以及注意事项。

一、LPSPI介绍

**LPSPI:LOW POWER Serial Peripheral Interface**

1.概述

  • 所有LPSPI支持最大数据速率15 MHz的附加板和7.5MHz的标准版。
  • LPSPI0实例在loopback模式下支持20MHz,在normal模式下支持15MHZ;
  • 所有6个LPSPI模块Tx和Rx支持DMA访问。
  • 可配置时钟极性和时钟相位。
  • 每个SPI 具有 2 个 4 字深度的 FIFO 分别缓冲 TX 与 RX 信息。
  • 每个LPSPI实例支持多个芯片选择。
  • 在主模式下灵活定时,包括SCK频率,占空比和PCS与SCK边缘之间的延迟。
  • TXMASK和RXMSK为半双工或匹配功能。
  • 支持半双工传输,支持在每个时钟边缘上发送或接收1/2/4/8位。

在这里插入图片描述
每个SPI均具有多个片选信号线,其中SPI0具有8个外部片选信号线。

2.时钟配置

在这里插入图片描述
高性能的SPI0以外设桥平台时钟AIPS_PLAT_CLK为总线时钟源,其他SPI以外设桥时钟作为总线时钟源。总线时钟源输入SPI 后,根据 SPI 预分频值得到用于度量时序参数的功能时钟,最后由功能时钟分频得到输出的 SPI 同步时钟信号 SCK根据时钟源的配置SPI0 回环模式下支持 20M 波特率,普通引脚下 15M ;其他 SPI 模块回环模式下 15M ,普通模式下 7.5M。

3.功能框图

在这里插入图片描述

1.控制逻辑:负责管理模块工作参数与通信参数,通过配置寄存器与 TXFIFO写入参数;
2.移位寄存器:将传输数据移出到总线与将数据移入 RXFIFO
3.FIFO:分为两类,发送 FIFO 与接收 FIFO ,总共 4 字深度。其中传输命令字也通过TXFIFO 写入控制逻辑;
4.SPI外部接口:连接引脚与 IO 信号;

二、使用步骤

1.引脚配置

在这里插入图片描述
例程使用的是LPSPI0,参数选择默认即可。

2.外设配置

SPI配置界面将 SPI 模块抽象化为三个功能部分,分别为 Name SpiDriver
SpiGeneral 。其中 Name 模块用于更上层的抽象定义 如 MCAL)MCAL),保持默认即可;我们主要讨论 SpiDriver SpiGeneral 两个模块的配置;
SpiGeneral界面主要负责配置 SPI 物理模块参数的配置(即硬件参数),如全局 DMA支持,同步传输定时器的选择, SPI 模块号与主从模式的配置, DMA 通道的选择等。有多少个 SPI 模块就需要在 SpiPhyUnit 中加入对应项数。
在这里插入图片描述

SPI Driver 配置界面主要负责配置 SPI 通信参数与传输命令字,由于通信参数与连接
的外设芯片相关,所以也被称为 externalDevice 配置。该界面主要可配置波特率,
PCS 片选信号线的选择,时钟极性与时钟相位,帧数据长度与格式、时钟延迟参数以及是否使能连续传输功能等。当配置完成后,通过SpiHwUnit 参数将此 externalDevice 配置映射到前面提到物理模块项。这种将物理模块与外设通信参数分离的设计思路可以很方便地应对 1 个 SPI 连接多个外设的情况。
在这里插入图片描述
值得注意的是SpiHwUnit中的选项就对应着SpiGeneral栏中的SpiphyUnit。这样我们就可以配置多个SPI芯片,对应一个SPI模块。

3.时钟配置

在这里插入图片描述
在这里插入图片描述

4.常用API

Lpspi_Ip_StatusType Lpspi_Ip_Init(const Lpspi_Ip_ConfigType *PhyUnitConfigPtr)
初始化指定的SPI HW实例。应该在调用所有其他API函数之前调用它。
Lpspi_Ip_StatusType Lpspi_Ip_UpdateTransferMode(uint8 Instance, Lpspi_Ip_ModeType Mode)
此函数更新指定SPI硬件微控制器外设的异步机制模式。
Lpspi_Ip_HwStatusType Lpspi_Ip_GetStatus(uint8 Instance)
这个函数返回指定SPI硬件微控制器外设的状态。
Lpspi_Ip_StatusType Lpspi_Ip_SyncTransmit(
                                            const Lpspi_Ip_ExternalDeviceType *ExternalDevice,
                                            uint8 *TxBuffer,
                                            uint8 *RxBuffer,
                                            uint16 Length,
                                            uint32 TimeOut
                                         )
调用SyncTransmit 函数执行一次同步传输,在函数内部获取计数器值进行计时,并
将数据依次推入 TDR 寄存器中发送。

5.Demo

应用程序使用SPI驱动程序以半双工模式传输数据
-通过LPSPI0(MASTER)传输10帧8位,通过LPSPI2(SLAVE)传输10帧8位
在这里插入图片描述

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值