DMAv2 driver APIs. More...
Data Structures | |
| struct | dma_linked_descriptor |
| Linked descriptor. More... | |
| struct | dma_channel_config |
| struct | dma_handshake_config |
Typedefs | |
| typedef struct dma_linked_descriptor | dma_linked_descriptor_t |
| Linked descriptor. More... | |
| typedef struct dma_channel_config | dma_channel_config_t |
| typedef struct dma_handshake_config | dma_handshake_config_t |
Enumerations | |
| enum | { dmav2_state_idle = 0 , dmav2_state_read , dmav2_state_read_ack , dmav2_state_write , dmav2_state_write_ack , dmav2_state_ll , dmav2_state_end , dmav2_state_end_wait } |
| enum | { status_dma_transfer_done = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 0 )) , status_dma_transfer_error = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 1 )) , status_dma_transfer_abort = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 2 )) , status_dma_transfer_ongoing = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 3 )) , status_dma_alignment_error = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 4 )) , status_dma_transfer_half_done = ((uint32_t)( status_group_dma )*1000U + (uint32_t)( 5 )) } |
Functions | |
| static void | dma_reset (DMAV2_Type *ptr) |
| Reset DMA. More... | |
| static hpm_stat_t | dma_enable_channel (DMAV2_Type *ptr, uint32_t ch_index) |
| Enable DMA channel. More... | |
| static void | dma_disable_channel (DMAV2_Type *ptr, uint32_t ch_index) |
| Disable DMA channel. More... | |
| static bool | dma_channel_is_enable (DMAV2_Type *ptr, uint32_t ch_index) |
| Check whether DMA channel is enable. More... | |
| static void | dma_set_priority (DMAV2_Type *ptr, uint32_t ch_index, uint8_t priority) |
| Set DMA channel priority. More... | |
| static void | dma_set_source_work_mode (DMAV2_Type *ptr, uint32_t ch_index, uint8_t mode) |
| Set DMA channel source work mode. More... | |
| static void | dma_set_destination_work_mode (DMAV2_Type *ptr, uint32_t ch_index, uint8_t mode) |
| Set DMA channel destination work mode. More... | |
| static void | dma_set_source_burst_size (DMAV2_Type *ptr, uint32_t ch_index, uint8_t burstsize) |
| Set DMA channel source burst size. More... | |
| static uint32_t | dma_get_remaining_transfer_size (DMAV2_Type *ptr, uint32_t ch_index) |
| Get DMA channel remaining transfer size. More... | |
| static void | dma_set_transfer_size (DMAV2_Type *ptr, uint32_t ch_index, uint32_t size_in_width) |
| Set DMA channel transfer size. More... | |
| static void | dma_set_source_width (DMAV2_Type *ptr, uint32_t ch_index, uint8_t width) |
| Set DMA channel source width. More... | |
| static void | dma_set_destination_width (DMAV2_Type *ptr, uint32_t ch_index, uint8_t width) |
| Set DMA channel destination width. More... | |
| static void | dma_set_transfer_src_width_byte_size (DMAV2_Type *ptr, uint32_t ch_index, uint8_t src_width, uint32_t size_in_byte) |
| Set DMA channel transfer width and size in byte. More... | |
| static void | dma_set_source_address (DMAV2_Type *ptr, uint32_t ch_index, uint32_t addr) |
| Set DMA channel source address. More... | |
| static void | dma_set_destination_address (DMAV2_Type *ptr, uint32_t ch_index, uint32_t addr) |
| Set DMA channel destination address. More... | |
| static void | dma_set_source_address_ctrl (DMAV2_Type *ptr, uint32_t ch_index, uint8_t addr_ctrl) |
| Set DMA channel source address control mode. More... | |
| static void | dma_set_destination_address_ctrl (DMAV2_Type *ptr, uint32_t ch_index, uint8_t addr_ctrl) |
| Set DMA channel destination address control mode. More... | |
| static void | dma_set_infinite_loop_mode (DMAV2_Type *ptr, uint32_t ch_index, bool infinite_loop) |
| Set DMA channel infinite loop mode. More... | |
| static void | dma_set_src_busrt_option (DMAV2_Type *ptr, uint32_t ch_index, uint8_t burst_opt) |
| Set DMA channel source burst option. More... | |
| static void | dma_set_handshake_option (DMAV2_Type *ptr, uint32_t ch_index, uint8_t handshake_opt) |
| Set DMA channel handshake option. More... | |
| static void | dma_abort_channel (DMAV2_Type *ptr, uint32_t ch_index_mask) |
| Abort channel transfer with mask. More... | |
| static uint32_t | dma_check_enabled_channel (DMAV2_Type *ptr, uint32_t ch_index_mask) |
| Check if channels are enabled with mask. More... | |
| static bool | dma_has_linked_pointer_configured (DMAV2_Type *ptr, uint32_t ch_index) |
| Check if linked pointer has been configured. More... | |
| static uint32_t | dma_check_transfer_status (DMAV2_Type *ptr, uint8_t ch_index) |
| Check transfer status. More... | |
| static void | dma_clear_transfer_status (DMAV2_Type *ptr, uint8_t ch_index) |
| Clear transfer status. More... | |
| static void | dma_enable_channel_interrupt (DMAV2_Type *ptr, uint8_t ch_index, int32_t interrupt_mask) |
| Enable DMA Channel interrupt. More... | |
| static void | dma_disable_channel_interrupt (DMAV2_Type *ptr, uint8_t ch_index, int32_t interrupt_mask) |
| Disable DMA Channel interrupt. More... | |
| static uint32_t | dma_check_channel_interrupt_mask (DMAV2_Type *ptr, uint8_t ch_index) |
| Check Channel interrupt master. More... | |
| void | dma_default_channel_config (DMAV2_Type *ptr, dma_channel_config_t *ch) |
| Get default channel config. More... | |
| hpm_stat_t | dma_setup_channel (DMAV2_Type *ptr, uint8_t ch_num, dma_channel_config_t *ch, bool start_transfer) |
| Setup DMA channel. More... | |
| hpm_stat_t | dma_config_linked_descriptor (DMAV2_Type *ptr, dma_linked_descriptor_t *descriptor, uint8_t ch_num, dma_channel_config_t *config) |
| Config linked descriptor function. More... | |
| hpm_stat_t | dma_start_memcpy (DMAV2_Type *ptr, uint8_t ch_num, uint32_t dst, uint32_t src, uint32_t size_in_byte, uint32_t burst_len_in_byte) |
| Start DMA copy. More... | |
| void | dma_default_handshake_config (DMAV2_Type *ptr, dma_handshake_config_t *config) |
| Get default handshake config. More... | |
| hpm_stat_t | dma_setup_handshake (DMAV2_Type *ptr, dma_handshake_config_t *pconfig, bool start_transfer) |
| config dma handshake function More... | |
| static bool | dma_is_idle (DMAV2_Type *ptr) |
| Check whether DMA is idle. More... | |
DMAv2 driver APIs.
| #define DMA_ADDRESS_CONTROL_DECREMENT (1U) |
| #define DMA_ADDRESS_CONTROL_FIXED (2U) |
| #define DMA_ADDRESS_CONTROL_INCREMENT (0U) |
| #define DMA_ALIGN_DOUBLE_WORD | ( | x | ) | (x & ~(7u)) |
| #define DMA_ALIGN_HALF_WORD | ( | x | ) | (x & ~(1u)) |
| #define DMA_ALIGN_WORD | ( | x | ) | (x & ~(3u)) |
| #define DMA_CHANNEL_IRQ_STATUS_ABORT | ( | x | ) | (uint32_t)(1 << x) |
| #define DMA_CHANNEL_IRQ_STATUS_ERROR | ( | x | ) | (uint32_t)(1 << x) |
| #define DMA_CHANNEL_IRQ_STATUS_HALF_TC | ( | x | ) | (uint32_t)(1 << x) |
| #define DMA_CHANNEL_IRQ_STATUS_TC | ( | x | ) | (uint32_t)(1 << x) |
| #define DMA_CHANNEL_PRIORITY_HIGH (1U) |
| #define DMA_CHANNEL_PRIORITY_LOW (0U) |
| #define DMA_CHANNEL_STATUS_ABORT (4U) |
| #define DMA_CHANNEL_STATUS_ERROR (2U) |
| #define DMA_CHANNEL_STATUS_HALF_TC (16U) |
| #define DMA_CHANNEL_STATUS_ONGOING (1U) |
| #define DMA_CHANNEL_STATUS_TC (8U) |
| #define DMA_HANDSHAKE_MODE_HANDSHAKE (1U) |
| #define DMA_HANDSHAKE_MODE_NORMAL (0U) |
| #define DMA_HANDSHAKE_OPT_ALL_TRANSIZE (1U) |
| #define DMA_HANDSHAKE_OPT_ONE_BURST (0U) |
| #define DMA_INTERRUPT_MASK_ABORT DMAV2_CHCTRL_CTRL_INTABTMASK_MASK |
| #define DMA_INTERRUPT_MASK_ALL |
| #define DMA_INTERRUPT_MASK_ERROR DMAV2_CHCTRL_CTRL_INTERRMASK_MASK |
| #define DMA_INTERRUPT_MASK_HALF_TC DMAV2_CHCTRL_CTRL_INTHALFCNTMASK_MASK |
| #define DMA_INTERRUPT_MASK_NONE (0U) |
| #define DMA_INTERRUPT_MASK_TERMINAL_COUNT DMAV2_CHCTRL_CTRL_INTTCMASK_MASK |
| #define DMA_NUM_TRANSFER_PER_BURST_1024T (10U) |
| #define DMA_NUM_TRANSFER_PER_BURST_128T (7U) |
| #define DMA_NUM_TRANSFER_PER_BURST_16T (4U) |
| #define DMA_NUM_TRANSFER_PER_BURST_1T (0U) |
| #define DMA_NUM_TRANSFER_PER_BURST_256T (8U) |
| #define DMA_NUM_TRANSFER_PER_BURST_2T (1U) |
| #define DMA_NUM_TRANSFER_PER_BURST_32T (5U) |
| #define DMA_NUM_TRANSFER_PER_BURST_4T (2U) |
| #define DMA_NUM_TRANSFER_PER_BURST_512T (9U) |
| #define DMA_NUM_TRANSFER_PER_BURST_64T (6U) |
| #define DMA_NUM_TRANSFER_PER_BURST_8T (3U) |
| #define DMA_SRC_BURST_OPT_CUSTOM_SIZE (1U) |
| #define DMA_SRC_BURST_OPT_STANDAND_SIZE (0U) |
| #define DMA_SUPPORT_64BIT_ADDR (0) |
| #define DMA_SWAP_MODE_BYTE (1U) |
| #define DMA_SWAP_MODE_HALF_WORD (2U) |
| #define DMA_SWAP_MODE_TABLE (0U) |
| #define DMA_SWAP_MODE_WORD (3U) |
| #define DMA_TRANSFER_WIDTH_BYTE (0U) |
| #define DMA_TRANSFER_WIDTH_DOUBLE_WORD (3U) |
| #define DMA_TRANSFER_WIDTH_HALF_WORD (1U) |
| #define DMA_TRANSFER_WIDTH_WORD (2U) |
| #define DMA_Type DMAV2_Type |
| typedef struct dma_channel_config dma_channel_config_t |
| typedef struct dma_handshake_config dma_handshake_config_t |
| typedef struct dma_linked_descriptor dma_linked_descriptor_t |
Linked descriptor.
It is consumed by DMA controlled directly
| anonymous enum |
| anonymous enum |
|
inlinestatic |
Abort channel transfer with mask.
| [in] | ptr | DMA base address |
| [in] | ch_index_mask | Mask of channels to be aborted |
|
inlinestatic |
Check whether DMA channel is enable.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
|
inlinestatic |
Check Channel interrupt master.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index to be checked |
|
inlinestatic |
Check if channels are enabled with mask.
| [in] | ptr | DMA base address |
| [in] | ch_index_mask | Mask of channels to be checked |
|
inlinestatic |
Check transfer status.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index to be checked |
| DMA_CHANNEL_STATUS_ONGOING | if transfer is still ongoing |
| DMA_CHANNEL_STATUS_ERROR | if any error occurred during transferring |
| DMA_CHANNEL_STATUS_ABORT | if transfer is aborted |
| DMA_CHANNEL_STATUS_TC | if transfer is finished without error |
| DMA_CHANNEL_STATUS_HALF_TC | if half transfer complete without error |
|
inlinestatic |
Clear transfer status.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index |
| hpm_stat_t dma_config_linked_descriptor | ( | DMAV2_Type * | ptr, |
| dma_linked_descriptor_t * | descriptor, | ||
| uint8_t | ch_num, | ||
| dma_channel_config_t * | config | ||
| ) |
Config linked descriptor function.
| [in] | ptr | DMA base address |
| [in] | descriptor | Linked descriptor pointer |
| [in] | ch_num | Target channel index to be configured |
| [in] | config | Descriptor config pointer |
| void dma_default_channel_config | ( | DMAV2_Type * | ptr, |
| dma_channel_config_t * | ch | ||
| ) |
Get default channel config.
| [in] | ptr | DMA base address |
| [in] | ch | Channel config |
| void dma_default_handshake_config | ( | DMAV2_Type * | ptr, |
| dma_handshake_config_t * | config | ||
| ) |
Get default handshake config.
| [in] | ptr | DMA base address |
| [in] | config | default config |
|
inlinestatic |
Disable DMA channel.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel to be disabled |
|
inlinestatic |
Disable DMA Channel interrupt.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index |
| [in] | interrupt_mask | Interrupt mask |
|
inlinestatic |
Enable DMA channel.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel to be enabled |
|
inlinestatic |
Enable DMA Channel interrupt.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index |
| [in] | interrupt_mask | Interrupt mask |
|
inlinestatic |
Get DMA channel remaining transfer size.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
|
inlinestatic |
Check if linked pointer has been configured.
| [in] | ptr | DMA base address |
| [in] | ch_index | Target channel index to be checked |
|
inlinestatic |
Check whether DMA is idle.
| [in] | ptr | DMA base address |
|
inlinestatic |
Reset DMA.
| [in] | ptr | DMA base address |
|
inlinestatic |
Set DMA channel destination address.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | addr | destination address |
|
inlinestatic |
Set DMA channel destination address control mode.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | addr_ctrl | destination address control mode |
|
inlinestatic |
Set DMA channel destination width.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | width | transfer destination width of the channel |
|
inlinestatic |
Set DMA channel destination work mode.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | mode | destination work mode |
|
inlinestatic |
Set DMA channel handshake option.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | handshake_opt | handshake option |
|
inlinestatic |
Set DMA channel infinite loop mode.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | infinite_loop | false - normal mode(single times mode); true - infinite loop mode(cycle mode) |
|
inlinestatic |
Set DMA channel priority.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | priority | dma priority |
|
inlinestatic |
Set DMA channel source address.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | addr | source address |
|
inlinestatic |
Set DMA channel source address control mode.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | addr_ctrl | source address control mode |
|
inlinestatic |
Set DMA channel source burst size.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | burstsize | source burst size when BURSTOPT is 0, please reference follows:
|
|
inlinestatic |
Set DMA channel source width.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | width | transfer source width of the channel |
|
inlinestatic |
Set DMA channel source work mode.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | mode | source work mode |
|
inlinestatic |
Set DMA channel source burst option.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | burst_opt | burst option |
|
inlinestatic |
Set DMA channel transfer size.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | size_in_width | transfer size of the channel. The width is current dma channel configured source width. Transfer total bytes are (size_in_width * source width). |
|
inlinestatic |
Set DMA channel transfer width and size in byte.
| [in] | ptr | DMA base address |
| [in] | ch_index | Index of the channel |
| [in] | src_width | transfer source width of the channel |
| [in] | size_in_byte | transfer size in byte of the channel. The dma transfer size is (size_in_byte >> src_width). |
| hpm_stat_t dma_setup_channel | ( | DMAV2_Type * | ptr, |
| uint8_t | ch_num, | ||
| dma_channel_config_t * | ch, | ||
| bool | start_transfer | ||
| ) |
Setup DMA channel.
| [in] | ptr | DMA base address |
| [in] | ch_num | Target channel index to be configured |
| [in] | ch | Channel config |
| [in] | start_transfer | Set true to start transfer |
| hpm_stat_t dma_setup_handshake | ( | DMAV2_Type * | ptr, |
| dma_handshake_config_t * | pconfig, | ||
| bool | start_transfer | ||
| ) |
config dma handshake function
| [in] | ptr | DMA base address |
| [in] | pconfig | dma handshake config pointer |
| [in] | start_transfer | Set true to start transfer |
| hpm_stat_t dma_start_memcpy | ( | DMAV2_Type * | ptr, |
| uint8_t | ch_num, | ||
| uint32_t | dst, | ||
| uint32_t | src, | ||
| uint32_t | size_in_byte, | ||
| uint32_t | burst_len_in_byte | ||
| ) |
Start DMA copy.
| [in] | ptr | DMA base address |
| [in] | ch_num | Target channel index |
| [in] | dst | Destination address |
| [in] | src | Source Address |
| [in] | size_in_byte | Size in byte |
| [in] | burst_len_in_byte | Burst length in byte |