c
#include "hc32f46x.h"
#include "hc32f46x_aos.h"
#include "hc32f46x_dma.h"
void DMA_QSPI_Init(void) {
stc_dma_init_t stcDmaInit;
// 使能DMA时钟
FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1, ENABLE);
// 初始化DMA通道
DMA_StructInit(&stcDmaInit);
stcDmaInit.u32IntEn = DMA_INT_DISABLE; // 禁用中断(若需使用中断,可配置为DMA_INT_ENABLE)
stcDmaInit.u32BlockSize = 1; // 数据块大小
stcDmaInit.u32TransCount = 1024; // 传输数据量
stcDmaInit.u32SrcAddr = (uint32_t)(&QSPI->DCOM); // 源地址(QSPI数据寄存器)
stcDmaInit.u32DestAddr = (uint32_t)g_aucRxBuffer; // 目标地址(接收缓冲区)
stcDmaInit.u32SrcAddrInc = DMA_SRC_ADDR_FIX; // 源地址固定
stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_INC; // 目标地址递增
stcDmaInit.u32DataWidth = DMA_DATAWIDTH_8BIT; // 数据宽度8位
DMA_Init(CM_DMA1, DMA_CH0, &stcDmaInit); // 初始化DMA通道
// 使能DMA通道
DMA_ChannelCmd(CM_DMA1, DMA_CH0, ENABLE);
// 配置AOS,将QSPI接收事件设置为DMA触发源
AOS_SetTriggerEventSrc(AOS_DMA1_0, EVT_SRC_QSPI_RX); // AOS_DMA1_0表示DMA1的通道0触发源
// 使能DMA模块
DMA_Cmd(CM_DMA1, ENABLE);
}
|