一、概述
本文將會介紹 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
評論