Information
DMA Controller (DMAC)
MPC8308 PowerQUICC II Pro Processor Reference Manual, Rev. 1
Freescale Semiconductor 12-33
12.8 Channel Linking
Channel linking (or chaining) is a mechanism where one channel sets the TCD.start bit of another channel
(or itself), and initiates a service request for that channel. This operation is automatically performed by the
DMA engine at the conclusion of the major or minor loop when properly enabled.
The minor loop channel linking occurs at the completion of the minor loop (or one iteration of the major
loop). The TCD.citer.e_link field determines if a minor loop link is requested. When enabled, the channel
link is made after each iteration of the major loop except for the last. When the major loop is exhausted,
only the major loop channel link fields are used to determine if a channel link should be made. For
example, with the initial fields of:
• TCD.citer.e_link = 1
• TCD.citer.linkch = 0xC
• TCD.citer value = 0x4
• TCD.major.e_link = 1
• TCD.major.linkch = 0x7
With the bits set as mentioned above, the DMA operation executes as:
1. minor loop done -> set channel 12 TCD.start bit
2. minor loop done -> set channel 12 TCD.start bit
3. minor loop done -> set channel 12 TCD.start bit
4. minor loop done, major loop done -> set channel 7 TCD.start bit
When minor loop linking is enabled (TCD.citer.e_link = 1), the TCD.citer field uses a nine bit vector to
form the current iteration count. When minor loop linking is disabled (TCD.citer.e_link = 0), the
TCD.citer field uses a 15 bit vector to form the current iteration count. The bits associated with the
TCD.citer.linkch field are concatenated onto the citer value to increase the range of the citer.
NOTE
The TCD.citer.e_link bit and the TCD.biter.e_link bit must equal or a
configuration error is reported. The citer and biter vector widths must be
equal in order to calculate the major loop, half-way done interrupt point.
12.9 Programming during channel execution
This section provides recommended methods to change the programming model during channel execution.
12.9.1 Dynamic priority changing
The following options are recommended for dynamically changing channel priority levels:
• Switch to round-robin channel arbitration mode, change the channel priorities, and then switch
back to fixed arbitration mode.
• Disable all the channels, change the channel priorities, and then enable the appropriate channels.