VSF Documented
/github/workspace/source/hal/driver/common/template/vsf_template_dma.h

Initialize vsf_dma_channel_hint_t structure with default values.

Initialize vsf_dma_channel_hint_t structure with default values

Parameters
[in]__CHANNELChannel number (use negative value for automatic allocation)
[in]__REQUEST_LINEPeripheral request line number
[in]...Optional interrupt priority. If not provided, defaults to vsf_arch_prio_invalid.
Note
Use this macro to ensure proper initialization, especially for vsf_arch_prio_t which may have non-zero invalid value (vsf_arch_prio_invalid = -1).
If priority is not specified, it will default to vsf_arch_prio_invalid.

// Automatic channel allocation without priority vsf_dma_channel_hint_t hint1 = VSF_DMA_CHANNEL_HINT_INIT(-1, 5);

// Specific channel number without priority vsf_dma_channel_hint_t hint2 = VSF_DMA_CHANNEL_HINT_INIT(3, 10);

// Automatic channel allocation with priority vsf_arch_prio_t test_prio = 2; vsf_dma_channel_hint_t hint3 = VSF_DMA_CHANNEL_HINT_INIT(-1, 7, test_prio);

// Specific channel with priority vsf_dma_channel_hint_t hint4 = VSF_DMA_CHANNEL_HINT_INIT(5, 12, 1);

/*****************************************************************************
* Copyright(C)2009-2022 by VSF Team *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
****************************************************************************/
#ifndef __VSF_TEMPLATE_DMA_H__
#define __VSF_TEMPLATE_DMA_H__
/*============================ INCLUDES ======================================*/
#ifdef __cplusplus
extern "C" {
#endif
/*============================ MACROS ========================================*/
#ifndef VSF_DMA_CFG_MULTI_CLASS
# define VSF_DMA_CFG_MULTI_CLASS ENABLED
#endif
#ifndef VSF_DMA_CFG_PREFIX
# if VSF_DMA_CFG_MULTI_CLASS == ENABLED
# define VSF_DMA_CFG_PREFIX vsf
# elif defined(VSF_HW_DMA_COUNT) && (VSF_HW_DMA_COUNT != 0)
# define VSF_DMA_CFG_PREFIX vsf_hw
# else
# define VSF_DMA_CFG_PREFIX vsf
# endif
#endif
#ifndef VSF_DMA_CFG_FUNCTION_RENAME
# define VSF_DMA_CFG_FUNCTION_RENAME ENABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG \
DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS DISABLED
#endif
#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY
# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
#endif
#ifndef VSF_DMA_CFG_INHERIT_HAL_CAPABILITY
# define VSF_DMA_CFG_INHERIT_HAL_CAPABILITY ENABLED
#endif
#ifndef VSF_DMA_CHANNEL_SG_ARRAY
# define VSF_DMA_CHANNEL_SG_ARRAY(__NAME, __COUNT, ...) \
vsf_dma_channel_sg_desc_t __NAME[__COUNT] = { \
__VA_ARGS__ \
};
#endif
#ifndef VSF_DMA_CHANNEL_SG_ITEM
# define VSF_DMA_CHANNEL_SG_ITEM(__MODE, __SRC_ADDR, __DST_ADDR, __CNT, ...) \
{ \
.mode = __MODE, \
.src_address = __SRC_ADDR, \
.dst_address = __DST_ADDR, \
.count = __CNT, \
__VA_ARGS__ \
}
#endif
/*============================ MACROFIED FUNCTIONS ===========================*/
#define VSF_DMA_APIS(__prefix_name) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, init, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, vsf_dma_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, fini, VSF_MCONNECT(__prefix_name, _t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, get_configuration, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, vsf_dma_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_capability_t, dma, capability, VSF_MCONNECT(__prefix_name, _t) *dma_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_acquire, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, vsf_dma_channel_hint_t *channel_hint_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, channel_release, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_config, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel, vsf_dma_channel_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_get_configuration, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_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, _t) *dma_ptr, uint8_t channel, vsf_dma_addr_t src_address, vsf_dma_addr_t dst_address, uint32_t count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_cancel, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_sg_config_desc, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel, vsf_dma_isr_t isr, vsf_dma_channel_sg_desc_t *scatter_gather_cfg, uint32_t sg_count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_sg_start, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, dma, channel_get_transferred_count, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_channel_status_t, dma, channel_status, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel)
/*============================ TYPES =========================================*/
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR == DISABLED
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE == DISABLED
typedef enum vsf_dma_channel_mode_t {
VSF_DMA_MEMORY_TO_MEMORY = (0x00 << 0),
VSF_DMA_SRC_WIDTH_BYTE_1 = (0x00 << 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),
//prio
VSF_DMA_PRIORITY_LOW = (0x00 << 22),
VSF_DMA_PRIORITY_MEDIUM = (0x01 << 22),
VSF_DMA_PRIORITY_HIGH = (0x02 << 22),
#endif
enum {
};
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
typedef 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),
#endif
enum {
};
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
typedef struct vsf_dma_cfg_t {
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT == DISABLED
typedef struct vsf_dma_channel_hint_t {
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG == DISABLED
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 {
void *target_ptr;
typedef struct vsf_dma_channel_cfg_t {
#endif
/*============================ INITIALIZATION MACROS =========================*/
// Helper macro for optional argument with default value
#ifndef __VSF_DMA_GET_ARG_OR_DEFAULT
# define __VSF_DMA_GET_ARG_OR_DEFAULT(__DEFAULT, __ARG, ...) (__ARG)
#endif
#ifndef VSF_DMA_CHANNEL_HINT_INIT
# define VSF_DMA_CHANNEL_HINT_INIT(__CHANNEL, __REQUEST_LINE, ...) \
{ \
.channel = (__CHANNEL), \
.request_line = (__REQUEST_LINE), \
.prio = __VSF_DMA_GET_ARG_OR_DEFAULT(,##__VA_ARGS__, vsf_arch_prio_invalid, vsf_arch_prio_invalid), \
}
#endif
#ifndef VSF_DMA_CHANNEL_CFG_INIT
# define VSF_DMA_CHANNEL_CFG_INIT(__MODE, __ISR, __IRQ_MASK, __SRC_REQ_IDX, __DST_REQ_IDX, ...) \
{ \
.mode = (__MODE), \
.isr = (__ISR), \
.irq_mask = (__IRQ_MASK), \
.prio = __VSF_DMA_GET_ARG_OR_DEFAULT(,##__VA_ARGS__, vsf_arch_prio_invalid, vsf_arch_prio_invalid), \
.src_request_idx = (__SRC_REQ_IDX), \
.dst_request_idx = (__DST_REQ_IDX), \
}
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG == DISABLED
typedef struct vsf_dma_channel_sg_desc_t {
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS == DISABLED
typedef struct vsf_dma_channel_status_t {
union {
struct {
uint32_t is_busy : 1;
};
};
#endif
#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
typedef struct vsf_dma_capability_t {
#if VSF_DMA_CFG_INHERIT_HAL_CAPABILITY == ENABLED
#endif
#endif
typedef struct vsf_dma_op_t {
#undef __VSF_HAL_TEMPLATE_API
#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
VSF_DMA_APIS(vsf_dma)
#if VSF_DMA_CFG_MULTI_CLASS == ENABLED
struct vsf_dma_t {
const vsf_dma_op_t * op;
};
#endif
/*============================ PROTOTYPES ====================================*/
extern vsf_err_t vsf_dma_init(vsf_dma_t *dma_ptr, vsf_dma_cfg_t *cfg_ptr);
extern void vsf_dma_fini(vsf_dma_t *dma_ptr);
extern void vsf_dma_channel_release(vsf_dma_t *dma_ptr, uint8_t channel);
extern vsf_err_t vsf_dma_channel_start(vsf_dma_t *dma_ptr, uint8_t channel, vsf_dma_addr_t src_address, vsf_dma_addr_t dst_address, uint32_t count);
vsf_dma_channel_sg_desc_t *sg_desc_ptr, uint32_t sg_count);
// \~english
// @brief Acquire a DMA channel from all available DMA instances
// @param[in,out] channel_hint_ptr: a pointer to DMA channel hint. User should provide appropriate hint information based on actual requirements. If the actually allocated channel or other configuration differs from user's expectation, the function may modify channel_hint_ptr to notify the user of the actual allocation. The allocated channel number will be stored in channel_hint_ptr->channel.
// @return vsf_dma_t *: pointer to the DMA instance that successfully allocated the channel, or NULL if allocation failed
// @note Prerequisites: All DMA instances must be homogeneous (isomorphic). Peripherals can acquire channels from any DMA instance, and channels acquired from any DMA instance can be assigned to any peripheral. This function iterates through all available DMA instances and attempts to acquire a channel from each one. It returns the first DMA instance that successfully allocates a channel.
// @note The VSF_PREFIX prefix of this can be replaced with the actual prefix, e.g. vsf_hw
//
// \~chinese
// @brief 从所有可用的 DMA 实例中获取一个 DMA 通道
// @param[in,out] channel_hint_ptr: 指向 DMA 通道提示的指针。用户应根据实际情况提供合适的提示信息。如果实际分配的通道或其他配置与用户预期不一致,函数可能会修改 channel_hint_ptr 来通知用户实际分配的结果。分配的通道号将存储在 channel_hint_ptr->channel 中。
// @return vsf_dma_t *: 成功分配通道的 DMA 实例指针,如果分配失败则返回 NULL
// @note 前提条件:所有 DMA 实例必须是同构的(功能相同)。外设可以从任意一个 DMA 实例申请通道,并且从任意一个 DMA 实例获取的通道都可以分配给任意一个外设使用。此函数遍历所有可用的 DMA 实例,并尝试从每个实例中获取通道。它返回第一个成功分配通道的 DMA 实例。
// @note VSF_PREFIX 前缀可以替换成实际的前缀,例如 vsf_hw
// */
//extern vsf_dma_t * VSF_PREFIX_dma_channel_acquire_from_all(vsf_dma_channel_hint_t *channel_hint_ptr);
//
/*============================ MACROFIED FUNCTIONS ===========================*/
#if VSF_DMA_CFG_FUNCTION_RENAME == ENABLED
# define __vsf_dma_t VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_t)
# define vsf_dma_init(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_init)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_fini(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_fini)((__vsf_dma_t *)(__DMA))
# define vsf_dma_get_configuration(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_get_configuration)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_capability(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_capability)((__vsf_dma_t *)(__DMA))
# define vsf_dma_channel_acquire(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_acquire)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_release(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_release)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_config(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_config)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_get_configuration(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_get_configuration)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_sg_config_desc(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_sg_config_desc)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_sg_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_sg_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_cancel(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_cancel)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_get_transferred_count(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_get_transferred_count)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
# define vsf_dma_channel_status(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_status)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
#endif
#ifdef __cplusplus
}
#endif
#endif /*__VSF_TEMPLATE_DMA_H__*/
vsf_err_t
Definition __type.h:42
vsf_dma_channel_mode_t
Definition dma.h:86
@ VSF_DMA_PRIORITY_MEDIUM
Definition dma.h:113
@ VSF_DMA_DST_WIDTH_BYTES_32
Definition dma.h:137
@ VSF_DMA_SRC_BURST_LENGTH_64
Definition dma.h:145
@ VSF_DMA_DST_BURST_LENGTH_64
Definition dma.h:154
@ VSF_DMA_SRC_WIDTH_BYTES_8
Definition dma.h:131
@ VSF_DMA_SRC_WIDTH_BYTES_2
Definition dma.h:100
@ VSF_DMA_DST_WIDTH_BYTES_16
Definition dma.h:136
@ VSF_DMA_SRC_BURST_LENGTH_16
Definition dma.h:143
@ VSF_DMA_DST_BURST_LENGTH_128
Definition dma.h:155
@ VSF_DMA_DST_WIDTH_BYTE_1
Definition dma.h:107
@ VSF_DMA_PRIORITY_HIGH
Definition dma.h:114
@ VSF_DMA_SRC_WIDTH_BYTES_16
Definition dma.h:132
@ VSF_DMA_DST_ADDR_NO_CHANGE
Definition dma.h:105
@ VSF_DMA_DST_BURST_LENGTH_4
Definition dma.h:150
@ VSF_DMA_DST_BURST_LENGTH_1
Definition dma.h:148
@ VSF_DMA_SRC_ADDR_INCREMENT
Definition dma.h:96
@ VSF_DMA_MEMORY_TO_PERIPHERAL
Definition dma.h:89
@ VSF_DMA_DST_BURST_LENGTH_32
Definition dma.h:153
@ VSF_DMA_SRC_BURST_LENGTH_4
Definition dma.h:141
@ VSF_DMA_SRC_BURST_LENGTH_128
Definition dma.h:146
@ VSF_DMA_SRC_WIDTH_BYTE_1
Definition dma.h:99
@ VSF_DMA_MEMORY_TO_MEMORY
Definition dma.h:88
@ VSF_DMA_PRIORITY_LOW
Definition dma.h:112
@ VSF_DMA_SRC_WIDTH_BYTES_4
Definition dma.h:101
@ VSF_DMA_DST_WIDTH_BYTES_8
Definition dma.h:135
@ VSF_DMA_SRC_BURST_LENGTH_1
Definition dma.h:139
@ VSF_DMA_DST_WIDTH_BYTES_2
Definition dma.h:108
@ VSF_DMA_DST_WIDTH_BYTES_4
Definition dma.h:109
@ VSF_DMA_SRC_BURST_LENGTH_2
Definition dma.h:140
@ VSF_DMA_SRC_ADDR_DECREMENT
Definition dma.h:128
@ VSF_DMA_DST_BURST_LENGTH_8
Definition dma.h:151
@ VSF_DMA_SRC_ADDR_NO_CHANGE
Definition dma.h:97
@ VSF_DMA_DST_BURST_LENGTH_16
Definition dma.h:152
@ VSF_DMA_SRC_BURST_LENGTH_8
Definition dma.h:142
@ VSF_DMA_DST_BURST_LENGTH_2
Definition dma.h:149
@ VSF_DMA_SRC_WIDTH_BYTES_32
Definition dma.h:133
@ VSF_DMA_PRIORITY_VERY_HIGH
Definition dma.h:115
@ VSF_DMA_SRC_BURST_LENGTH_32
Definition dma.h:144
@ VSF_DMA_DST_ADDR_DECREMENT
Definition dma.h:129
@ VSF_DMA_PERIPHERAL_TO_PERIPHERAL
Definition dma.h:127
@ VSF_DMA_PERIPHERAL_TO_MEMORY
Definition dma.h:90
@ VSF_DMA_DST_ADDR_INCREMENT
Definition dma.h:104
void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)
Definition dma.h:180
vsf_dma_irq_mask_t
Definition dma.h:160
@ VSF_DMA_IRQ_MASK_HALF_CPL
Definition dma.h:164
@ VSF_DMA_IRQ_MASK_CPL
Definition dma.h:162
@ VSF_DMA_IRQ_MASK_ERROR
Definition dma.h:166
uintptr_t vsf_dma_addr_t
Definition dma.h:82
vsf_arch_prio_t
Definition cortex_a_generic.h:88
vsf_err_t vsf_dma_channel_start(vsf_dma_t *dma_ptr, uint8_t channel, vsf_dma_addr_t src_address, vsf_dma_addr_t dst_address, uint32_t count)
Start a DMA channel transfer.
Definition dma_common.c:115
vsf_err_t vsf_dma_channel_sg_start(vsf_dma_t *dma_ptr, uint8_t channel)
Start a DMA scatter-gather transfer.
Definition dma_common.c:138
vsf_err_t vsf_dma_channel_acquire(vsf_dma_t *dma_ptr, vsf_dma_channel_hint_t *channel_hint_ptr)
DMA acquire a new channel.
Definition dma_common.c:75
vsf_err_t vsf_dma_get_configuration(vsf_dma_t *dma_ptr, vsf_dma_cfg_t *cfg_ptr)
Get the current configuration of DMA instance.
Definition dma_common.c:56
vsf_err_t vsf_dma_channel_get_configuration(vsf_dma_t *dma_ptr, uint8_t channel, vsf_dma_channel_cfg_t *cfg_ptr)
Get the current configuration of a DMA channel.
Definition dma_common.c:104
void vsf_dma_channel_release(vsf_dma_t *dma_ptr, uint8_t channel)
Release a DMA channel.
Definition dma_common.c:85
vsf_err_t vsf_dma_init(vsf_dma_t *dma_ptr, vsf_dma_cfg_t *cfg_ptr)
Initialize a DMA instance.
Definition dma_common.c:38
vsf_err_t vsf_dma_channel_sg_config_desc(vsf_dma_t *dma_ptr, uint8_t channel, vsf_dma_isr_t isr, vsf_dma_channel_sg_desc_t *sg_desc_ptr, uint32_t sg_count)
Configure a DMA channel for scatter-gather transfer.
Definition dma_common.c:127
vsf_err_t vsf_dma_channel_cancel(vsf_dma_t *dma_ptr, uint8_t channel)
Cancel the transmission of a specific DMA channel.
Definition dma_common.c:147
void vsf_dma_fini(vsf_dma_t *dma_ptr)
Finalize a DMA instance.
Definition dma_common.c:47
vsf_err_t vsf_dma_channel_config(vsf_dma_t *dma_ptr, uint8_t channel, vsf_dma_channel_cfg_t *cfg_ptr)
Configure a DMA channel.
Definition dma_common.c:94
vsf_dma_channel_status_t vsf_dma_channel_status(vsf_dma_t *dma_ptr, uint8_t channel)
Get status of a DMA channel.
Definition dma_common.c:165
vsf_dma_capability_t vsf_dma_capability(vsf_dma_t *dma_ptr)
Get the capabilities of DMA instance.
Definition dma_common.c:66
uint32_t vsf_dma_channel_get_transferred_count(vsf_dma_t *dma_ptr, uint8_t channel)
Get the count of data items transferred for a specific DMA channel.
Definition dma_common.c:156
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
uint32_t uintptr_t
Definition stdint.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
signed char int8_t
Definition stdint.h:4
DMA capability structure that can be reimplemented in specific HAL drivers.
Definition dma.h:229
uint8_t addr_alignment
Address alignment requirement in bytes (1 means no alignment required)
Definition dma.h:238
vsf_dma_channel_mode_t supported_modes
Definition dma.h:236
uint8_t channel_count
Number of DMA channels.
Definition dma.h:234
uint8_t support_scatter_gather
Support scatter-gather transfer.
Definition dma.h:239
uint8_t irq_count
Definition dma.h:235
uint32_t max_transfer_count
Maximum number of data items per transfer (0 means no limit)
Definition dma.h:237
inherit(vsf_peripheral_capability_t) vsf_dma_irq_mask_t irq_mask
Configuration structure for DMA.
Definition dma.h:223
vsf_arch_prio_t prio
Default interrupt priority for DMA channels.
Definition dma.h:224
dma configuration
Definition dma.h:185
uint8_t dst_request_idx
Definition dma.h:191
vsf_dma_channel_mode_t mode
Definition dma.h:186
vsf_dma_irq_mask_t irq_mask
Definition dma.h:188
uint8_t src_request_idx
Definition dma.h:190
vsf_dma_isr_t isr
Definition dma.h:187
vsf_arch_prio_t prio
Definition dma.h:189
DMA channel hint structure for channel allocation.
Definition dma.h:171
int8_t channel
Definition dma.h:172
uint8_t request_line
Definition dma.h:173
vsf_arch_prio_t prio
Definition dma.h:174
DMA scatter-gather descriptor structure.
Definition dma.h:213
uint32_t count
Definition dma.h:217
vsf_dma_addr_t src_address
Source address.
Definition dma.h:215
vsf_dma_addr_t next
Definition dma.h:218
vsf_dma_channel_mode_t mode
DMA channel mode.
Definition dma.h:214
vsf_dma_addr_t dst_address
Destination address.
Definition dma.h:216
Definition dma.h:202
Definition dma.h:181
vsf_dma_isr_handler_t * handler_fn
Definition dma.h:182
void * target_ptr
Definition dma.h:183
Definition vsf_template_dma.h:804
Definition vsf_template_dma.h:814
const vsf_dma_op_t * op
Definition vsf_template_dma.h:815
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
vsf_adc_isr_t isr
Definition adc.h:111
void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)
Definition dma.h:200
@ VSF_DMA_PRIORITY_MASK
Definition vsf_template_dma.h:412
@ VSF_DMA_DST_WIDTH_MASK
Definition vsf_template_dma.h:384
@ VSF_DMA_SRC_WIDTH_MASK
Definition vsf_template_dma.h:376
@ VSF_DMA_MODE_ALL_BITS_MASK
Definition vsf_template_dma.h:418
@ VSF_DMA_DST_ADDR_MASK
Definition vsf_template_dma.h:371
@ VSF_DMA_SRC_BURST_MASK
Definition vsf_template_dma.h:392
@ VSF_DMA_DST_ADDR_COUNT
Definition vsf_template_dma.h:370
@ VSF_DMA_DIRECTION_COUNT
Definition vsf_template_dma.h:359
@ VSF_DMA_PRIORITY_COUNT
Definition vsf_template_dma.h:411
@ VSF_DMA_DST_BURST_COUNT
Definition vsf_template_dma.h:401
@ VSF_DMA_SRC_BURST_COUNT
Definition vsf_template_dma.h:391
@ VSF_DMA_SRC_ADDR_COUNT
Definition vsf_template_dma.h:365
@ VSF_DMA_SRC_ADDR_MASK
Definition vsf_template_dma.h:366
@ VSF_DMA_DST_WIDTH_COUNT
Definition vsf_template_dma.h:383
@ VSF_DMA_DIRECTION_MASK
Definition vsf_template_dma.h:360
@ VSF_DMA_SRC_WIDTH_COUNT
Definition vsf_template_dma.h:375
@ VSF_DMA_MODE_MASK_COUNT
Definition vsf_template_dma.h:417
@ VSF_DMA_DST_BURST_MASK
Definition vsf_template_dma.h:402
@ VSF_DMA_IRQ_COUNT
Definition vsf_template_dma.h:438
@ VSF_DMA_IRQ_ALL_BITS_MASK
Definition vsf_template_dma.h:439
#define VSF_DMA_APIS(__prefix_name)
DMA API template, used to generate DMA type, specific prefix function declarations,...
Definition vsf_template_dma.h:271
Generated from commit: vsfteam/vsf@f914394