解决HC32F460 DMA 通道使能冲突的一种方法。
从HC32F460勘误表可以看到,这一系列的DMA使能寄存器各通道间由于非原子性操作可能导致冲突。这一系列的DMA是有链表功能的,因此我们可以用链表来解决这一问题。一般我们DMA都是用于大数据量通信时使用的,就分为接收和发送两种情况。接收的话,我们可以通过环形链表来实现,通过超时来让用户去获取数据长度,再处理数据。而发送的话,当通过链表发送,发送完成用空链表停止发送,下次发送再通过软件发送一个数据来启动。这里以UART为例做了的例子。附件是代码,供参考。 |