softreset 发表于 2020-4-22 17:36

HC32L136 uart_dma例程疑问

华大技术支持,您好。
我这边在使用HC32L136K8调试SDK“HC32L136_DDL_Rev1.2.0”中的uart_dma例程。
其中我看到串口的TX及RX的DMA硬件初始化的时候,RX部分的配置符合用户手册中的说明(红色标注)。
但是在TX部分,我看到代码中定义的是目标地址固定,源地址自增,但是这个在手册中描述的是硬件Burst,代码中却还是定义的硬件Block(绿色标注)。
这个问题是用户手册对于DMA模式的功能描述不全,还是例程中的错误使用呢?如果是例程出错,可否提供一份正确的参考。




martinhu 发表于 2020-4-22 18:15

这个和DMA的描述有什么关系???
UART rx接收,是从固定的接收寄存器到变量buff啊
UART tx发送,是从变量buff到固定的发送寄存器啊,
你再好好理一理!!

HC11425 发表于 2020-4-25 15:00

就用串口中断就可以了,串口使用DMA功能,Uart_EnableFunc(M0P_UART1,UartDmaRxFunc);            //使能DMA接收
源地址和目标地址,源地址就是串口的基地址,目标地址就是你要接收缓存的BUF。另外想请教一下,如何判断一包数据长度,寄存器里面没有这样的设置。
因为我现在的串口DMA无法获取有效数据长度。胡工,指点一下。我是华大代理商Mson



if(Uart_GetStatus(M0P_UART1, UartRC))         //UART1数据接收
    {
                        Uart_ClrStatus(M0P_UART1, UartRC);      //清中断状态位
//                        Dma_DisableChannel(DmaCh0);
                       
                        Dma_SetTransferCnt(DmaCh0,512);
                        Dma_SetDestinationAddress(DmaCh0,(uint32_t)&u8RxData);
                        Dma_SetSourceAddress(DmaCh0,0x40000100);
                        dma_inx = pstcDmaCfg->enSrcBcTcReloadCtl;//pstcDmaCfg->u16TransferCnt;
                        Uart_Rx_Flag = 0xF1;
                        ;
      
//                        Uart_ClrIsr(M0P_UART1);
//                        Dma_EnableChannel(DmaCh0);

    }

维修超人 发表于 2020-9-23 16:53

华大的DMA无法获取有效数据长度,这才是个问题啊,STM32有这个寄存器,华大的没有,所以华大的只能从DMA一次一个字节的取数据?这要DMA有什么用

martinhu 发表于 2020-9-24 09:18

维修超人 发表于 2020-9-23 16:53
华大的DMA无法获取有效数据长度,这才是个问题啊,STM32有这个寄存器,华大的没有,所以华大的只能从DMA一 ...

谁说不能获取数据的长度了!!!只要知道TC或者BC的初始值,再查询当前TC或者BC的初始值,就能知道当前传输了多少数据比如用ADT做空闲中断,接收了一部分数据,进入空闲中断后,查询TC值
初始设置是0x80,库函数自减1;TC寄存器是0x7F(串口传输,BC寄存器设置为0)

传输32字节之后,TC变成0x5F,和初始值相减不就是32个字节的数据吗?


迷惘186 发表于 2020-11-11 17:00

martinhu 发表于 2020-9-24 09:18
谁说不能获取数据的长度了!!!只要知道TC或者BC的初始值,再查询当前TC或者BC的初始值,就能知道当前传 ...

定时器 什么时候启动呢

可以把这个例程发一下么 谢谢
页: [1]
查看完整版本: HC32L136 uart_dma例程疑问