18#ifndef __VSF_TEMPLATE_DMA_H__
19#define __VSF_TEMPLATE_DMA_H__
39#ifndef VSF_DMA_CFG_MULTI_CLASS
40# define VSF_DMA_CFG_MULTI_CLASS ENABLED
52#ifndef VSF_DMA_CFG_PREFIX
53# if VSF_DMA_CFG_MULTI_CLASS == ENABLED
54# define VSF_DMA_CFG_PREFIX vsf
55# elif defined(VSF_HW_DMA_COUNT) && (VSF_HW_DMA_COUNT != 0)
56# define VSF_DMA_CFG_PREFIX vsf_hw
58# define VSF_DMA_CFG_PREFIX vsf
71#ifndef VSF_DMA_CFG_FUNCTION_RENAME
72# define VSF_DMA_CFG_FUNCTION_RENAME ENABLED
82#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE
83# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE DISABLED
93#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK
94# define VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
105#ifndef VSF_DMA_CFG_REIMPLEMENT_CFG_TYPE_CFG
106# define VSF_DMA_CFG_REIMPLEMENT_CFG_TYPE_CFG DISABLED
116#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT
117# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT DISABLED
129#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG
130# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG DISABLED
140#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG
141# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG \
156#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG
157# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG DISABLED
169#ifndef VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY
170# define VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
180#ifndef VSF_DMA_CFG_INHERIT_HAL_CAPABILITY
181# define VSF_DMA_CFG_INHERIT_HAL_CAPABILITY ENABLED
193#ifndef VSF_DMA_CHANNEL_SG_ARRAY
194# define VSF_DMA_CHANNEL_SG_ARRAY(__NAME, __COUNT, ...) \
195 vsf_dma_channel_sg_desc_t __NAME[__COUNT] = { \
208#ifndef VSF_DMA_CHANNEL_SG_ITEM
209# define VSF_DMA_CHANNEL_SG_ITEM(__MODE, __SRC_ADDR, __DST_ADDR, __CNT, ...) \
212 .src_address = __SRC_ADDR, \
213 .dst_address = __DST_ADDR, \
230#define VSF_DMA_APIS(__prefix_name) \
231 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, init, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, vsf_dma_cfg_t *cfg_ptr) \
232 __VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, fini, VSF_MCONNECT(__prefix_name, _t) *dma_ptr) \
233 __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) \
234 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_capability_t, dma, capability, VSF_MCONNECT(__prefix_name, _t) *dma_ptr) \
235 __VSF_HAL_TEMPLATE_API(__prefix_name, int8_t, dma, channel_request, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, vsf_dma_channel_hint_t *channel_hint_ptr) \
236 __VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, channel_release, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
237 __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) \
238 __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) \
239 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_start, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel, uint32_t src_address, uint32_t dst_address, uint32_t count) \
240 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_cancel, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
241 __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) \
242 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_sg_start, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
243 __VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, dma, channel_get_transferred_count, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel) \
244 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_channel_status_t, dma, channel_status, VSF_MCONNECT(__prefix_name, _t) *dma_ptr, uint8_t channel)
248#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE == DISABLED
375#if VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
391#if VSF_DMA_CFG_REIMPLEMENT_CFG_TYPE_CFG == DISABLED
404#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT == DISABLED
424#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG == DISABLED
445#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG == DISABLED
468#if VSF_DMA_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
479#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
481#if VSF_DMA_CFG_INHERIT_HAL_CAPABILITY == ENABLED
493#undef __VSF_HAL_TEMPLATE_API
494#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
500#if VSF_DMA_CFG_MULTI_CLASS == ENABLED
760#if VSF_DMA_CFG_FUNCTION_RENAME == ENABLED
761# define __vsf_dma_t VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_t)
762# define vsf_dma_init(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_init)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
763# define vsf_dma_fini(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_fini)((__vsf_dma_t *)(__DMA))
764# define vsf_dma_get_configuration(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_get_configuration)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
765# define vsf_dma_capability(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_capability)((__vsf_dma_t *)(__DMA))
766# define vsf_dma_channel_request(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_request)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
767# define vsf_dma_channel_release(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_release)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
768# define vsf_dma_channel_config(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_config)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
769# define vsf_dma_channel_get_configuration(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_get_configuration)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
770# define vsf_dma_channel_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
771# 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__)
772# define vsf_dma_channel_sg_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_sg_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
773# define vsf_dma_channel_cancel(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_cancel)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
774# 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__)
775# define vsf_dma_channel_status(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_status)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.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
Definition vsf_template_dma.h:480
uint8_t channel_count
Definition vsf_template_dma.h:487
uint32_t max_request_count
Definition vsf_template_dma.h:486
inherit(vsf_peripheral_capability_t) vsf_dma_irq_mask_t irq_mask
Configuration structure for DMA.
Definition vsf_template_dma.h:399
vsf_arch_prio_t prio
Definition vsf_template_dma.h:400
dma configuration
Definition vsf_template_dma.h:435
uint8_t src_idx
Index of the peripheral or memory corresponding to the source address of the DMA.
Definition vsf_template_dma.h:439
vsf_dma_channel_mode_t mode
Definition vsf_template_dma.h:436
uint8_t dst_idx
Index of the peripheral or memory corresponding to the destination address of the DMA.
Definition vsf_template_dma.h:441
vsf_dma_isr_t isr
Definition vsf_template_dma.h:437
DMA channel hint structure.
Definition vsf_template_dma.h:412
uint8_t channel
Definition vsf_template_dma.h:415
uint8_t request_line
Definition vsf_template_dma.h:420
DMA scatter-gather descriptor structure.
Definition vsf_template_dma.h:459
uint32_t next
Next descriptor address.
Definition vsf_template_dma.h:464
uint32_t count
Number of bytes to be transferred.
Definition vsf_template_dma.h:463
uint32_t dst_address
Destination address.
Definition vsf_template_dma.h:462
vsf_dma_channel_mode_t mode
DMA channel mode.
Definition vsf_template_dma.h:460
uint32_t src_address
Source address.
Definition vsf_template_dma.h:461
Definition vsf_template_dma.h:469
Definition vsf_template_dma.h:429
vsf_dma_isr_handler_t * handler_fn
Definition vsf_template_dma.h:430
void * target_ptr
Definition vsf_template_dma.h:431
Definition vsf_template_dma.h:491
Definition vsf_template_dma.h:501
const vsf_dma_op_t * op
Definition vsf_template_dma.h:502
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
vsf_adc_isr_t isr
Definition adc.h:107
vsf_dma_channel_mode_t
Definition dma.h:116
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:179
vsf_dma_irq_mask_t
Definition dma.h:170
vsf_dma_channel_mode_t
Definition vsf_template_dma.h:249
@ VSF_DMA_DST_WIDTH_BYTES_32
Definition vsf_template_dma.h:275
@ VSF_DMA_SRC_BURST_LENGTH_64
Definition vsf_template_dma.h:283
@ VSF_DMA_DST_BURST_LENGTH_64
Definition vsf_template_dma.h:292
@ VSF_DMA_SRC_WIDTH_BYTES_8
Definition vsf_template_dma.h:266
@ VSF_DMA_SRC_WIDTH_BYTES_2
Definition vsf_template_dma.h:264
@ VSF_DMA_DST_WIDTH_BYTES_16
Definition vsf_template_dma.h:274
@ VSF_DMA_SRC_BURST_LENGTH_16
Definition vsf_template_dma.h:281
@ VSF_DMA_DST_BURST_LENGTH_128
Definition vsf_template_dma.h:293
@ VSF_DMA_DST_WIDTH_BYTE_1
Definition vsf_template_dma.h:270
@ VSF_DMA_SRC_WIDTH_BYTES_16
Definition vsf_template_dma.h:267
@ VSF_DMA_DST_ADDR_NO_CHANGE
Definition vsf_template_dma.h:261
@ VSF_DMA_DST_BURST_LENGTH_4
Definition vsf_template_dma.h:288
@ VSF_DMA_DST_BURST_LENGTH_1
Definition vsf_template_dma.h:286
@ VSF_DMA_SRC_ADDR_INCREMENT
Definition vsf_template_dma.h:255
@ VSF_DMA_MEMORY_TO_PERIPHERAL
Definition vsf_template_dma.h:251
@ VSF_DMA_DST_BURST_LENGTH_32
Definition vsf_template_dma.h:291
@ VSF_DMA_SRC_BURST_LENGTH_4
Definition vsf_template_dma.h:279
@ VSF_DMA_SRC_BURST_LENGTH_128
Definition vsf_template_dma.h:284
@ VSF_DMA_PRIOPIRY_VERY_HIGH
Definition vsf_template_dma.h:299
@ VSF_DMA_SRC_WIDTH_BYTE_1
Definition vsf_template_dma.h:263
@ VSF_DMA_MEMORY_TO_MEMORY
Definition vsf_template_dma.h:250
@ VSF_DMA_SRC_WIDTH_BYTES_4
Definition vsf_template_dma.h:265
@ VSF_DMA_DST_WIDTH_BYTES_8
Definition vsf_template_dma.h:273
@ VSF_DMA_SRC_BURST_LENGTH_1
Definition vsf_template_dma.h:277
@ VSF_DMA_PERIPHERA_TO_MEMORY
Definition vsf_template_dma.h:252
@ VSF_DMA_DST_WIDTH_BYTES_2
Definition vsf_template_dma.h:271
@ VSF_DMA_DST_WIDTH_BYTES_4
Definition vsf_template_dma.h:272
@ VSF_DMA_PRIOPIRY_LOW
Definition vsf_template_dma.h:296
@ VSF_DMA_SRC_BURST_LENGTH_2
Definition vsf_template_dma.h:278
@ VSF_DMA_SRC_ADDR_DECREMENT
Definition vsf_template_dma.h:256
@ VSF_DMA_DST_BURST_LENGTH_8
Definition vsf_template_dma.h:289
@ VSF_DMA_PERIPHERA_TO_PERIPHERAL
Definition vsf_template_dma.h:253
@ VSF_DMA_SRC_ADDR_NO_CHANGE
Definition vsf_template_dma.h:257
@ VSF_DMA_DST_BURST_LENGTH_16
Definition vsf_template_dma.h:290
@ VSF_DMA_SRC_BURST_LENGTH_8
Definition vsf_template_dma.h:280
@ VSF_DMA_DST_BURST_LENGTH_2
Definition vsf_template_dma.h:287
@ VSF_DMA_SRC_WIDTH_BYTES_32
Definition vsf_template_dma.h:268
@ VSF_DMA_SRC_BURST_LENGTH_32
Definition vsf_template_dma.h:282
@ VSF_DMA_PRIOPIRY_HIGH
Definition vsf_template_dma.h:298
@ VSF_DMA_PRIOPIRY_MEDIUM
Definition vsf_template_dma.h:297
@ VSF_DMA_DST_ADDR_DECREMENT
Definition vsf_template_dma.h:260
@ VSF_DMA_DST_ADDR_INCREMENT
Definition vsf_template_dma.h:259
struct vsf_dma_isr_t vsf_dma_isr_t
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:137
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 vsf_template_dma.h:427
struct vsf_dma_capability_t vsf_dma_capability_t
@ VSF_DMA_PRIOPIRY_COUNT
Definition vsf_template_dma.h:357
@ VSF_DMA_DST_WIDTH_MASK
Definition vsf_template_dma.h:330
@ VSF_DMA_SRC_WIDTH_MASK
Definition vsf_template_dma.h:322
@ VSF_DMA_MODE_ALL_BITS_MASK
Definition vsf_template_dma.h:364
@ VSF_DMA_DST_ADDR_MASK
Definition vsf_template_dma.h:317
@ VSF_DMA_SRC_BURST_MASK
Definition vsf_template_dma.h:338
@ VSF_DMA_DST_ADDR_COUNT
Definition vsf_template_dma.h:316
@ VSF_DMA_DIRECTION_COUNT
Definition vsf_template_dma.h:305
@ VSF_DMA_DST_BURST_COUNT
Definition vsf_template_dma.h:347
@ VSF_DMA_SRC_BURST_COUNT
Definition vsf_template_dma.h:337
@ VSF_DMA_SRC_ADDR_COUNT
Definition vsf_template_dma.h:311
@ VSF_DMA_SRC_ADDR_MASK
Definition vsf_template_dma.h:312
@ VSF_DMA_DST_WIDTH_COUNT
Definition vsf_template_dma.h:329
@ VSF_DMA_DIRECTION_MASK
Definition vsf_template_dma.h:306
@ VSF_DMA_SRC_WIDTH_COUNT
Definition vsf_template_dma.h:321
@ VSF_DMA_PRIOPIRY_MASK
Definition vsf_template_dma.h:358
@ VSF_DMA_MODE_MASK_COUNT
Definition vsf_template_dma.h:363
@ VSF_DMA_DST_BURST_MASK
Definition vsf_template_dma.h:348
struct vsf_dma_channel_status_t vsf_dma_channel_status_t
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:103
@ VSF_DMA_IRQ_COUNT
Definition vsf_template_dma.h:384
@ VSF_DMA_IRQ_ALL_BITS_MASK
Definition vsf_template_dma.h:385
vsf_err_t vsf_dma_channel_start(vsf_dma_t *dma_ptr, uint8_t channel, uint32_t src_address, uint32_t dst_address, uint32_t count)
Start a DMA channel transfer.
Definition dma_common.c:114
void vsf_dma_channel_release(vsf_dma_t *dma_ptr, uint8_t channel)
Release a DMA channel.
Definition dma_common.c:84
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:126
int8_t vsf_dma_channel_request(vsf_dma_t *dma_ptr, vsf_dma_channel_hint_t *channel_hint_ptr)
DMA request a new channel.
Definition dma_common.c:75
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:146
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:93
vsf_dma_irq_mask_t
Definition vsf_template_dma.h:376
@ VSF_DMA_IRQ_MASK_HALF_CPL
Definition vsf_template_dma.h:378
@ VSF_DMA_IRQ_MASK_CPL
Definition vsf_template_dma.h:377
@ VSF_DMA_IRQ_MASK_ERROR
Definition vsf_template_dma.h:379
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:164
struct vsf_dma_channel_cfg_t vsf_dma_channel_cfg_t
dma configuration
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 counter of bytes transferred for a specific DMA channel.
Definition dma_common.c:155
#define VSF_DMA_APIS(__prefix_name)
DMA API template, used to generate DMA type, specific prefix function declarations,...
Definition vsf_template_dma.h:230