VSF Documented
Data Structures | Macros | Typedefs | Enumerations | Functions
vsf_template_dma.h File Reference
#include "./vsf_template_hal_driver.h"
#include "hal/arch/vsf_arch.h"

Go to the source code of this file.

Data Structures

struct  vsf_dma_isr_t
 
struct  vsf_dma_channel_cfg_t
 dma configuration More...
 
struct  vsf_dma_channel_status_t
 
struct  vsf_dma_capability_t
 
struct  vsf_dma_op_t
 
struct  vsf_dma_t
 

Macros

#define VSF_DMA_CFG_MULTI_CLASS   ENABLED
 Enable multi-class support by default for maximum availability.
 
#define VSF_DMA_CFG_PREFIX   vsf
 We can redefine macro VSF_DMA_CFG_PREFIX to specify a prefix to call a specific driver directly in the application code.
 
#define VSF_DMA_CFG_FUNCTION_RENAME   ENABLED
 Disable VSF_DMA_CFG_FUNCTION_RENAME to use the original function names (e.g., vsf_dma_init()).
 
#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE   DISABLED
 Enable the option to reimplement channel mode type in specific hardware drivers.
 
#define VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED
 Enable the option to reimplement interrupt mask type in specific hardware drivers.
 
#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG   DISABLED
 Enable the option to reimplement channel configuration type. For compatibility, do not delete members when redefining vsf_dma_channel_cfg_t.
 
#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG   DISABLED
 Enable the option to reimplement DMA configuration type. For compatibility, do not delete members when redefining vsf_dma_cfg_t The vsf_dma_isr_handler_t type also needs to be redefined.
 
#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED
 Enable the option to reimplement capability type. For compatibility, do not delete members when redefining vsf_dma_capability_t.
 
#define VSF_DMA_CFG_INHERIT_HAL_CAPABILITY   ENABLED
 Enable inheriting HAL capability to reuse common capability definitions.
 
#define VSF_DMA_APIS(__prefix_name)
 DMA API template, used to generate DMA type, specific prefix function declarations, etc.
 

Typedefs

typedef enum vsf_dma_channel_mode_t vsf_dma_channel_mode_t
 
typedef enum vsf_dma_irq_mask_t vsf_dma_irq_mask_t
 
typedef struct vsf_dma_t vsf_dma_t
 
typedef void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)
 
typedef struct vsf_dma_isr_t vsf_dma_isr_t
 
typedef struct vsf_dma_channel_cfg_t vsf_dma_channel_cfg_t
 dma configuration
 
typedef struct vsf_dma_channel_status_t vsf_dma_channel_status_t
 
typedef struct vsf_dma_capability_t vsf_dma_capability_t
 
typedef struct vsf_dma_op_t vsf_dma_op_t
 

Enumerations

enum  vsf_dma_channel_mode_t {
  VSF_DMA_MEMORY_TO_MEMORY = (0x00 << 0) ,
  VSF_DMA_MEMORY_TO_PERIPHERAL = (0x01 << 0) ,
  VSF_DMA_PERIPHERA_TO_MEMORY = (0x02 << 0) ,
  VSF_DMA_PERIPHERA_TO_PERIPHERAL = (0x03 << 0) ,
  VSF_DMA_SRC_ADDR_INCREMENT = (0x00 << 2) ,
  VSF_DMA_SRC_ADDR_DECREMENT = (0x01 << 2) ,
  VSF_DMA_SRC_ADDR_NO_CHANGE = (0x02 << 2) ,
  VSF_DMA_DST_ADDR_INCREMENT = (0x00 << 4) ,
  VSF_DMA_DST_ADDR_DECREMENT = (0x01 << 4) ,
  VSF_DMA_DST_ADDR_NO_CHANGE = (0x02 << 4) ,
  VSF_DMA_SRC_WIDTH_BYTE_1 = (0x00 << 6) ,
  VSF_DMA_SRC_WIDTH_BYTES_2 = (0x01 << 6) ,
  VSF_DMA_SRC_WIDTH_BYTES_4 = (0x02 << 6) ,
  VSF_DMA_SRC_WIDTH_BYTES_8 = (0x03 << 6) ,
  VSF_DMA_SRC_WIDTH_BYTES_16 = (0x04 << 6) ,
  VSF_DMA_SRC_WIDTH_BYTES_32 = (0x05 << 6) ,
  VSF_DMA_DST_WIDTH_BYTE_1 = (0x00 << 10) ,
  VSF_DMA_DST_WIDTH_BYTES_2 = (0x01 << 10) ,
  VSF_DMA_DST_WIDTH_BYTES_4 = (0x02 << 10) ,
  VSF_DMA_DST_WIDTH_BYTES_8 = (0x03 << 10) ,
  VSF_DMA_DST_WIDTH_BYTES_16 = (0x04 << 10) ,
  VSF_DMA_DST_WIDTH_BYTES_32 = (0x05 << 10) ,
  VSF_DMA_SRC_BURST_LENGTH_1 = (0x00 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_2 = (0x01 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_4 = (0x02 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_8 = (0x03 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_16 = (0x04 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_32 = (0x05 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_64 = (0x05 << 14) ,
  VSF_DMA_SRC_BURST_LENGTH_128 = (0x06 << 14) ,
  VSF_DMA_DST_BURST_LENGTH_1 = (0x00 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_2 = (0x01 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_4 = (0x02 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_8 = (0x03 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_16 = (0x04 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_32 = (0x05 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_64 = (0x05 << 18) ,
  VSF_DMA_DST_BURST_LENGTH_128 = (0x06 << 18) ,
  VSF_DMA_PRIOPIRY_LOW = (0x00 << 22) ,
  VSF_DMA_PRIOPIRY_MEDIUM = (0x01 << 22) ,
  VSF_DMA_PRIOPIRY_HIGH = (0x02 << 22) ,
  VSF_DMA_PRIOPIRY_VERY_HIGH = (0x03 << 22)
}
 
enum  {
  VSF_DMA_DIRECTION_COUNT = 4 ,
  VSF_DMA_DIRECTION_MASK ,
  VSF_DMA_SRC_ADDR_COUNT = 3 ,
  VSF_DMA_SRC_ADDR_MASK ,
  VSF_DMA_DST_ADDR_COUNT = 3 ,
  VSF_DMA_DST_ADDR_MASK ,
  VSF_DMA_SRC_WIDTH_COUNT = 6 ,
  VSF_DMA_SRC_WIDTH_MASK ,
  VSF_DMA_DST_WIDTH_COUNT = 6 ,
  VSF_DMA_DST_WIDTH_MASK ,
  VSF_DMA_SRC_BURST_COUNT = 8 ,
  VSF_DMA_SRC_BURST_MASK ,
  VSF_DMA_DST_BURST_COUNT = 8 ,
  VSF_DMA_DST_BURST_MASK ,
  VSF_DMA_PRIOPIRY_COUNT = 4 ,
  VSF_DMA_PRIOPIRY_MASK ,
  VSF_DMA_MODE_MASK_COUNT = 8 ,
  VSF_DMA_MODE_ALL_BITS_MASK
}
 
enum  vsf_dma_irq_mask_t {
  VSF_DMA_IRQ_MASK_CPL = (0x1ul << 0) ,
  VSF_DMA_IRQ_MASK_HALF_CPL = (0x1ul << 1) ,
  VSF_DMA_IRQ_MASK_ERROR = (0x1ul << 2)
}
 
enum  {
  VSF_DMA_IRQ_COUNT = 3 ,
  VSF_DMA_IRQ_ALL_BITS_MASK
}
 

Functions

vsf_err_t vsf_dma_init (vsf_dma_t *dma_ptr)
 Initialize a DMA instance.
 
void vsf_dma_fini (vsf_dma_t *dma_ptr)
 Finalize a DMA instance.
 
vsf_dma_capability_t vsf_dma_capability (vsf_dma_t *dma_ptr)
 Get the capabilities of DMA instance.
 
int8_t vsf_dma_channel_request (vsf_dma_t *dma_ptr)
 DMA request a new channel.
 
void vsf_dma_channel_release (vsf_dma_t *dma_ptr, int8_t channel)
 Release a DMA channel.
 
vsf_err_t vsf_dma_channel_config (vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_channel_cfg_t *cfg_ptr)
 Configure a DMA channel.
 
vsf_err_t vsf_dma_channel_start (vsf_dma_t *dma_ptr, int8_t channel, uint32_t src_address, uint32_t dst_address, uint32_t count)
 Start a DMA channel transfer.
 
vsf_err_t vsf_dma_channel_cancel (vsf_dma_t *dma_ptr, int8_t channel)
 Cancel the transmission of a specific DMA channel.
 
uint32_t vsf_dma_channel_get_transferred_count (vsf_dma_t *dma_ptr, int8_t channel)
 Get the counter of bytes transferred for a specific DMA channel.
 
vsf_dma_channel_status_t vsf_dma_channel_status (vsf_dma_t *dma_ptr, int8_t channel)
 Get status of a DMA channel.
 

Macro Definition Documentation

◆ VSF_DMA_CFG_MULTI_CLASS

#define VSF_DMA_CFG_MULTI_CLASS   ENABLED

Enable multi-class support by default for maximum availability.

◆ VSF_DMA_CFG_PREFIX

#define VSF_DMA_CFG_PREFIX   vsf

We can redefine macro VSF_DMA_CFG_PREFIX to specify a prefix to call a specific driver directly in the application code.

◆ VSF_DMA_CFG_FUNCTION_RENAME

#define VSF_DMA_CFG_FUNCTION_RENAME   ENABLED

Disable VSF_DMA_CFG_FUNCTION_RENAME to use the original function names (e.g., vsf_dma_init()).

◆ VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE

#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE   DISABLED

Enable the option to reimplement channel mode type in specific hardware drivers.

◆ VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK

#define VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED

Enable the option to reimplement interrupt mask type in specific hardware drivers.

◆ VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG

#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG   DISABLED

Enable the option to reimplement channel configuration type. For compatibility, do not delete members when redefining vsf_dma_channel_cfg_t.

◆ VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG

#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG   DISABLED

Enable the option to reimplement DMA configuration type. For compatibility, do not delete members when redefining vsf_dma_cfg_t The vsf_dma_isr_handler_t type also needs to be redefined.

◆ VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY

#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED

Enable the option to reimplement capability type. For compatibility, do not delete members when redefining vsf_dma_capability_t.

◆ VSF_DMA_CFG_INHERIT_HAL_CAPABILITY

#define VSF_DMA_CFG_INHERIT_HAL_CAPABILITY   ENABLED

Enable inheriting HAL capability to reuse common capability definitions.

◆ VSF_DMA_APIS

#define VSF_DMA_APIS (   __prefix_name)
Value:
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, init, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, fini, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_capability_t, dma, capability, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, int8_t, dma, channel_request, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, channel_release, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_config, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t channel, vsf_dma_channel_cfg_t * cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_start, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t channel, uint32_t src_address, uint32_t dst_address, uint32_t count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_cancel, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, dma, channel_get_transferred_count, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_channel_status_t, dma, channel_status, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, int8_t channel)
vsf_err_t
Definition __type.h:42
struct VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_t)
Definition flash.c:53
__le16 capability
Definition ieee80211.h:134
unsigned uint32_t
Definition stdint.h:9
signed char int8_t
Definition stdint.h:4
Definition vsf_template_dma.h:351
dma configuration
Definition vsf_template_dma.h:329
Definition vsf_template_dma.h:340
#define __VSF_HAL_TEMPLATE_API
Definition vsf_template_instance_declaration.h:57

DMA API template, used to generate DMA type, specific prefix function declarations, etc.

Parameters
[in]__prefix_nameThe prefix used for generating DMA functions.

Typedef Documentation

◆ vsf_dma_channel_mode_t

◆ vsf_dma_irq_mask_t

◆ vsf_dma_t

typedef struct vsf_dma_t vsf_dma_t

◆ vsf_dma_isr_handler_t

typedef void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)

◆ vsf_dma_isr_t

typedef struct vsf_dma_isr_t vsf_dma_isr_t

◆ vsf_dma_channel_cfg_t

dma configuration

◆ vsf_dma_channel_status_t

◆ vsf_dma_capability_t

◆ vsf_dma_op_t

typedef struct vsf_dma_op_t vsf_dma_op_t

Enumeration Type Documentation

◆ vsf_dma_channel_mode_t

Enumerator
VSF_DMA_MEMORY_TO_MEMORY 
VSF_DMA_MEMORY_TO_PERIPHERAL 
VSF_DMA_PERIPHERA_TO_MEMORY 
VSF_DMA_PERIPHERA_TO_PERIPHERAL 
VSF_DMA_SRC_ADDR_INCREMENT 
VSF_DMA_SRC_ADDR_DECREMENT 
VSF_DMA_SRC_ADDR_NO_CHANGE 
VSF_DMA_DST_ADDR_INCREMENT 
VSF_DMA_DST_ADDR_DECREMENT 
VSF_DMA_DST_ADDR_NO_CHANGE 
VSF_DMA_SRC_WIDTH_BYTE_1 
VSF_DMA_SRC_WIDTH_BYTES_2 
VSF_DMA_SRC_WIDTH_BYTES_4 
VSF_DMA_SRC_WIDTH_BYTES_8 
VSF_DMA_SRC_WIDTH_BYTES_16 
VSF_DMA_SRC_WIDTH_BYTES_32 
VSF_DMA_DST_WIDTH_BYTE_1 
VSF_DMA_DST_WIDTH_BYTES_2 
VSF_DMA_DST_WIDTH_BYTES_4 
VSF_DMA_DST_WIDTH_BYTES_8 
VSF_DMA_DST_WIDTH_BYTES_16 
VSF_DMA_DST_WIDTH_BYTES_32 
VSF_DMA_SRC_BURST_LENGTH_1 
VSF_DMA_SRC_BURST_LENGTH_2 
VSF_DMA_SRC_BURST_LENGTH_4 
VSF_DMA_SRC_BURST_LENGTH_8 
VSF_DMA_SRC_BURST_LENGTH_16 
VSF_DMA_SRC_BURST_LENGTH_32 
VSF_DMA_SRC_BURST_LENGTH_64 
VSF_DMA_SRC_BURST_LENGTH_128 
VSF_DMA_DST_BURST_LENGTH_1 
VSF_DMA_DST_BURST_LENGTH_2 
VSF_DMA_DST_BURST_LENGTH_4 
VSF_DMA_DST_BURST_LENGTH_8 
VSF_DMA_DST_BURST_LENGTH_16 
VSF_DMA_DST_BURST_LENGTH_32 
VSF_DMA_DST_BURST_LENGTH_64 
VSF_DMA_DST_BURST_LENGTH_128 
VSF_DMA_PRIOPIRY_LOW 
VSF_DMA_PRIOPIRY_MEDIUM 
VSF_DMA_PRIOPIRY_HIGH 
VSF_DMA_PRIOPIRY_VERY_HIGH 

◆ anonymous enum

anonymous enum
Enumerator
VSF_DMA_DIRECTION_COUNT 
VSF_DMA_DIRECTION_MASK 
VSF_DMA_SRC_ADDR_COUNT 
VSF_DMA_SRC_ADDR_MASK 
VSF_DMA_DST_ADDR_COUNT 
VSF_DMA_DST_ADDR_MASK 
VSF_DMA_SRC_WIDTH_COUNT 
VSF_DMA_SRC_WIDTH_MASK 
VSF_DMA_DST_WIDTH_COUNT 
VSF_DMA_DST_WIDTH_MASK 
VSF_DMA_SRC_BURST_COUNT 
VSF_DMA_SRC_BURST_MASK 
VSF_DMA_DST_BURST_COUNT 
VSF_DMA_DST_BURST_MASK 
VSF_DMA_PRIOPIRY_COUNT 
VSF_DMA_PRIOPIRY_MASK 
VSF_DMA_MODE_MASK_COUNT 
VSF_DMA_MODE_ALL_BITS_MASK 

◆ vsf_dma_irq_mask_t

Enumerator
VSF_DMA_IRQ_MASK_CPL 
VSF_DMA_IRQ_MASK_HALF_CPL 
VSF_DMA_IRQ_MASK_ERROR 

◆ anonymous enum

anonymous enum
Enumerator
VSF_DMA_IRQ_COUNT 
VSF_DMA_IRQ_ALL_BITS_MASK 

Function Documentation

◆ vsf_dma_init()

vsf_err_t vsf_dma_init ( vsf_dma_t dma_ptr)
extern

Initialize a DMA instance.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
Returns
vsf_err_t: VSF_ERR_NONE if initialization successful, otherwise returns error code
Note
It is not necessary to call vsf_dma_fini() to deinitialization. vsf_dma_init() should be called before any other DMA API except vsf_dma_capability().

◆ vsf_dma_fini()

void vsf_dma_fini ( vsf_dma_t dma_ptr)
extern

Finalize a DMA instance.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
Returns
none

◆ vsf_dma_capability()

vsf_dma_capability_t vsf_dma_capability ( vsf_dma_t dma_ptr)
extern

Get the capabilities of DMA instance.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
Returns
vsf_dma_capability_t: All capabilities of current DMA vsf_dma_capability_t

◆ vsf_dma_channel_request()

int8_t vsf_dma_channel_request ( vsf_dma_t dma_ptr)
extern

DMA request a new channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
Returns
int8_t: Positive number or 0 if the request was successful, otherwise returns error code

◆ vsf_dma_channel_release()

void vsf_dma_channel_release ( vsf_dma_t dma_ptr,
int8_t  channel 
)
extern

Release a DMA channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
Returns
none

◆ vsf_dma_channel_config()

vsf_err_t vsf_dma_channel_config ( vsf_dma_t dma_ptr,
int8_t  channel,
vsf_dma_channel_cfg_t cfg_ptr 
)
extern

Configure a DMA channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
[in]cfg_ptra pointer to DMA channel configuration
Returns
vsf_err_t: VSF_ERR_NONE if the configuration was successful, otherwise returns error code

◆ vsf_dma_channel_start()

vsf_err_t vsf_dma_channel_start ( vsf_dma_t dma_ptr,
int8_t  channel,
uint32_t  src_address,
uint32_t  dst_address,
uint32_t  count 
)
extern

Start a DMA channel transfer.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
[in]src_addresssource address
[in]dst_addressdestination address
[in]countcounter of data to be transferred (in byte)
Returns
vsf_err_t: VSF_ERR_NONE if the start request was successful, otherwise returns error code

◆ vsf_dma_channel_cancel()

vsf_err_t vsf_dma_channel_cancel ( vsf_dma_t dma_ptr,
int8_t  channel 
)
extern

Cancel the transmission of a specific DMA channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
Returns
vsf_err_t: VSF_ERR_NONE if the cancel request was successful, otherwise returns error code

◆ vsf_dma_channel_get_transferred_count()

uint32_t vsf_dma_channel_get_transferred_count ( vsf_dma_t dma_ptr,
int8_t  channel 
)
extern

Get the counter of bytes transferred for a specific DMA channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
Returns
uint32_t: Number of bytes transferred
Note
: If called after VSF_DMA_IRQ_MASK_CPL interrupt trigger, it should return 0.
: It is usually called after call vsf_dma_channel_cancel() to get the counter that has been transferred.

◆ vsf_dma_channel_status()

vsf_dma_channel_status_t vsf_dma_channel_status ( vsf_dma_t dma_ptr,
int8_t  channel 
)
extern

Get status of a DMA channel.

Parameters
[in]dma_ptra pointer to structure vsf_dma_t
[in]channelchannel number
Returns
vsf_dma_channel_status_t: Status of the DMA channel
Generated from commit: vsfteam/vsf@2b286be