使用DMA接收uart的数据

 

背景:在调测兆易GD32E5XX系列MCU(cortex-m33内核)的过程中,遇到了一些问题,如下描述。(在开发过程中,主要使用到MCU的DAC/ADC/UART等功能)

问题1:使用DMA接收uart数据过程中,DMA中断只会进入一次,后面下发命令后,不能够进入中断。

原因:经过排查,由于把DMA配置为了Normal模式,对应位置为:寄存器DMA_CHxCTL的bit5设置为了0。(0:禁止循环模式,1:使能循环模式)

解决方案:

方法1:把DMA配置为循环接收模式,对应函数:dma_circulation_enable(DMA_CH2)。测试结果:OK。

方法2:如果不改为循环接收模式,在Nomal模式下是否可以实现循环接收呢?网上大哥说,可以通过重新设置计数器的值,来实现这个功能;下面就验证一下网上大哥的说法是否正确。

验证步骤:

1、进入DMA中断后,失能DMA;

2、查询计数寄存器 (DMA_CHxCNT)的值为0;

3、重新设置计数寄存器 (DMA_CHxCNT)的值为4;

4、使能DMA。

测试结果:再次收到命令时,可以再次进入DMA中断,网上大哥没有骗咱。

注意事项:当进入DMA中断后,需要清除DMA_INTC中的中断标识bit位,如果不清除的话,会一直进入中断。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值