8.2.1.2 8-Channel DMA Controller

The 8-channel DMA controller consists of eight instances of a single DMA channel, as shown in the preceding figure. Each channel can be configured to perform 8-bit, 16-bit, or 32-bit data transfers from the peripheral to memory, memory to peripheral, and memory to memory. Each DMA channel supports Ping-pong mode for continuous data transfer. To enable and use PDMA services, the AHB bus master matrix must configure the following 32-bit registers.

If bidirectional DMA of peripheral to memory (receive) and memory to peripheral (transmit) is desired, two channels must be programmed appropriately. In particular, the TRANSFER_SIZE fields in both the Table 8-7 registers must be programmed identically. The PDMA performs the correct byte lane adjustments appropriate to the address being used on the AHB. Efficient use of memory storage is achieved in this manner, even if only performing byte or 16-bit accesses to or from a peripheral. For example, when the PDMA is accessing peripherals, the lowest 8 or 16 bits of the data bus are always used for 8-bit or 16-bit transfers. For 32-bit transfers, the full 32-bits are used. It is possible to configure the data width of a transfer to be independent of the address increment. The address increment at both ends of the DMA transfer can be different, which is required when reading from a peripheral holding register (single address) and writing to memory incrementally (many addresses).

Sixteen possible channels are available to the PDMA, as listed below. Only eight are used simultaneously.

  • MMUART_0 to any MSS memory-mapped location
  • Any MSS memory-mapped location to MMUART_0
  • MMUART_1 to any MSS memory-mapped location
  • Any MSS memory-mapped location to MMUART_1
  • SPI_0 to any MSS memory-mapped location
  • Any MSS memory-mapped location to SPI_0
  • SPI_1 to any MSS memory-mapped location
  • Any MSS memory-mapped location to SPI_1
  • FPGA fabric peripheral on FIC_0 to any MSS memory-mapped location
  • Any MSS memory-mapped location to FPGA fabric peripheral on FIC_0
  • CAN to any MSS memory-mapped location
  • Any MSS memory-mapped location to CAN
  • FPGA fabric peripheral on FIC_1 to any MSS memory-mapped location
  • Any MSS memory-mapped location to FPGA fabric peripheral on FIC_1
  • COMM_BLK to any MSS memory-mapped location
  • Any MSS memory-mapped locations to COMM_BLK