322
32072H–AVR32–10/2012
AT32UC3A3
Figure 19-5. Source Gather Transfer
Channel locking: Software can program a channel to keep the HSB master interface by locking
the arbitration for the master bus interface for the duration of a DMA transfer, block, or transac-
tion (single or burst).
Bus locking: Software can program a channel to maintain control of the System Bus bus by
asserting hlock for the duration of a DMA transfer, block, or transaction (single or burst). Chan-
nel locking is asserted for the duration of bus locking at a minimum.
FIFO mode: Special mode to improve bandwidth. When enabled, the channel waits until the
FIFO is less than half full to fetch the data from the source peripheral and waits until the FIFO is
greater than or equal to half full to send data to the destination peripheral. Thus, the channel can
transfer the data using System Bus bursts, eliminating the need to arbitrate for the HSB master
interface for each single System Bus transfer. When this mode is not enabled, the channel only
waits until the FIFO can transmit/accept a single System Bus transfer before requesting the
master bus interface.
Pseudo fly-by operation: Typically, it takes two System Bus cycles to complete a transfer, one
for reading the source and one for writing to the destination. However, when the source and des-
tination peripherals of a DMA transfer are on different System Bus layers, it is possible for the
DMACA to fetch data from the source and store it in the channel FIFO at the same time as the
DMACA extracts data from the channel FIFO and writes it to the destination peripheral. This
activity is known as pseudo fly-by operation. For this to occur, the master interface for both
source and destination layers must win arbitration of their HSB layer. Similarly, the source and
destination peripherals must win ownership of their respective master interfaces.
D11
D10
D9
D8
System Memory
A0 + 0x034
A0 + 0x030
A0 + 0x02C
A0 + 0x028
d11
d8
d7
d4
A0 + 0x020
A0 + 0x01C
A0 + 0x018
A0 + 0x014
D7
D6
D5
D4
D3
D2
D1
D0
A0 + 0x00C
A0 + 0x008
A0 + 0x004
A0
d3
d0
Gather Boundary A0 + 0x24
Gather Increment = 4
Data Stream
d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11
Gather Boundary A0 + 0x38
Gather Increment = 4
Gather Boundary A0 + 0x10
Gather Increment = 4
SGR.SGI * 4 = 0x4 (Gather Increment in bytes)
CTLx.SRC_TR_WIDTH = 3'b010 (32bit/8 = 4 bytes)
SGR.SGI = 1
SGR.SGC = 4