[技术问答] 求助hc32f460的dma重载模式如何配置,我的配置出错了

[复制链接]
 楼主| 发表于 2025-7-22 17:45 | 显示全部楼层 |阅读模式
    /* DMA1_CH3 Config */
    AOS_SetTriggerEventSrc(AOS_DMA1_3, EVT_SRC_USART2_RI);
    /* Base Config */
    (void)DMA_StructInit(&stcDmaInit);

    stcDmaInit.u32IntEn = DMA_INT_ENABLE;
    stcDmaInit.u32BlockSize = 1UL;
    stcDmaInit.u32TransCount = 4UL;
    stcDmaInit.u32DataWidth = DMA_DATAWIDTH_8BIT;
    stcDmaInit.u32DestAddr = (uint32_t)s_au8RecvData;
    stcDmaInit.u32SrcAddr = (uint32_t)&CM_USART2->RDR;
    stcDmaInit.u32SrcAddrInc = DMA_SRC_ADDR_FIX;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_INC;

    (void)DMA_Init(CM_DMA1, DMA_CH3, &stcDmaInit);
    /* Re_Config Config */
    (void)DMA_ReconfigStructInit(&stcDmaReconfigInit);

    stcDmaReconfigInit.u32CountMode = DMA_RC_CNT_DEST;
    stcDmaReconfigInit.u32SrcAddrMode = DMA_RC_SRC_ADDR_KEEP;
    stcDmaReconfigInit.u32DestAddrMode = DMA_RC_DEST_ADDR_RPT;

    (void)DMA_ReconfigInit(CM_DMA1, DMA_CH3, &stcDmaReconfigInit);

    DMA_ClearTransCompleteStatus(CM_DMA1, DMA_INT_TC_CH3);
    /* DMA channel enable */
    (void)DMA_ChCmd(CM_DMA1, DMA_CH3, ENABLE);

    /* DMA re_config trigger source set */
    AOS_SetTriggerEventSrc(AOS_DMA_RC, EVT_SRC_DMA1_TC3);
    /* DMA1 re_config enable */
    DMA_ReconfigCmd(CM_DMA1, ENABLE);
    /* DMA module enable */
    DMA_Cmd(CM_DMA1, ENABLE);
}
这样配置之后按理来说每次触发dma的传输完成后会循环目标地址,但实际现象是并没有
发表于 2025-7-31 16:10 | 显示全部楼层
可能是重载触发源绑定错误。
发表于 2025-7-31 16:12 | 显示全部楼层
重载触发源配置错误吧。。
发表于 2025-7-31 16:12 | 显示全部楼层
将AOS_SetTriggerEventSrc(AOS_DMA_RC, EVT_SRC_DMA1_TC3)改为绑定到独立硬件事件(如EVT_SRC_AOS1或定时器触发)。HC32F460的重载通常需要外部事件驱动,而非DMA自身中断。
发表于 2025-7-31 16:27 | 显示全部楼层
重载模式配置很重要
发表于 2025-7-31 17:11 | 显示全部楼层
重载模式选择不当?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 返回顶部 返回列表