赞
踩
本文描述NXP S32K14x的DMAMUX、eDMA,分析其S32SDK,加深对S32K1 DMA的理解与使用。
S32K14x系列MCU有16个DMA通道,S32K11x系列只有4个DMA通道,而DMA请求却多达61个和多达两个常开槽,MADMUX实现将外设DMA请求(peripheral slots)指定到特定DMA通道(channels)。
前4个DMA通道具有触发功能,DMAMUX有16个独立的通道路由( channel routers)。
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 端口定期传输数据,可以对复杂波形进行采样并将结果以表格形式存储在片上存储器中。
除了可用作 DMA 源的外设外,还有 2 个额外的 DMA 源始终处于启用状态。
• 向/从 GPIO 执行 DMA 传输——从/向一个或多个 GPIO 引脚移动数据,或者不受限制(即尽可能快),或者定期(使用 DMA 触发功能)。
• 执行内存到内存的 DMA 传输——将数据从内存移动到内存,通常尽可能快,有时需要软件激活。
• 执行从内存到外部总线的 DMA 传输,反之亦然——类似于内存到内存的传输,这通常是尽快完成的。
• 任何需要软件激活的 DMA 传输——任何应该由软件明确启动的 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;
在edma_hw_access.h中实现了4个对CHCFG寄存器的操作
void DMAMUX_Init(DMAMUX_Type * base);
static inline void DMAMUX_SetChanne
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。