一、概述
本文将会介绍 SemiDrive E3 MCAL DMA 模块的简介以及基本配置。此外会结合实际操作的介绍,帮助新手快速了解并掌握这个模块的使用,文中的 MCAL 是基于 PTG3.0 的版本,开发板是官方的 E3640 网关板。
二、 DMA 模块简介
SemiDrvie E3 系列芯片中包含有 DMA_SF0、DMA_SF1、DMA_AP 3 个控制器,其中 DMA_SF0 和 DMA_SF1 有 24 个通道(注:E3206/E3205/E3106/E3104 有 16 个通道),DMA_AP 有 8 个通道。
其中 DMA_SF0 和 DMA_SF1 支持 Lockstep 模式,开启该模式后只能使用 DMA_SF0,DMA_SF1 负责校验。
另外裸机模式下 DMA 初始化时会根据中断向量表配置自动注册中断, OS 模式下则需要用户手动进行配置。
三、 DMA 模块的主要配置
下面介绍 DMA 模块的配置,配置分为两个部分,一个是通用配置,另一部分是 DMA 通道配置,通用配置比较简单,如下图所示,主要有两个选项。
图 3.1 DMA 模块通用配置
DmaLockstepMode:该选项用于配置是否使能 Lockstep 模式。
DmaDynamicMode:该选项用于配置是否使能动态通道配置,若需要用到多核,则不支持动态通道配置。
接着配置 DMA 通道,主要有以下选项:
DmaHwUnitId:配置 Dma 硬件单元,可选择 DMA_INSTANCE_SF0、DMA_INSTANCE_SF_1、DMA_INSTANCE_AP。
DmaChannelId:选择使用哪个 DMA 通道,DMA_INSTANCE_SF_0、DMA_INSTANCE_SF_1 最大可以使用的通道数为 24(选项值可以选择 0 ~23),DMA_INSTANCE_AP 最大可用的通道数为 8(选项值可以选择 0~7)。
DmaSubId:用来标志需要用到 Dma 的外设的功能,支持的功能列表如下所示:
Peripherals | DmaSubId | ||
ADC | ADC_FIFO0 | ||
ADC_FIFO1 | |||
ADC_FIFO2 | |||
ADC_FIFO3 | |||
SPI | SPI_TX | ||
SPI_RX | |||
PWM | PWM_FIFO_A | ||
PWM_FIFO_B | |||
PWM_FIFO_C | |||
PWM_CE | |||
ICU | ICU_CPT_A | ||
ICU_CPT_B
| |||
ICU_CPT_C | |||
ICU_CPT_D | |||
XSPI | XSPI_PORTA_RD | ||
XSPI_PORTA_WR | |||
XSPI_PORTB_RD | |||
XSPI_PORTB_WR |
表 3.1 E3 DMA 支持的外设
DmaResourceRef:选择配置在该 Dma 通道的外设信息,一定要和 DmaSubId 保持一致。
四、 实际操作
实际操作我们采用 MCAL 的例程,该例程是通过 DMA 实现内存和内存之间数据的搬运。具体操作步骤如下图所示,将 MCAL 测试例程烧录到板子后,接上串口,上电运行,输入测试命令“runcase 2801”,该测试命令会调用 dma_mem2mem_memcpy_test 这个测试函数。通过串口 LOG 可以看到 “dma memcpy success”时,则说明 DMA 搬运成功。具体测试代码如图 4.2 所示。
图 4.1 DMA 测试步骤
图 4.2 DMA 测试代码
五、 参考资料
1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08