背景:在调测兆易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位,如果不清除的话,会一直进入中断。