本帖最后由 seanwood 于 2012-4-25 17:21 编辑
初步了解了一下DMA,请问以下认识对吗?
--------------------------------
F1的DMA有8个channel,有优先级。每个channel有3~5个触发源。每个触发源是或门关系。
channel的优先级是不是指:比如USART和ADC的DMA请求同时来,那就按channel的优先级来触发传输?
这些channel就象中断一样,是能同时用,只是有触发后的优先级问题,或许会被延后,但不会被丢失?
同个channel的几个触发源是或门关系,是不是指这些触发源不能同时使用这个channel?因为看到配置DMA时,每个channel只有一套DMA_PeripheralBaseAddr、MemoryBaseAddr之类的寄存器。
--------------------------------
F2/4的DMA有8个stream,每个stream有FIFO。每个stream有8个req_ch,还有通道选择器。
req_ch就是原先F1的触发源吧?只不过把或门换成了通道选择器,但还是不能同时用吧?因为DMA_PeripheralBaseAddr、MemoryBaseAddr之类的寄存器好像还是只有一套。
stream就是F1的channel?
stream通道FIFO想不到有什么用。我觉得req_ch只能通过通道选择器选择1个源,除非这个req_ch触发了一次stream传输后,在该次stream传输结束前,又触发了另一次传输。那么有FIFO可以不会丢弃后面那次触发。
是这样的吗?但是这种情况应该已经超出了设计的预想范围,属于有bug了吧?
--------------------------------
比如使用USART的TX DMA,想要发送10个字节。
启用了DMA ENABLE后开始传输,那个F1的触发源(F2/4的req_ch),是每个传输单位(比如每字节)触发一次,总共10次?还是启动时只触发了一次?
有高手可以解答一下吗?非常感谢 |