HC32L136 uart_dma例程疑问
华大技术支持,您好。我这边在使用HC32L136K8调试SDK“HC32L136_DDL_Rev1.2.0”中的uart_dma例程。
其中我看到串口的TX及RX的DMA硬件初始化的时候,RX部分的配置符合用户手册中的说明(红色标注)。
但是在TX部分,我看到代码中定义的是目标地址固定,源地址自增,但是这个在手册中描述的是硬件Burst,代码中却还是定义的硬件Block(绿色标注)。
这个问题是用户手册对于DMA模式的功能描述不全,还是例程中的错误使用呢?如果是例程出错,可否提供一份正确的参考。
这个和DMA的描述有什么关系???
UART rx接收,是从固定的接收寄存器到变量buff啊
UART tx发送,是从变量buff到固定的发送寄存器啊,
你再好好理一理!! 就用串口中断就可以了,串口使用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);
} 华大的DMA无法获取有效数据长度,这才是个问题啊,STM32有这个寄存器,华大的没有,所以华大的只能从DMA一次一个字节的取数据?这要DMA有什么用 维修超人 发表于 2020-9-23 16:53
华大的DMA无法获取有效数据长度,这才是个问题啊,STM32有这个寄存器,华大的没有,所以华大的只能从DMA一 ...
谁说不能获取数据的长度了!!!只要知道TC或者BC的初始值,再查询当前TC或者BC的初始值,就能知道当前传输了多少数据比如用ADT做空闲中断,接收了一部分数据,进入空闲中断后,查询TC值
初始设置是0x80,库函数自减1;TC寄存器是0x7F(串口传输,BC寄存器设置为0)
传输32字节之后,TC变成0x5F,和初始值相减不就是32个字节的数据吗?
martinhu 发表于 2020-9-24 09:18
谁说不能获取数据的长度了!!!只要知道TC或者BC的初始值,再查询当前TC或者BC的初始值,就能知道当前传 ...
定时器 什么时候启动呢
可以把这个例程发一下么 谢谢
页:
[1]