4
Data Transfer
4 – 3
The address generators support both linear addressing and circular
addressing. The value of the L register corresponding to an I register (for
example, L0 would correspond to I0) determines which addressing scheme is used
for that I register. For circular buffer addressing, the L register is initialized
with length of the buffer. For linear addressing, the modulus logic is
disabled by setting the corresponding L register to zero.
Each time an I register is selected, the corresponding L register provides
the modulus logic with the length information. If the sum of the M register
and the I register crosses the buffer boundary, the modified I register
value is calculated by the modulus logic using the L register value.
All data address generator registers (I, M, and L registers) are loadable
and readable from the lower 14 bits of the DMD bus. Since I and L register
contents are considered to be unsigned, the upper 2 bits of the DMD bus
are padded with zeros when reading them. M register contents are signed;
when reading an M register, the upper 2 bits of the DMD bus are sign-
extended.
4.2.2
Indirect Addressing
The ADSP-2100 family processors allow two addressing modes for data
memory fetches: direct and register indirect. Indirect addressing is
accomplished by loading an address into an I (index) register and
specifying one of the available M (modify) registers.
The L registers are provided to facilitate wraparound addressing of
circular data buffers. A circular buffer is only implemented when an L
register is set to a non-zero value. For linear (i.e. non-circular) indirect
addressing, the L register corresponding to the I register used must be set
to zero.
Do not assume that the L registers are automatically initialized or may be
ignored; the I, M, and L registers contain random values following processor
reset. Your program must initialize the L registers corresponding to any I
registers it uses.
4.2.2.1 Initialize L Registers To 0 For Non-Circular Addressing
Setting an L register to a non-zero value activates the processor’s circular
addressing modulus logic. For linear indirect addressing you must set the
appropriate L register to zero to disable the modulus logic.