Address Generation
5-25
Direct Memory Access (DMA) Controller
5.7.4
Using a Frame Index to Reload Addresses
In an autoinitialized, single-frame block transfer, the FRAME INDEX can be
used in place of a reload register to recompute the next address. If the follow-
ing fields contain the values listed, a single frame transfer moves the ten bytes
from a static external address to alternating locations (skipping one byte be-
tween each two bytes):
-
SRC DIR = 00b, the static source address
-
DST DIR = 11b, the programmable index value
-
ELEMENT INDEX = 10b, the 2-byte destination stride
-
FRAME INDEX = –(9
×
2) = –18 = FFEEh, restart destination for the trans-
fer at the same location by moving 18 bytes.
5.7.5
Transferring a Large Single Block
ELEMENT COUNT can be used in conjunction with FRAME COUNT to allow
single-frame block transfers of more than 65 535 bytes. The product of ELE-
MENT COUNT and FRAME COUNT can form a larger effective element
count. The following must be performed:
-
If the address is to be adjusted using a programmable value (DIR = 11b),
FRAME INDEX must equal ELEMENT INDEX if the address adjustment is
determined by a DMA global index register. This applies to both source and
destination addresses. If the address is not to be adjusted by a program-
mable value, this constraint does not apply, because the same address ad-
justment occurs by default at element and frame boundaries.
-
Frame synchronization must be disabled (that is, FS must be set to 0 in the
DMA channel primary control register). This prevents requirements for syn-
chronization in the middle of the large block.
-
The number of elements in the first frame is Ei. The number of elements
in successive frames is ((F – 1)
×
Er). The effective element count is
((F – 1)
×
Er) + Ei
where:
F
= Initial value of FRAME COUNT
Er = ELEMENT COUNT reload value
Ei = Initial value of ELEMENT COUNT
Thus, to transfer 128K + 1 elements, you could set F to 5, Er to 32K, and
Ei to 1.