Address Pointer and Transfer Control
958
SPRUHE8E – October 2012 – Revised November 2019
Copyright © 2012–2019, Texas Instruments Incorporated
C28 Direct Memory Access (DMA) Module
The value written into the shadow register will be loaded into the active register at the start of a
transfer. On a wrap condition, the active register will be incremented by the signed value in the
appropriate SRC/DST_WRAP_STEP register prior to being loaded into the active SRC/DST_ADDR
register.
For each channel, the transfer process can be controlled with the following size values:
Source and Destination Burst Size (BURST_SIZE): —
This specifies the number of words to be
transferred in a burst.
This value is loaded into the BURST_COUNT register at the beginning of each burst. The
BURST_COUNT decrements each word that is transferred and when it reaches a zero value, the
burst is complete, indicating that the next channel can be serviced. The behavior of the current
channel is defined by the ONE_SHOT bit in the MODE register. The maximum size of the burst is
dictated by the type of peripheral. For the ADC, the burst size could be all 16 registers (if all 16
registers are used). For a McBSP peripheral, the burst size is limited to 1 since there is no FIFO
and the receive or transmit data register must be loaded or copied every word transferred. For RAM
the burst size can be up to the maximum allowed by the BURST_SIZE register, which is 32.
Source and Destination Transfer Size (TRANSFER_SIZE): —
This specifies the number of bursts to be
transferred before per CPU interrupt (if enabled).
Whether this interrupt is generated at the beginning or the end of the transfer is defined in the
CHINTMODE bit in the MODE register. Whether the channel remains enabled or not after the
transfer is completed is defined by the CONTINUOUS bit in the MODE register. The
TRANSFER_SIZE register is loaded into the TRANSFER_COUNT register at the beginning of each
transfer. The TRANSFER_COUNT register keeps track of how many bursts of data the channel has
transferred and when it reaches zero, the DMA transfer is complete.
Source/Destination Wrap Size (SRC/DST_WRAP_SIZE)—
This specifies the number of bursts to be
transferred before the current address pointer wraps around to the beginning.
This feature is used to implement a circular addressing type function. This value is loaded into the
appropriate SRC/DST_WRAP_COUNT register at the beginning of each transfer. The
SRC/DST_WRAP_COUNT registers keep track of how many bursts of data the channel has
transferred and when they reaches zero, the wrap procedure is performed on the appropriate
source or destination address pointer. A separate size and count register is allocated for source
and destination pointers. To
disable
the wrap function, assign the value of these registers to be
larger than the TRANSFER_SIZE.
NOTE:
The value written to the SIZE registers is one less than the intended size. So, to transfer
three 16-bit words, the value 2 should be placed in the SIZE register.
Regardless of the state of the DATASIZE bit, the value specified in the SIZE registers are for
16-bit addresses. So, to transfer three 32-bit words, the value 5 should be placed in the SIZE
register.
For each source/destination pointer, the address changes can be controlled with the following step values:
Source/Destination Burst Step (SRC/DST_BURST_STEP)—
Within each burst transfer, the address
source and destination step sizes are specified by these registers.
This value is a signed 2's compliment number so that the address pointer can be incremented or
decremented as required. If no increment is desired, such as when accessing the McBSP data
receive or transmit registers, the value of these registers should be set to zero.
Source/Destination Transfer Step (SRC/DST_TRANSFER_STEP)—
This specifies the address offset to
start the next burst transfer after completing the current burst transfer.
This is used in cases where registers or data memory locations are spaced at constant intervals.
This value is a signed 2's compliment number so that the address pointer can be incremented or
decremented as required.