RM0046 Enhanced Direct Memory Access (eDMA)
Doc ID 16912 Rev 5 419/936
EDMA_ERQR, channel service requests are initiated by the slave device (set ERQR after
TCD; TCD.START = 0).
TCD.CITER = TCD.BITER = 2
TCD.NBYTES = 16
TCD.SADDR = 0x1000
TCD.SOFF = 1
TCD.SSIZE = 0
TCD.SLAST = –32
TCD.DADDR = 0x2000
TCD.DOFF = 4
TCD.DSIZE = 2
TCD.DLAST_SGA = –32
TCD.INT_MAJ = 1
TCD.START = 0 (Initialize all other fields before writing this bit.)
All other TCD fields = 0
This generates the following sequence of events:
1. First hardware (eDMA peripheral request) request for channel service.
2. The channel is selected by arbitration for servicing.
3. eDMA engine writes: TCD.DONE = 0, TCD.START = 0, TCD.ACTIVE = 1.
4. eDMA engine reads: channel TCD data from local memory to internal register file.
5. The source to destination transfers execute as follows:
a) read_byte (0x1000), read_byte (0x1001), read_byte (0x1002), read_byte (0x1003)
b) write_word (0x2000) first iteration of the minor loop
c) read_byte (0x1004), read_byte (0x1005), read_byte (0x1006), read_byte (0x1007)
d) write_word (0x2004) second iteration of the minor loop
e) read_byte (0x1008), read_byte (0x1009), read_byte (0x100a), read_byte (0x100b)
f) write_word (0x2008) third iteration of the minor loop
g) read_byte (0x100c), read_byte (0x100d), read_byte (0x100e), read_byte (0x100f)
h) write_word (0x200c) last iteration of the minor loop
6. eDMA engine writes: TCD.SADDR = 0x1010, TCD.DADDR = 0x2010, TCD.CITER = 1.
7. eDMA engine writes: TCD.ACTIVE = 0.
8. The channel retires one iteration of the major loop.