The Peripheral DMA Controller (PDC)
The PDC is a simple DMA controller which is typically used with relatively low-speed peripherals such as the USART or SPI modules.
A PDC channel is controlled through a set of I/O registers mapped into the address space of the peripheral it is connected to. These registers are typically mapped from offset 0x100 and onwards.
Describing a block of memory takes two parameters: A base address (pointer) and a size (counter). This pair of parameters is typically replicated four times: TX/RX
current pointer/counter and TX/RX
next pointer/counter. The
next pair is loaded into the
current pair whenever the
current block transfer is complete, i.e. the counter reaches zero. If the
current block is empty when the
next block is loaded, the parameters are loaded into the
current block immediately.
There is also a register for individually enabling/disabling the TX and RX parts of the channel and a register showing whether or not TX and RX is enabled.