Configures the AXIDMA Controller block, channels and descriptors.
The functions and other declarations used in this driver are in cy_axidmac.h. You can include cy_pdl.h to get access to all functions and declarations in the PDL.
The AXIDMA Controller channel can be used in any project to transfer data without CPU intervention basing on a hardware trigger signal from another component.
The AXIDMA Controller block has a set of registers, a base hardware address, and supports multiple channels. Many API functions for the AXIDMAC driver require a base hardware address and channel number. Ensure that you use the correct hardware address for the AXIDMA Controller block in use.
Features:
- Multiple channels (device specific).
- Four priority levels for each channel.
- Descriptor chaining.
- Configurable source and destination addresses.
- 1D memory copy, 2D memory copy, 3D memory copy descriptor types are supported.
- Configurable input/output triggers and interrupts.
Configuration Considerations
To set up a AXIDMAC driver, initialize a descriptor, initialize and enable a channel, and enable the AXIDMAC block.
To set up a descriptor, provide the configuration parameters for the descriptor in the cy_stc_axidmac_descriptor_config_t structure. Then call the Cy_AXIDMAC_Descriptor_Init function to initialize the descriptor in SRAM. You can modify the source and destination addresses dynamically by calling Cy_AXIDMAC_Descriptor_SetSrcAddress and Cy_AXIDMAC_Descriptor_SetDstAddress.
To set up a AXIDMAC channel, provide a filled cy_stc_axidmac_channel_config_t structure. Call the Cy_AXIDMAC_Channel_Init function, specifying the channel number. Use Cy_AXIDMAC_Channel_Enable to enable the configured AXIDMAC channel.
Call Cy_AXIDMAC_Channel_Enable for each AXIDMAC channel in use.
When configured, another peripheral typically triggers the AXIDMAC channel. The trigger is connected to the AXIDMAC channel using the trigger multiplexer. The trigger multiplexer driver has a software trigger you can use in firmware to trigger the AXIDMAC channel. See the Trigger Multiplexer documentation.
The following is a simplified structure of the AXIDMAC driver API interdependencies in a typical user application:
NOTE: Even if a AXIDMAC channel is enabled, it is not operational until the AXIDMAC block is enabled using function Cy_AXIDMAC_Enable .
NOTE: If the AXIDMAC descriptor is configured to generate an interrupt, the interrupt must be enabled using the Cy_AXIDMAC_Channel_SetInterruptMask function for each AXIDMAC channel. NOTE: When DCache is enabled it is critical to clean the DCache right before calling Cy_AXIDMAC_Channel_Enable .Cleaning the cache too early or too late may result in a CY_AXIDMAC_INTR_SRC_BUS_ERROR interrupt.
Ensure cache maintenance operations are performed at the correct point in the sequence to avoid data coherency issues.
Scenario: AXIDMAC with DMA descriptors, DMA config descriptors, source and destination buffer stored in memory other then DTCM(CM55 private MEMORY) such as SOCMEM or FLASH
#define AXIDMAC_DESCRIPTOR CY_SECTION(".cy_socmem_data") cy_stc_axidmac_descriptor_t
#define DATACNT (8UL)
CY_SECTION(".cy_socmem_data") uint32_t src[DATACNT];
CY_SECTION(".cy_socmem_data") uint32_t dst[DATACNT];
{
.srcAddress = &src,
.dstAddress = &dst,
.mCount=1U,
.srcXincrement = 1U,
.dstXincrement = 1U,
.xCount = DATACNT,
.srcYincrement = 0U,
.dstYincrement = 0U,
.yCount = 1UL,
.nextDescriptor = &nextDescriptor,
};
void snippet_Cy_AXIDMAC_Enable(void)
{
{
}
{
}
}
__STATIC_INLINE void Cy_AXIDMAC_Enable(AXI_DMAC_Type *base)
Enables the AXIDMAC block.
Definition: cy_axidmac.h:690
__STATIC_INLINE void Cy_AXIDMAC_Channel_SetPriority(AXI_DMAC_Type *base, uint32_t channel, uint32_t priority)
The function is used to set a priority for the AXIDMAC channel.
Definition: cy_axidmac.h:1572
__STATIC_INLINE void Cy_AXIDMAC_Channel_Enable(AXI_DMAC_Type *base, uint32_t channel)
Enables a AXIDMAC channel.
Definition: cy_axidmac.h:1521
cy_en_axidmac_status_t Cy_AXIDMAC_Channel_Init(AXI_DMAC_Type *base, uint32_t channel, cy_stc_axidmac_channel_config_t const *config)
Initializes the AXIDMAC channel with a descriptor and other parameters.
Definition: cy_axidmac.c:131
__STATIC_INLINE void Cy_AXIDMAC_Channel_SetDescriptor(AXI_DMAC_Type *base, uint32_t channel, cy_stc_axidmac_descriptor_t const *descriptor)
Sets a descriptor as current for the specified AXIDMAC channel.
Definition: cy_axidmac.h:1497
cy_en_axidmac_retrigger_t retrigger
Specifies whether the AXIDMA controller should wait for the input trigger to be deactivated.
Definition: cy_axidmac.h:335
cy_stc_axidmac_descriptor_t * descriptor
The AXIDMAC descriptor associated with the channel being initialized.
Definition: cy_axidmac.h:362
bool bufferable
This parameter specifies whether a write transaction can complete.
Definition: cy_axidmac.h:365
bool enable
This parameter specifies if the channel is enabled after initializing.
Definition: cy_axidmac.h:364
This structure holds the initialization values for the AXIDMAC channel.
Definition: cy_axidmac.h:361
This structure is a configuration structure pre-initialized by user and passed as a parameter to the ...
Definition: cy_axidmac.h:334
AXIDMAC descriptor structure type.
Definition: cy_axidmac.h:286
cy_en_axidmac_status_t Cy_AXIDMAC_Descriptor_Init(cy_stc_axidmac_descriptor_t *descriptor, cy_stc_axidmac_descriptor_config_t const *config)
Initializes the descriptor structure in SRAM from a pre-initialized configuration structure.
Definition: cy_axidmac.c:44
@ CY_AXIDMAC_DESCR
One descriptor transfer.
Definition: cy_axidmac.h:203
@ CY_AXIDMAC_SUCCESS
Success.
Definition: cy_axidmac.h:227
@ CY_AXIDMAC_RETRIG_IM
Retrigger immediately.
Definition: cy_axidmac.h:210
@ CY_AXIDMAC_CHANNEL_ENABLED
Channel stays enabled.
Definition: cy_axidmac.h:220
@ CY_AXIDMAC_2D_MEMORY_COPY
2D Memory copy
Definition: cy_axidmac.h:194
Scenario: AXIDMAC with DMA descriptors, DMA config descriptors, source and destination buffer stored in DTCM memory (CM55 private MEMORY), in this case address need to be remap to external master mapped address
#define DATACNT (8UL)
uint32_t src_data[DATACNT];
uint32_t dst_data[DATACNT];
{
.srcAddress = &src_data,
.dstAddress = &dst_data,
.mCount=1U,
.srcXincrement = 1U,
.dstXincrement = 1U,
.xCount = DATACNT,
.srcYincrement = 0U,
.dstYincrement = 0U,
.yCount = 1UL,
.nextDescriptor = &nextDescriptor_local,
};
{
}
channelConfig.
descriptor = &firstDescriptor_local;
{
}
cy_stc_axidmac_descriptor_t * nextDescriptor
The next descriptor to chain after completion.
Definition: cy_axidmac.h:356
__STATIC_INLINE void Cy_AXIDMAC_Descriptor_SetSrcAddress(cy_stc_axidmac_descriptor_t *descriptor, void const *srcAddress)
Sets the source address parameter for the specified descriptor.
Definition: cy_axidmac.h:832
__STATIC_INLINE void Cy_AXIDMAC_Descriptor_SetDstAddress(cy_stc_axidmac_descriptor_t *descriptor, void const *dstAddress)
Sets the destination address parameter for the specified descriptor.
Definition: cy_axidmac.h:876
More Information.
See the AXIDMAC chapter of the device technical reference manual (TRM).