Atmel Evaluation Kit AT91SAM9X25-EK AT91SAM9X25-EK Hoja De Datos

Los códigos de productos
AT91SAM9X25-EK
Descargar
Página de 1151
481
SAM9X25 [DATASHEET]
11054E–ATARM–10-Mar-2014
Replay mode
When buffer chaining using linked lists is the multi-buffer method of choice, and on successive buffers, the 
DMAC_DSCRx register in the DMAC is re-programmed using the following method:
Buffer chaining using linked lists
A buffer descriptor (LLI) consists of following registers, DMAC_SADDRx, DMAC_DADDRx, DMAC_DSCRx, 
DMAC_CTRLAx, DMAC_CTRLBx.These registers, along with the DMAC_CFGx register, are used by the DMAC to set 
up and describe the buffer transfer. 
31.4.4.1  Multi-buffer Transfers
Buffer Chaining Using Linked Lists
In this case, the DMAC re-programs the channel registers prior to the start of each buffer by fetching the buffer descriptor 
for that buffer from system memory. This is known as an LLI update.
DMAC buffer chaining is supported by using a Descriptor Pointer register (DMAC_DSCRx) that stores the address in 
memory of the next buffer descriptor. Each buffer descriptor contains the corresponding buffer descriptor 
(DMAC_SADDRx, DMAC_DADDRx, DMAC_DSCRx, DMAC_CTRLAx DMAC_CTRLBx).
To set up buffer chaining, a sequence of linked lists must be programmed in memory.
The DMAC_SADDRx, DMAC_DADDRx, DMAC_DSCRx, DMAC_CTRLAx and DMAC_CTRLBx registers are fetched 
from system memory on an LLI update. The updated content of the DMAC_CTRLAx register is written back to memory 
on buffer completion. 
 shows how to use chained linked lists in memory to define multi-buffer 
transfers using buffer chaining.
The Linked List multi-buffer transfer is initiated by programming DMAC_DSCRx with DSCRx(0) (LLI(0) base address) 
different from zero. Other fields and registers are ignored and overwritten when the descriptor is retrieved from memory. 
The last transfer descriptor must be written to memory with its next descriptor address set to 0.
Figure 31-5. Multi Buffer Transfer Using Linked List 
System Memory
SADDRx
= DSCRx(0) + 0x0
DADDRx
= DSCRx(0) + 0x4
CTRLAx
= DSCRx(0) + 0x8
CTRLBx
= DSCRx(0) + 0xC
DSCRx(1)
= DSCRx(0) + 0x10
SADDRx
= DSCRx(1) + 0x0
DADDRx
= DSCRx(1) + 0x4
CTRLBx
= DSCRx(1) + 0x8
CTRLBx
= DSCRx(1) + 0xC
DSCRx(2)
= DSCRx(1) + 0x10
DSCRx(0)
DSCRx(2)
(points to 0 if
LLI(1) is the last
transfer descriptor
DSCRx(1)
LLI(0)
LLI(1)