当前位置:   article > 正文

NXP S32K1 DMA模块_s32k dma

s32k dma

概述

本文描述NXP S32K14x的DMAMUX、eDMA,分析其S32SDK,加深对S32K1 DMA的理解与使用。

DMAMUX

S32K14x系列MCU有16个DMA通道,S32K11x系列只有4个DMA通道,而DMA请求却多达61个和多达两个常开槽,MADMUX实现将外设DMA请求(peripheral slots)指定到特定DMA通道(channels)。
DMAMUX
前4个DMA通道具有触发功能,DMAMUX有16个独立的通道路由( channel routers)。

操作模式

  • Disabled mode
    此模式下,DMA channel 失能。因使能失能是在DMA配置寄存器中完成,该模式常用于DMA通道复位,或用于临时挂起DMA。
  • Normal mode
    此模式下,DMA源直接路由到特定DMA通道。
  • Periodic Trigger mode
    此模式下,DMA 源可能只请求 DMA 传输,例如当发送缓冲区变空或接收缓冲区变满时,周期性地。

功能描述

DMAMUX channels可以分为2类:
• Channels that implement the normal routing functionality plus periodic triggering capability
• Channels that implement only the normal routing functionality

含周期触发

除了正常的路由功能外,DMAMUX 的前 4 个通道提供特殊的周期性触发功能,可用于提供自动机制以固定间隔传输字节、帧或数据包,而无需处理器干预。触发由外部周期性中断定时器(例如PIT)产生; 这样,周期触发间隔的配置是通过配置外部周期定时器来完成的。

DMA 通道触发功能允许系统安排定期 DMA 传输,通常在某些外设的发送端进行,无需处理器干预。 此触发器的工作原理是将外设的请求门控到 DMA,直到触发事件发生。

DMA 请求得到服务后,外设将取消其请求,有效地重置门控机制,直到外设重新声明其请求并直到下一个触发事件。 这意味着如果观测到触发,但外设未请求传输,则该触发将被忽略。

此触发功能可用于支持 DMA 传输的任何外设,并且对两种情况最有用:

  • 定期轮询特定总线上的外部设备
    例如,将 SPI 的发送端分配给具有触发器的 DMA 通道。设置完成后,SPI 将请求 DMA 传输,大概来自内存,只要其发送缓冲区为空。通过在该通道上使用触发器,可以每 5 μs 自动执行一次 SPI 传输。在SPI的接收端,可以配置SPI和DMA将接收数据传输到内存中,有效地实现了一种无需处理器干预就可以周期性地从外部设备读取数据并将结果传输到内存中的方法。

  • 使用 GPIO 端口驱动或采样波形
    通过配置 DMA 将数据传输到一个或多个 GPIO 端口,可以使用存储在片上存储器中的表格数据创建复杂的波形。 相反,使用 DMA 从一个或多个 GPIO 端口定期传输数据,可以对复杂波形进行采样并将结果以表格形式存储在片上存储器中。

不含收起触发
Always-enabled DMA sources

除了可用作 DMA 源的外设外,还有 2 个额外的 DMA 源始终处于启用状态。
• 向/从 GPIO 执行 DMA 传输——从/向一个或多个 GPIO 引脚移动数据,或者不受限制(即尽可能快),或者定期(使用 DMA 触发功能)。
• 执行内存到内存的 DMA 传输——将数据从内存移动到内存,通常尽可能快,有时需要软件激活。
• 执行从内存到外部总线的 DMA 传输,反之亦然——类似于内存到内存的传输,这通常是尽快完成的。
• 任何需要软件激活的 DMA 传输——任何应该由软件明确启动的 DMA 传输。

寄存器

CHCFG
CHCFG

DMA请求源

在S32K146_features.h中定义了DMA通道请求源。

typedef enum {
   
    EDMA_REQ_DISABLED = 0U,
    EDMA_REQ_LPUART0_RX = 2U,
    EDMA_REQ_LPUART0_TX = 3U,
    EDMA_REQ_LPUART1_RX = 4U,
    EDMA_REQ_LPUART1_TX = 5U,
   //省略...
    EDMA_REQ_PORTC = 51U,
    EDMA_REQ_PORTD = 52U,
    EDMA_REQ_PORTE = 53U,
    EDMA_REQ_FLEXCAN0 = 54U,
    EDMA_REQ_FLEXCAN1 = 55U,
    EDMA_REQ_FLEXCAN2 = 56U,
    EDMA_REQ_LPTMR0 = 59U,
    EDMA_REQ_DMAMUX_ALWAYS_ENABLED0 = 62U,
    EDMA_REQ_DMAMUX_ALWAYS_ENABLED1 = 63U
} dma_request_source_t;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

DMAMUX操作

在edma_hw_access.h中实现了4个对CHCFG寄存器的操作

void DMAMUX_Init(DMAMUX_Type * base);
static inline void DMAMUX_SetChanne
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/144644
推荐阅读
  

闽ICP备14008679号