/* 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的传输完成后会循环目标地址,但实际现象是并没有 |
|