by ysapir » Wed Jul 31, 2013 4:28 pm
Please make the distinction between:
1. Normal SOURCE-DESTINATION DMA copy, where the DMA engine at the TRANSMITTER is active, and,
2. DMA-SLAVE mode, in which the DMA engine on the RECEIVER core is active (the source itself can be, but does not have to be a DMA process. Can be simple memcpy() as well).
In the former case, multiple source cores can DMA data on the destination core. They can write on different destination addresses, or on the same target buffer - where the ultimate data written on a memory location is the last to arrive. If so programmed, then when each of the source DMAs finish, it will generate the MSGMODE interrupt on the destination core. It is your responsibility to orchestrate this mess.
In the latter case, all sources write their data to a single destination address - the destination core's AUTO0DMA register. In this case, every incoming transaction advances the destination pointer to the next location in the memory, according to the DMASTRIDE parameter. Thus, in this case, the order of the incoming transaction is unpredicted and so will be the final buffer - interleaved in an unpredictable manner.