
SPRZ187B
TMS320VC5410A Silicon Errata
8
DMPREC
Advisory
Revision(s) Affected: Initial Silicon
Details: When updating the DE bits of the DMPREC register while one or more DMA channel transfers
are in progress, it is possible for the write to the DMPREC to cause an additional transfer on
one of the active channels.
The problem occurs when an active channel completes a transfer at the same time that the
user updates the DMPREC register. When the transfer completes, the DMA logic attempts to
clear the DE bit corresponding to the complete channel transfer, but the register is instead
updated with the CPU write (usually an ORM instruction) which can set the bit and cause an
additional transfer on the channel. Refer to the example below for further clarification:
Example:
DMPREC value = 00C1h, corresponding to the following channel activity:
Channel 0 – enabled and running. (DE0 = 1)
Channel 1 – disabled. (DE1 = 0)
Channel 2 – disabled. (DE2 = 0)
Channel 3 – disabled. (DE3 = 0)
Channel 4 – disabled. (DE4 = 0)
Channel 5 – disabled. (DE5 = 0)
If the following conditions occur simultaneously:
•Channel 0 transfer completes and DMA logic clears DE0 internally.
•User code attempts to enable another channel (e.g., ORM #2, DMPREC)
The user code will re-enable channel 0 (DMPREC value written = 00C3h), and an additional,
unintended transfer will begin on channel 0.
Workaround: There are a few conditions under which this problem does not occur. If all active DMA
channels are configured in ABU mode or in autoinitialization mode, then the problem does not
occur because the channels remain enabled until they are disabled by user code. The
problem is also avoided in applications that use only one DMA channel at a time.
Systems that use multiple DMA channels simultaneously in multiframe mode without
autoinitialization are most likely to have this problem. In such systems one of the following
methods can be used to avoid the problem:
•Always wait for all channels to complete existing transfers before re-enabling any
channels, and always enable all channels at the same time.
•Before enabling a channel, check the progress of any on-going transfers by reading
the element and frame counts of each active channel. If any active channel is within
two element transfers of completing a block transfer, then wait until the active channel
completes the block transfer before writing to the DMPREC register. Otherwise, if all
active channels have more than two element transfers left in a block transfer, it is safe
to update the DMPREC register.