Indexing Mode is enabled by setting
DDS_IMODE=1. Indexing Mode allows the TRIG[4:1] pins to select one of 16 locations
in the vector memory to jump to when the DDS is triggered by TRIG[0]. This allows
the user to have random access to 16 sections of vector memory (triggering one of
several different waveforms).
Any DSP channel can operate in indexing mode, but the user must configure the DSP
channel to be triggered by TRIG[0] by programming TRIG_TYPEn=4 and
TRIG_SELn=0. Multiple DSP channels can simultaneously operate in indexing
mode, but the DSP channels all share the TRIG[4:0] pins, so the user cannot uniquely
index the channels. Note that DSP channel 0 and 2 do not have access to as many
vectors and are therefore not good choices for the indexing mode. Channel 3 is
recommended for indexing mode so that 16 unique locations can be indexed. If the
user attempts to jump to a vector number that is larger than the number of vectors
allocated to the channel, the address is aliased back into the channel’s allocation.
In Indexing-Mode, vectors are processed normally, but with the following changes:
- Each time the DDS receives a trigger, the current value of TRIG[4:1] is
multiplied by 16 and stored in an internal register named VINDEX.
- If the DSP channel only has access to 128 vectors, then bit 7 of VINDEX is
ignored (address aliasing). If only 64 vectors are available, then bit 7 and 6
are both ignored.
- If a trigger is received while the processor is waiting for a trigger,
the VINDEX register is updated, and then the processor jumps to the vector
specified by VINDEX and immediately plays that vector. The trigger is consumed
if the new vector has VTRIG_MODE=1, otherwise the trigger is placed into the
trigger queue. If DDS_SYM=1, VINDEX is copied to VSYM (the vector processor
memorizes the starting index of symmetric playback so to decrement the index
later).
- If a trigger is received while the processor is not waiting for a
trigger, the VINDEX register is updated, and the trigger is placed into the
queue, but playback is not interrupted. The new value of VINDEX can be consumed
later (see following items).
- When DDS_SYM=0 (non-symmetric mode), and the processor completes a vector with
LAST_VEC=1, the processor jumps to the vector specified by VINDEX (instead of
setting the vector pointer to 0).
- 5. When DDS_SYM=1 (symmetric
mode), and the vector pointer is in the decrement phase, the vector pointer does
not decrement to VINDEX, but instead decrements to VSYM. Once the vector
specified by VSYM is completed, the symmetric sequence is complete, so the
processor jumps to the vector specified by VINDEX and sets VSYM=VINDEX (This
definition allows one symmetric sequence to be queued while another one is being
executed).