Datasheet

933
SAM3X / SAM3A [DATASHEET]
Atmel-11057C-ATARM-SAM3X-SAM3A-Datasheet_23-Mar-15
37.8.8.2 Block Length is Not Multiple of 4. (ROPT field in HSMCI_DMA register set to 0)
Two DMA Transfer descriptors are used to perform the HSMCI block transfer.
1. Use the previous step to configure the HSMCI to perform a READ_MULTIPLE_BLOCK command.
2. Issue a READ_MULTIPLE_BLOCK command.
3. Program the DMA Controller to use a list of descriptors.
a.Read the channel register to choose an available (disabled) cha nnel.
b.Clear any pending interrupts on the channel from the previous DMAC transfer by reading the
DMAC_EBCISR register.
c. For every block of data repeat the following procedure:
d. Program the channel registers in the Memory for the firs t descriptor. This descriptor will be word ori-
ented. This descriptor is re
ferred to as L
LI_W(n) standing for LLI word oriented transfer for block n.
e. The LLI_W(n).DMAC_SADDRx field in memory must be set with the starting address of the
HSMCI_FIFO address.
f. The LLI_W(n).DMAC_DADDRx field in the memory must be word aligned.
g. Program LLI_W(n).DMAC_CTRLAx with the following field’s values:
–DST_WIDTH is set to WORD.
SRC_WIDTH is set to WORD.
SCSIZE must be set according to the value of HSMCI_DMA, CHKSIZE field.
–BTSIZE is programmed with block_length/4. If BTSIZE is z
e
ro, this descriptor is skipped later.
h. Program LLI_W(n).DMAC_CTRLBx with the following field’s values:
–DST_INCR is set to INCR.
SRC_INCR is set to INCR.
–FC field is programmed with peripheral to memory flow control mode.
SRC_DSCR is set to 0 (descriptor fetch is enabled for the SRC).
–DST_DSCR is set to TRUE (descriptor fetch is disabled for the DST).
–DIF and SIF are set with their respective layer ID. If SIF is different from DIF, the DMA Controller is
able t
o prefetch data and wr
ite HSMCI simultaneously.
i. Program LLI_W(n).DMAC_CFGx register for channel x with the following field’s values:
–FIFOCFG defines the watermark of the DMA channel FIFO.
–DST_REP is set to zero. Address are contiguous.
SRC_H2SEL is set to true to enable hardware handshaking on the destination.
SRC_PER is programmed with the hardware handshaking ID of the tar
geted HSMCI
Host
Controller.
j. Program LLI_W(n).DMAC_DSCRx with the address of LLI_B(n) descriptor. And set the DSCRx_IF to
the AHB Layer ID. This operation actually links the Word oriented descriptor on the second byte ori-
ented descriptor. When block_length[1:0] is equal to 0 (multiple of 4) LLI_W(n).DMAC_DSCRx points
to 0, only LLI_W(n) is relevant.
k. Program the channel registers in the Memory for the second descriptor. This descriptor will be byte
oriented. This descriptor is referred to as LLI_B(n), standing for LLI Byte oriented.
l. The LLI_B(n).DMAC_SADDRx field in memory must be set with the s
tarting address of the
HSMCI_FIFO address.
m. The LLI_B(n).DMAC_DADDRx is not relevant if previous word aligned descriptor was enabled. If 1, 2
or 3 bytes are transferred, that address is user defined and not word aligned.
n. Program LLI_B(n).DMAC_CTRLAx with the following field’s values:
–DST_WIDTH is set to BYTE.