【S32K3学习笔记】LPSPI

本文详细介绍了S32K3微控制器的LPSPI模块,包括其低功耗特性、时钟配置、功能框图及使用步骤。重点讲述了如何配置引脚、外设、时钟以及API的使用,提供了半双工传输的Demo,适用于嵌入式硬件开发者了解和使用LPSPI接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

通过前面的学习,已经可以实现最基础的引脚配置功能了,并实现了点亮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位
在这里插入图片描述

### S32K144 SDK 开发教程与资源获取 对于S32K144微控制器的开发,官方提供了详尽的支持文档以及必要的软件工具来帮助开发者快速上手。具体来说: #### 获取S32DS V3.5及其配套的基础开发包和RTD包(SDK) 为了启动项目并顺利进行开发工作,需先安装S32DS V3.5版本,并加载对应的基础开发包和实时驱动程序(RTD)包即SDK[^1]。 #### 配置开发环境 NXP提供了一系列强大的软件工具和支持库用于加速嵌入式系统的开发流程。其中包含了设计工作室S32 Design Studio (S32DS),它是一个集成化的开发平台,支持多种处理器架构下的应用开发;而软件开发套件(SDK)则集成了底层硬件抽象层(HAL)函数以及其他实用组件,使得开发者能够更加专注于应用程序逻辑的设计而非繁琐的寄存器级编程细节[^2]。 #### 安装过程中的注意事项 当下载完毕所需文件之后,在图形化界面上按照指示逐步完成S32DS安装向导的操作即可。值得注意的是,除了基本的应用程序之外,还需要额外下载针对特定芯片组(K3系列)的支持补丁以确保兼容性和稳定性[^3]。 #### 示例代码与API指南 关于如何利用SDK实现具体的外设控制功能(比如通过LPSPI接口与其他设备通信),可以在相应的技术手册和技术笔记中找到详细的说明。此外,有关于Flash存储器访问的具体实例也可以作为学习参考资料之一[^4]。 ```c // C语言示例:初始化LPSPI模块 void Lpspi_Init(void){ // 假定已经完成了时钟使能等前期准备工作... lpspi_master_config_t masterConfig; /* * master config: * - Baud rate: 800kbps. * - Sample point is at middle phase of data valid window. */ LPSPI_MasterGetDefaultConfig(&masterConfig); masterConfig.baudRate_Bps = 800000U; /* Initialize the SPI according to the board configuration and the user's configurations.*/ LPSPI_MasterInit(LPSPI_PERIPHERAL, &masterConfig, NULL); } ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值