SemiDrive E3 MCAL 開發系列(11)– Dma 模塊的使用

一、概述

本文將會介紹 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_FIFO_D

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

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論