Classes | |
struct | lld_view0 |
Structure for storing parameters for DMA view0 that can be performed by the DMA Master transfer. More... | |
struct | lld_view1 |
Structure for storing parameters for DMA view1 that can be performed by the DMA Master transfer. More... | |
struct | lld_view2 |
Structure for storing parameters for DMA view2 that can be performed by the DMA Master transfer. More... | |
struct | lld_view3 |
Structure for storing parameters for DMA view3 that can be performed by the DMA Master transfer. More... | |
struct | xdmac_channel_config_t |
Functions | |
static void | xdmac_channel_disable (Xdmac *xdmac, uint32_t channel_num) |
Disables the relevant channel of given XDMAC. More... | |
static void | xdmac_channel_disable_interrupt (Xdmac *xdmac, uint32_t channel_num, uint32_t mask) |
Disable interrupt with mask on the relevant channel of given XDMA. More... | |
static void | xdmac_channel_enable (Xdmac *xdmac, uint32_t channel_num) |
enables the relevant channel of given XDMAC. More... | |
static void | xdmac_channel_enable_interrupt (Xdmac *xdmac, uint32_t channel_num, uint32_t mask) |
Enable interrupt with mask on the relevant channel of given XDMA. More... | |
static void | xdmac_channel_enable_no_cache (Xdmac *xdmac, uint32_t channel_num) |
enables the relevant channel of given XDMAC without invalidating data cache. More... | |
static uint32_t | xdmac_channel_get_interrupt_mask (Xdmac *xdmac, uint32_t channel_num) |
Get interrupt mask for the relevant channel of given XDMA. More... | |
static uint32_t | xdmac_channel_get_interrupt_status (Xdmac *xdmac, uint32_t channel_num) |
Get interrupt status for the relevant channel of given XDMA. More... | |
static uint32_t | xdmac_channel_get_status (Xdmac *xdmac) |
Get Global channel status of given XDMAC. More... | |
static void | xdmac_channel_read_suspend (Xdmac *xdmac, uint32_t channel_num) |
Suspend the relevant channel's read. More... | |
static void | xdmac_channel_readwrite_resume (Xdmac *xdmac, uint32_t channel_num) |
Resume the relevant channel's read & write. More... | |
static void | xdmac_channel_readwrite_suspend (Xdmac *xdmac, uint32_t channel_num) |
Suspend the relevant channel's read & write. More... | |
static void | xdmac_channel_set_block_control (Xdmac *xdmac, uint32_t channel_num, uint32_t blen) |
Set block length for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_config (Xdmac *xdmac, uint32_t channel_num, uint32_t config) |
Set configuration for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_datastride_mempattern (Xdmac *xdmac, uint32_t channel_num, uint32_t dds_msp) |
Set the relevant channel's data stride memory pattern of given XDMA. More... | |
static void | xdmac_channel_set_descriptor_addr (Xdmac *xdmac, uint32_t channel_num, uint32_t desc_addr, uint8_t ndaif) |
Set next descriptor's address & interface for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_descriptor_control (Xdmac *xdmac, uint32_t channel_num, uint32_t config) |
Set next descriptor's configuration for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_destination_addr (Xdmac *xdmac, uint32_t channel_num, uint32_t dst_addr) |
Set destination address for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_destination_microblock_stride (Xdmac *xdmac, uint32_t channel_num, uint32_t dubs) |
Set the relevant channel's destination microblock stride of given XDMA. More... | |
static void | xdmac_channel_set_microblock_control (Xdmac *xdmac, uint32_t channel_num, uint32_t ublen) |
Set microblock length for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_source_addr (Xdmac *xdmac, uint32_t channel_num, uint32_t src_addr) |
Set source address for the relevant channel of given XDMA. More... | |
static void | xdmac_channel_set_source_microblock_stride (Xdmac *xdmac, uint32_t channel_num, uint32_t subs) |
Set the relevant channel's source microblock stride of given XDMA. More... | |
static void | xdmac_channel_software_flush_request (Xdmac *xdmac, uint32_t channel_num) |
Set software flush request on the relevant channel. More... | |
static void | xdmac_channel_software_request (Xdmac *xdmac, uint32_t channel_num) |
Set software transfer request on the relevant channel. More... | |
static void | xdmac_channel_write_suspend (Xdmac *xdmac, uint32_t channel_num) |
Suspend the relevant channel's write. More... | |
void | xdmac_configure_transfer (Xdmac *xdmac, uint32_t channel_num, xdmac_channel_config_t *p_cfg) |
Configure DMA for a transfer. More... | |
static void | xdmac_disable_interrupt (Xdmac *xdmac, uint32_t channel_num) |
Disables XDMAC global interrupt. More... | |
static void | xdmac_enable_interrupt (Xdmac *xdmac, uint32_t channel_num) |
Enables XDMAC global interrupt. More... | |
static uint32_t | xdmac_get_arbiter (Xdmac *xdmac) |
Get XDMAC global weighted arbiter configuration. More... | |
static uint32_t | xdmac_get_config (Xdmac *xdmac) |
Get XDMAC global configuration. More... | |
static uint32_t | xdmac_get_interrupt_mask (Xdmac *xdmac) |
Get XDMAC global interrupt mask. More... | |
static uint32_t | xdmac_get_interrupt_status (Xdmac *xdmac) |
Get XDMAC global interrupt status. More... | |
static uint32_t | xdmac_get_software_request_status (Xdmac *xdmac) |
Get software transfer status of the relevant channel. More... | |
static uint32_t | xdmac_get_type (Xdmac *xdmac) |
Get XDMAC global type. More... | |
This driver for Atmel® | SMART SAM XDMA Controller (XDMAC) is a AHB-protocol central direct memory access controller. It performs peripheral data transfer and memory move operations over one or two bus ports through the unidirectional communication channel. This is a driver for the configuration, enabling, disabling, and use of the XDMAC peripheral.
Devices from the following series can use this module:
The outline of this documentation is as follows:
There are no prerequisites for this module.
The DMA Controller (XDMAC) is a AHB-protocol central direct memory access controller. It performs peripheral data transfer and memory move operations over one or two bus ports through the unidirectional communication channel. Each channel is fully programmable and provides both peripheral or memory to memory transfer. The channel features are configurable at implementation time.
There are no special considerations for this module.
For extra information, see Extra Information for Extensible Direct Memory Access Controller Driver. This includes:
For a list of examples related to this driver, see Examples for Direct Memory Access Controller Driver.
#define XDMAC_CHANNEL_HWID_AES_RX 38 |
Definition at line 149 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_AES_TX 37 |
Definition at line 148 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_AFEC0 35 |
Definition at line 146 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_AFEC1 36 |
Definition at line 147 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_DAC 30 |
Definition at line 142 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_HSMCI 0 |
DMA channel hardware interface number
Definition at line 112 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_PIOA 34 |
Definition at line 145 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_PWM0 13 |
Definition at line 125 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_PWM1 39 |
Definition at line 150 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_QSPI_RX 6 |
Definition at line 118 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_QSPI_TX 5 |
Definition at line 117 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SPI0_RX 2 |
Definition at line 114 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SPI0_TX 1 |
Definition at line 113 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SPI1_RX 4 |
Definition at line 116 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SPI1_TX 3 |
Definition at line 115 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SSC_RX 33 |
Definition at line 144 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_SSC_TX 32 |
Definition at line 143 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TC0 40 |
Definition at line 151 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TC1 41 |
Definition at line 152 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TC2 42 |
Definition at line 153 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TC3 43 |
Definition at line 154 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS0_RX 15 |
Definition at line 127 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS0_TX 14 |
Definition at line 126 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS1_RX 17 |
Definition at line 129 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS1_TX 16 |
Definition at line 128 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS2_RX 19 |
Definition at line 131 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_TWIHS2_TX 18 |
Definition at line 130 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART0_RX 21 |
Definition at line 133 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART0_TX 20 |
Definition at line 132 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART1_RX 23 |
Definition at line 135 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART1_TX 22 |
Definition at line 134 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART2_RX 25 |
Definition at line 137 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART2_TX 24 |
Definition at line 136 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART3_RX 27 |
Definition at line 139 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART3_TX 26 |
Definition at line 138 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART4_RX 29 |
Definition at line 141 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_UART4_TX 28 |
Definition at line 140 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART0_RX 8 |
Definition at line 120 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART0_TX 7 |
Definition at line 119 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART1_RX 10 |
Definition at line 122 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART1_TX 9 |
Definition at line 121 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART2_RX 12 |
Definition at line 124 of file drivers/xdmac/xdmac.h.
#define XDMAC_CHANNEL_HWID_USART2_TX 11 |
Definition at line 123 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDE (0x1u << 24) |
Definition at line 157 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDE_FETCH_DIS (0x0u << 24) |
Definition at line 158 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDE_FETCH_EN (0x1u << 24) |
Definition at line 159 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDEN (0x1u << 26) |
Definition at line 163 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDEN_UNCHANGED (0x0u << 26) |
Definition at line 164 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NDEN_UPDATED (0x1u << 26) |
Definition at line 165 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NSEN (0x1u << 25) |
Definition at line 160 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NSEN_UNCHANGED (0x0u << 25) |
Definition at line 161 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NSEN_UPDATED (0x1u << 25) |
Definition at line 162 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_Msk (0x3u << XDMAC_UBC_NVIEW_Pos) |
Definition at line 167 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_NDV0 (0x0u << XDMAC_UBC_NVIEW_Pos) |
Definition at line 168 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_NDV1 (0x1u << XDMAC_UBC_NVIEW_Pos) |
Definition at line 169 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_NDV2 (0x2u << XDMAC_UBC_NVIEW_Pos) |
Definition at line 170 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_NDV3 (0x3u << XDMAC_UBC_NVIEW_Pos) |
Definition at line 171 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_NVIEW_Pos 27 |
Definition at line 166 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_UBLEN | ( | value | ) | ((XDMAC_UBC_UBLEN_Msk & ((value) << XDMAC_UBC_UBLEN_Pos))) |
Definition at line 174 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_UBLEN_Msk (0xffffffu << XDMAC_UBC_UBLEN_Pos) |
Definition at line 173 of file drivers/xdmac/xdmac.h.
#define XDMAC_UBC_UBLEN_Pos 0 |
Definition at line 172 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Disables the relevant channel of given XDMAC.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
Definition at line 383 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Disable interrupt with mask on the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
[in] | mask | Interrupt mask. |
Definition at line 500 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
enables the relevant channel of given XDMAC.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
Definition at line 351 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Enable interrupt with mask on the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
[in] | mask | Interrupt mask. |
Definition at line 486 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
enables the relevant channel of given XDMAC without invalidating data cache.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
Definition at line 370 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get interrupt mask for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 513 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get interrupt status for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 526 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get Global channel status of given XDMAC.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 397 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Suspend the relevant channel's read.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 409 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Resume the relevant channel's read & write.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 448 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Suspend the relevant channel's read & write.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 435 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set block length for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
[in] | blen | Block length. |
Definition at line 627 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set configuration for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
[in] | config | Channel configuration. |
Definition at line 641 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set the relevant channel's data stride memory pattern of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
[in] | dds_msp | Data stride memory pattern. |
Definition at line 655 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set next descriptor's address & interface for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | DMA Channel number (range 0 to 23) |
[in] | desc_addr | Address of next descriptor. |
[in] | ndaif | Interface of next descriptor. |
Definition at line 583 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set next descriptor's configuration for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | DMA Channel number (range 0 to 23) |
[in] | config | Configuration of next descriptor. |
Definition at line 599 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set destination address for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | DMA Channel number (range 0 to 23) |
[in] | dst_addr | Destination address |
Definition at line 568 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set the relevant channel's destination microblock stride of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
[in] | dubs | Destination microblock stride. |
Definition at line 684 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set microblock length for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | DMA Channel number (range 0 to 23) |
[in] | ublen | Microblock length. |
Definition at line 613 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set source address for the relevant channel of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | DMA Channel number (range 0 to 23) |
[in] | src_addr | Source address |
Definition at line 554 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set the relevant channel's source microblock stride of given XDMA.
[out] | xdmac | Module hardware register base address pointer |
[in] | channel_num | XDMA Channel number (range 0 to 23) |
[in] | subs | Source microblock stride. |
Definition at line 669 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set software flush request on the relevant channel.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 539 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Set software transfer request on the relevant channel.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 461 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Suspend the relevant channel's write.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 422 of file drivers/xdmac/xdmac.h.
void xdmac_configure_transfer | ( | Xdmac * | xdmac, |
uint32_t | channel_num, | ||
xdmac_channel_config_t * | cfg | ||
) |
|
inlinestatic |
Disables XDMAC global interrupt.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 317 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Enables XDMAC global interrupt.
[out] | xdmac | Module hardware register base address pointer. |
[in] | channel_num | XDMA Channel number (range 0 to 23). |
Definition at line 305 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get XDMAC global weighted arbiter configuration.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 293 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get XDMAC global configuration.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 282 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get XDMAC global interrupt mask.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 328 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get XDMAC global interrupt status.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 339 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get software transfer status of the relevant channel.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 473 of file drivers/xdmac/xdmac.h.
|
inlinestatic |
Get XDMAC global type.
[out] | xdmac | Module hardware register base address pointer. |
Definition at line 271 of file drivers/xdmac/xdmac.h.