[技术问答] HC32F406的QSPI怎么开启DMA?大神请指点

[复制链接]
764|1
tianchengchou 发表于 2025-11-26 11:36 | 显示全部楼层 |阅读模式
现在想开启DMA提升读取flash速度,QSPI应该绑定DMA的什么触发源呢
onlycook 发表于 2025-11-28 12:57 | 显示全部楼层
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);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0