ARM Technical Support Knowledge Articles

PL330 scatter-gather implementation without manager thread

Applies to: PL330 AXI DMA Controller

Scenario

Is it possible to do scatter-gather in PL330 without using the manager thread?

Answer

Yes, it is. However, it depends on how scatter-gather is defined. Once the channel
is started, then the behaviour of that channel, including
scatter-gather, is defined entirely by the instructions it executes.
Starting the channel can be done by either the manager thread or by programming 
the debug instruction registers via the APB bus.

From this point on, scatter-gather can take two basic forms. One way to
implement it is to indicate to the processor via an interrupt when the
thread is completed so that the processor can program a new thread but,
obviously, this requires intervention from the processor or some other
external agent. The other basic method is to program all the threads
'up-front' before starting the channel. This way, the scatter-gather
transfers could complete without further intervention by the processor.
Within these two schemes there are, of course, many variations.
Below is some pseudo-code showing how this could be implemented; it reads continuously from a incrementing memory address and writes to a 
double-buffer:

  DMAMOV SAR SRC_ADDR
  DMAMOV CCR ...
  DMALPFE
  DMAMOV DAR BUFFER_A
  DMALD
  DMAST
  ...
  DMASEV E0
  DMAMOV DAR BUFFER_B
  DMALD
  DMAST
  ...
  DMASEV E1
  DMALPEND

The events E0 and E1 could be used to signal an interrupt to another system component or an 
event to another DMA channel to let it know that the buffer has been filled.


Rate this article

[Bad]
|
|
[Good]
Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential