Enhanced Direct Memory Access (eDMA)
MPC5606S Microcontroller Reference Manual, Rev. 7
Freescale Semiconductor 471
Throughout this document, n is used to reference the channel number. Additionally, data sizes are defined
as byte (8-bit), halfword (16-bit), word (32-bit) and doubleword (64-bit).
15.2.2 Features
The DMA module supports the following features:
• All data movement via dual-address transfers: read from source, write to destination
— Programmable source, destination addresses, transfer size, plus support for enhanced
addressing modes
• Transfer control descriptor organized to support two-deep, nested transfer operations
—An inner data transfer loop defined by a “minor” byte transfer count
—An outer data transfer loop defined by a “major” iteration count
• Channel service request via one of three methods:
— Explicit software initiation
— Initiation via a channel-to-channel linking mechanism for continuous transfers
– Independent channel linking at end of minor loop and/or major loop
— Peripheral-paced hardware requests (one per channel)
— For all three methods, one service request per execution of the minor loop is required
• Support for fixed-priority and round-robin channel arbitration
• Channel completion reported via optional interrupt requests
— One interrupt per channel, optionally asserted at completion of major iteration count
— Error terminations are optionally enabled per channel, and logically summed together to form
a small number of error interrupt outputs
• Support for scatter/gather DMA processing
• Support for complex data structures
• Support to cancel transfers via software or hardware
The structure of the transfer control descriptor is fundamental to the operation of the DMA module. It is
defined below in a ‘C’ pseudo-code specification, where int refers to a 32-bit variable (unless noted
otherwise) and short is a 16-bit variable.
NOTE
To compile these structures, change any periods '.' in the variable name to
underscores '_'.
typedef union {
struct { /* citer.e_link = 1 */
unsigned short citer.linkch:6; /* link channel number, */
unsigned short citer:9; /* current (“major”) iteration count */
} minor_link_enabled; /* channel link at end of the minor loop */
struct { /* citer.e_link = 0 */
unsigned short citer:15; /* current (“major”) iteration count */
} minor_link_disabled; /* no linking at end of the minor loop */
} t_minor_link_citer;