Hardware Abstraction Layer (HAL)
DMA (Direct Memory Access)

General Description

DW (DataWire) is one of two DMA hardware implementations for CAT1 (PSoC™ 6).

DW is designed for low latency memory to peripheral or peripheral to memory transfers but can also perform memory to memory transfers and peripheral to peripheral transfers.

DMAC (Direct Memory Access Controller) is the second of two DMA hardware implementations for CAT1 (PSoC™ 6). It is also the implementation that is found on CAT2 (PMG/PSoC™ 4) devices. DMAC is designed with high memory bandwidth for large memory to memory transfers but can perform peripheral to memory, memory to peripheral, and peripheral to peripheral transfers.

Which DMA type is used is dependent on the exact hardware and number of DMA channels already in use. This implementation will attempt to use DMAC first for memory to memory transfers and Datawire otherwise but either type may be used.

Interconnect

For both DW and DMAC each channel has a single input and a single output trigger available. The input, when triggered, initiates a DMA transfer of the configured type (note that this also affects the type transferred by the SW triggering). For output, a trigger is generated when a DMA transfer of the configured type is completed. For DW and DMAC neither input nor output triggers can be disabled completely but the signals do not, of course, have to be connected through the interconnect.

User-provided data arrays requirements

CM7 cores in CAT1C devices support Data Cache. Data Cache line is 32 bytes. User needs to make sure that the source and destination buffer pointers points to 32 byte aligned data. User can use CY_ALIGN(32) macro for 32 byte alignment.

API Reference

 DMAC (Direct Memory Access Controller)
 Implementation specific interface for using the DMAC DMA peripheral.
 
 DW (Datawire)
 Implementation specific interface for using the Datawire DMA peripheral.
 

Macros

#define CYHAL_DMA_PRIORITY_DEFAULT   CYHAL_DMA_PRIORITY_LOW
 Default DMA channel priority.
 
#define CYHAL_DMA_PRIORITY_HIGH   0
 High DMA channel priority.
 
#define CYHAL_DMA_PRIORITY_MEDIUM   1
 Medium DMA channel priority.
 
#define CYHAL_DMA_PRIORITY_LOW   3
 Low DMA channel priority.