515
SAM4CP [DATASHEET]
43051E–ATPL–08/14
32-bit pointers define the access location in memory for the current and next transfer, whether it is for read (transmit) or
write (receive). 16-bit counters define the size of the current and next transfers. It is possible, at any moment, to read the
number of transfers remaining for each channel.
The PDC has dedicated status registers which indicate if the transfer is enabled or disabled for each channel. The status
for each channel is located in the associated peripheral status register. Transfers can be enabled and/or disabled by
setting TXTEN/TXTDIS and RXTEN/RXTDIS in the peripheral’s Transfer Control Register.
At the end of a transfer, the PDC channel sends status flags to its associated peripheral. These flags are visible in the
peripheral status register (ENDRX, ENDTX, RXBUFF, and TXBUFE). Refer to
Section 28.4.3
and to the associated
peripheral user interface.
The peripheral where a PDC transfer is configured must have its peripheral clock enabled. The peripheral clock must be
also enabled to access the PDC register set associated to this peripheral.
28.4.2 Memory Pointers
Each full-duplex peripheral is connected to the PDC by a receive channel and a transmit channel. Both channels have
32-bit memory pointers that point to a receive area and to a transmit area, respectively, in the target memory.
Each half-duplex peripheral is connected to the PDC by a bidirectional channel. This channel has two 32-bit memory
pointers, one for current transfer and the other for next transfer. These pointers point to transmit or receive data
depending on the operating mode of the peripheral.
Depending on the type of transfer (byte, half-word or word), the memory pointer is incremented respectively by 1, 2 or 4
bytes.
If a memory pointer address changes in the middle of a transfer, the PDC channel continues operating using the new
address.
28.4.3 Transfer Counters
Each channel has two 16-bit counters, one for the current transfer and the other one for the next transfer. These counters
define the size of data to be transferred by the channel. The current transfer counter is decremented first as the data
addressed by current memory pointer starts to be transferred. When the current transfer counter reaches zero, the
channel checks its next transfer counter. If the value of the next counter is zero, the channel stops transferring data and
sets the appropriate flag. If the next counter value is greater than zero, the values of the next pointer/next counter are
copied into the current pointer/current counter and the channel resumes the transfer, whereas next pointer/next counter
get zero/zero as values. At the end of this transfer the PDC channel sets the appropriate flags in the Peripheral Status
Register.
The following list gives an overview of how status register flags behave depending on the counters values:
ENDRX flag is set when the PDC Receive Counter register (PERIPH_RCR) reaches zero.
RXBUFF flag is set when both PERIPH_RCR and the PDC Receive Next Counter register (PERIPH_RNCR)
reach zero.
ENDTX flag is set when the PDC Transmit Counter register (PERIPH_TCR) reaches zero.
TXBUFE flag is set when both PERIPH_TCR and the PDC Transmit Next Counter register (PERIPH_TNCR) reach
zero.
These status flags are described in the Transfer Status Register (PERIPH_PTSR).
28.4.4 Data Transfers
The serial peripheral triggers its associated PDC channels’ transfers using transmit enable (TXEN) and receive enable
(RXEN) flags in the transfer control register integrated in the peripheral’s user interface.
When the peripheral receives an external data, it sends a Receive Ready signal to its PDC receive channel which then
requests access to the Matrix. When access is granted, the PDC receive channel starts reading the peripheral Receive
Holding Register (RHR). The read data are stored in an internal buffer and then written to memory.