There is only one VINDEX register and
the value is overwritten each time a trigger is received. This means the user cannot
queue up multiple trigger events with unique VINDEX values. However, the
stored VINDEX value can be re-used by the DDS multiple times. For example, if
DDS_BURST=3, a single trigger event plays a specific waveform 4 times. Operation for
this example is detailed below:
- Assume the DDS is waiting for
a trigger and DDS_SYM[0]=0 (non-symmetric mode).
- Assume
DDS_VEC[80].VTRIG_MODE=1.
- TRIG[0] rises with
TRIG[4:1]=5. The DDS sets VINDEX=5*16=80. The DDS begins playback of vector
80 (one trigger is consumed and 3 trigger events are queued since
DDS_BURST=3).
- The DDS plays vector 80
through 83.
- DDS_VEC[83].LAST_VEC=1, so
the DDS jumps to DDS_VEC[VINDEX] (this is vector 80 since VINDEX has not
been changed). Since DDS_VEC[80].VTRIG_MODE=1, one trigger event is removed
from the queue.
- Vectors 80 through 83 are
played a total of 4 times (with zero gaps in the playback). After the fourth
playback, the trigger queue is empty, so the DDS stops (mutes) and waits for
a trigger again.