HPM SDK
HPMicro Software Development Kit
hpm_dma_drv.h File Reference
#include "hpm_common.h"
#include "hpm_soc_feature.h"
#include "hpm_dma_regs.h"

Go to the source code of this file.

Data Structures

struct  dma_linked_descriptor
 Linked descriptor. More...
 
struct  dma_channel_config
 
struct  dma_handshake_config
 

Macros

#define DMA_CHANNEL_PRIORITY_LOW   (0U)
 
#define DMA_CHANNEL_PRIORITY_HIGH   (1U)
 
#define DMA_NUM_TRANSFER_PER_BURST_1T   (0U)
 
#define DMA_NUM_TRANSFER_PER_BURST_2T   (1U)
 
#define DMA_NUM_TRANSFER_PER_BURST_4T   (2U)
 
#define DMA_NUM_TRANSFER_PER_BURST_8T   (3U)
 
#define DMA_NUM_TRANSFER_PER_BURST_16T   (4U)
 
#define DMA_NUM_TRANSFER_PER_BURST_32T   (5U)
 
#define DMA_NUM_TRANSFER_PER_BURST_64T   (6U)
 
#define DMA_NUM_TRANSFER_PER_BURST_128T   (7U)
 
#define DMA_NUM_TRANSFER_PER_BURST_256T   (8U)
 
#define DMA_NUM_TRANSFER_PER_BURST_512T   (9U)
 
#define DMA_NUM_TRANSFER_PER_BURST_1024T   (10U)
 
#define DMA_TRANSFER_WIDTH_BYTE   (0U)
 
#define DMA_TRANSFER_WIDTH_HALF_WORD   (1U)
 
#define DMA_TRANSFER_WIDTH_WORD   (2U)
 
#define DMA_TRANSFER_WIDTH_DOUBLE_WORD   (3U)
 
#define DMA_ALIGN_HALF_WORD(x)   (x & ~(1u))
 
#define DMA_ALIGN_WORD(x)   (x & ~(3u))
 
#define DMA_ALIGN_DOUBLE_WORD(x)   (x & ~(7u))
 
#define DMA_STATUS_ERROR_SHIFT   (0U)
 
#define DMA_STATUS_ABORT_SHIFT   (8U)
 
#define DMA_STATUS_TC_SHIFT   (16U)
 
#define DMA_CHANNEL_STATUS_ONGOING   (1U)
 
#define DMA_CHANNEL_STATUS_ERROR   (2U)
 
#define DMA_CHANNEL_STATUS_ABORT   (4U)
 
#define DMA_CHANNEL_STATUS_TC   (8U)
 
#define DMA_CHANNEL_IRQ_STATUS_ERROR(x)   (uint32_t)(1 << (DMA_STATUS_ERROR_SHIFT + x))
 
#define DMA_CHANNEL_IRQ_STATUS_ABORT(x)   (uint32_t)(1 << (DMA_STATUS_ABORT_SHIFT + x))
 
#define DMA_CHANNEL_IRQ_STATUS_TC(x)   (uint32_t)(1 << (DMA_STATUS_TC_SHIFT + x))
 
#define DMA_CHANNEL_IRQ_STATUS(x)
 
#define DMA_CHANNEL_IRQ_STATUS_GET_ALL_TC(x)   ((x) & (((0x01UL << DMA_SOC_CHANNEL_NUM) - 1) << DMA_STATUS_TC_SHIFT))
 
#define DMA_CHANNEL_IRQ_STATUS_GET_ALL_ABORT(x)   ((x) & (((0x01UL << DMA_SOC_CHANNEL_NUM) - 1) << DMA_STATUS_ABORT_SHIFT))
 
#define DMA_CHANNEL_IRQ_STATUS_GET_ALL_ERROR(x)   ((x) & (((0x01UL << DMA_SOC_CHANNEL_NUM) - 1) << DMA_STATUS_ERROR_SHIFT))
 
#define DMA_HANDSHAKE_MODE_NORMAL   (0U)
 
#define DMA_HANDSHAKE_MODE_HANDSHAKE   (1U)
 
#define DMA_ADDRESS_CONTROL_INCREMENT   (0U)
 
#define DMA_ADDRESS_CONTROL_DECREMENT   (1U)
 
#define DMA_ADDRESS_CONTROL_FIXED   (2U)
 
#define DMA_INTERRUPT_MASK_NONE   (0U)
 
#define DMA_INTERRUPT_MASK_ERROR   DMA_CHCTRL_CTRL_INTERRMASK_MASK
 
#define DMA_INTERRUPT_MASK_ABORT   DMA_CHCTRL_CTRL_INTABTMASK_MASK
 
#define DMA_INTERRUPT_MASK_TERMINAL_COUNT   DMA_CHCTRL_CTRL_INTTCMASK_MASK
 
#define DMA_INTERRUPT_MASK_ALL
 
#define DMA_SUPPORT_64BIT_ADDR   (0)
 

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  {
  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 ))
}
 

Functions

static void dma_reset (DMA_Type *ptr)
 Reset DMA. More...
 
static hpm_stat_t dma_enable_channel (DMA_Type *ptr, uint32_t ch_index)
 Enable DMA channel. More...
 
static void dma_disable_channel (DMA_Type *ptr, uint32_t ch_index)
 Disable DMA channel. More...
 
static bool dma_channel_is_enable (DMA_Type *ptr, uint32_t ch_index)
 Check whether DMA channel is enable. More...
 
static void dma_set_priority (DMA_Type *ptr, uint32_t ch_index, uint8_t priority)
 Set DMA channel priority. More...
 
static void dma_set_source_work_mode (DMA_Type *ptr, uint32_t ch_index, uint8_t mode)
 Set DMA channel source work mode. More...
 
static void dma_set_destination_work_mode (DMA_Type *ptr, uint32_t ch_index, uint8_t mode)
 Set DMA channel destination work mode. More...
 
static void dma_set_source_burst_size (DMA_Type *ptr, uint32_t ch_index, uint8_t burstsize)
 Set DMA channel source burst size. More...
 
static uint32_t dma_get_remaining_transfer_size (DMA_Type *ptr, uint32_t ch_index)
 Get DMA channel remaining transfer size. More...
 
static void dma_set_transfer_size (DMA_Type *ptr, uint32_t ch_index, uint32_t size_in_width)
 Set DMA channel transfer size. More...
 
static void dma_set_source_width (DMA_Type *ptr, uint32_t ch_index, uint8_t width)
 Set DMA channel source width. More...
 
static void dma_set_destination_width (DMA_Type *ptr, uint32_t ch_index, uint8_t width)
 Set DMA channel destination width. More...
 
static void dma_set_transfer_src_width_byte_size (DMA_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 (DMA_Type *ptr, uint32_t ch_index, uint32_t addr)
 Set DMA channel source address. More...
 
static void dma_set_destination_address (DMA_Type *ptr, uint32_t ch_index, uint32_t addr)
 Set DMA channel destination address. More...
 
static void dma_set_source_address_ctrl (DMA_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 (DMA_Type *ptr, uint32_t ch_index, uint8_t addr_ctrl)
 Set DMA channel destination address control mode. More...
 
static void dma_abort_channel (DMA_Type *ptr, uint32_t ch_index_mask)
 Abort channel transfer with mask. More...
 
static uint32_t dma_check_enabled_channel (DMA_Type *ptr, uint32_t ch_index_mask)
 Check if channels are enabled with mask. More...
 
static bool dma_has_linked_pointer_configured (DMA_Type *ptr, uint32_t ch_index)
 Check if linked pointer has been configured. More...
 
static uint32_t dma_check_transfer_status (DMA_Type *ptr, uint8_t ch_index)
 Check transfer status. More...
 
static void dma_clear_transfer_status (DMA_Type *ptr, uint8_t ch_index)
 Clear transfer status. More...
 
static void dma_enable_channel_interrupt (DMA_Type *ptr, uint8_t ch_index, int32_t interrupt_mask)
 Enable DMA Channel interrupt. More...
 
static void dma_disable_channel_interrupt (DMA_Type *ptr, uint8_t ch_index, int32_t interrupt_mask)
 Disable DMA Channel interrupt. More...
 
static uint32_t dma_check_channel_interrupt_mask (DMA_Type *ptr, uint8_t ch_index)
 Check Channel interrupt master. More...
 
static void dma_clear_irq_status (DMA_Type *ptr, uint32_t mask)
 Get clear IRQ status. More...
 
static uint32_t dma_get_irq_status (DMA_Type *ptr)
 Get IRQ status. More...
 
void dma_default_channel_config (DMA_Type *ptr, dma_channel_config_t *ch)
 Get default channel config. More...
 
hpm_stat_t dma_setup_channel (DMA_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 (DMA_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 (DMA_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 (DMA_Type *ptr, dma_handshake_config_t *config)
 Get default handshake config. More...
 
hpm_stat_t dma_setup_handshake (DMA_Type *ptr, dma_handshake_config_t *pconfig, bool start_transfer)
 config dma handshake function More...