以SPI+DMA举例,我认为SPI+DMA比较适合固定设备周期性读取数据,在DMA接收完成中断里开启下一次DMA读取可以极大解放CPU。但是用DMA发送会有些困难,因为使用了DMA那么SPI发送就不再是阻塞式,当下一次调用DMA发送函数时有可能上一次还没发送完(尤其是在for循环里调用SPI发送)需要判断当前的SPI总线是否忙碌,如果阻塞式等待SPI进入空闲状态那么使用DMA就没有了意义,如果非阻塞式等待那么逻辑就会复杂许多,如果一个总线挂载多个设备那么逻辑又会复杂一个维度。除非是大数据量且发送周期远大于传输时间,这样就可以把DMA发送当成普通发送来处理不需要再判忙了即解放了CPU又不会造成复杂的代码逻辑。
|