S32K146-LPUART+DMA方案实现

S32K146的LPUART+DMA实现

介绍:

本章主要记录了我在使用 NXP S32K146 芯片进行开发过程中,所遇到的串口(LPUART)数据接收问题,以及在分析问题、尝试多种方法后,最终通过更换方案解决问题的过程与总结。

在实际应用中,串口通信常常承担着高速、连续数据传输的任务。然而,当我在项目中需要频繁接收固定长度的数据包时,原有的基于中断的接收方式暴露出诸如 CPU 占用率过高、系统资源紧张、数据接收不稳定甚至丢包等问题。这些问题不仅影响了系统的实时性,也降低了整体稳定性。

为了解决这一瓶颈,我深入研究了 LPUART 与 DMA 联合使用的机制。通过采用 DMA 进行数据搬运,CPU 从逐字节处理中解放出来,只需在数据块搬运完成后通过一次中断进行处理,从而显著降低了系统负载,提高了数据接收的稳定性与效率。

本章将结合具体问题和解决方案,对比中断方式与 DMA 方式的差异,总结 DMA 在串口通信中的优势与注意事项,并分享实践中的经验与体会。希望这些内容能为今后在类似场景中使用 DMA 提供参考和借鉴。

目录

一丶背景介绍

二、LPUART中断方案的分析

三、LPUART+DMA的简介

四、LPUART+DMA的优势

五、具体流程

六、具体代码分析

七、总结


一丶背景介绍

       起初在频繁接收固定 34 字节数据时,曾出现过接收中断停止的情况。调试发现 LPUART 的 CTRL 寄存器状态(RE / RIE)被关闭。我最初的处理方法是检测到寄存器被关闭后,通过重新使能和初始化来恢复串口接收,但这种做法并不是长久之计,也不被允许。

二、LPUART中断方案的分析

        在 1,115,200 bps 的速率下,接收 34 个字节大约需要 3 ms。然而,由于工程中还包含其他任务和事件处理,整体运行难以满足需求。若每接收 1 个字节就触发一次中断,不仅会导致 CPU 占用率过高,还会在串口接收速率下降时增加丢包风险,从而进一步消耗有限的系统资源,降低整体稳定性。

三、LPUART+DMA的简介

        3.1、LPUART:

  • 是 NXP S32K146 等 MCU 内置的低功耗 UART 外设。

  • 具备常规 UA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值