未验证 提交 138925be 编写于 作者: zhangzhen7758's avatar zhangzhen7758 提交者: GitHub

修复多串口的描述符被覆盖的问题 (#6051)

[bsp][HC32] 修复使用多串口的描述符被覆盖的问题
上级 5e0810e7
......@@ -545,18 +545,17 @@ static void hc32_dma_config(struct rt_serial_device *serial, rt_ubase_t flag)
DMA_Init(uart_dma->Instance, uart_dma->channel, &dma_init);
/* Initialize LLP */
static stc_dma_llp_descriptor_t llp_desc;
llp_init.u32State = DMA_LLP_ENABLE;
llp_init.u32Mode = DMA_LLP_WAIT;
llp_init.u32Addr = (uint32_t)&llp_desc;
llp_init.u32Addr = (uint32_t)&uart->config->llp_desc;
DMA_LlpInit(uart_dma->Instance, uart_dma->channel, &llp_init);
/* Configure LLP descriptor */
llp_desc.SARx = dma_init.u32SrcAddr;
llp_desc.DARx = dma_init.u32DestAddr;
llp_desc.DTCTLx = (dma_init.u32TransCount << DMA_DTCTL_CNT_POS) | (dma_init.u32BlockSize << DMA_DTCTL_BLKSIZE_POS);
llp_desc.LLPx = (uint32_t)&llp_desc;
llp_desc.CHCTLx = (dma_init.u32SrcAddrInc | dma_init.u32DestAddrInc | dma_init.u32DataWidth | \
uart->config->llp_desc.SARx = dma_init.u32SrcAddr;
uart->config->llp_desc.DARx = dma_init.u32DestAddr;
uart->config->llp_desc.DTCTLx = (dma_init.u32TransCount << DMA_DTCTL_CNT_POS) | (dma_init.u32BlockSize << DMA_DTCTL_BLKSIZE_POS);
uart->config->llp_desc.LLPx = (uint32_t)&uart->config->llp_desc;
uart->config->llp_desc.CHCTLx = (dma_init.u32SrcAddrInc | dma_init.u32DestAddrInc | dma_init.u32DataWidth | \
llp_init.u32State | llp_init.u32Mode | dma_init.u32IntEn);
/* Enable DMA interrupt */
......
......@@ -57,6 +57,7 @@ struct hc32_uart_config
struct hc32_uart_irq_config tx_irq;
#ifdef RT_SERIAL_USING_DMA
struct hc32_uart_rxto *rx_timeout;
stc_dma_llp_descriptor_t llp_desc;
struct dma_config *dma_rx;
struct hc32_uart_irq_config *tc_irq;
struct dma_config *dma_tx;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册