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, _dma_t) *dma_ptr, vsf_dma_cfg_t *cfg_ptr) \
232 __VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, fini, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
233 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_capability_t, dma, capability, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr) \
234 __VSF_HAL_TEMPLATE_API(__prefix_name, int8_t, dma, channel_request, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, vsf_dma_channel_hint_t *channel_hint_ptr) \
235 __VSF_HAL_TEMPLATE_API(__prefix_name, void, dma, channel_release, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel) \
236 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_config, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel, vsf_dma_channel_cfg_t *cfg_ptr) \
237 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_start, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel, uint32_t src_address, uint32_t dst_address, uint32_t count) \
238 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_cancel, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel) \
239 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_sg_config_desc, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel, vsf_dma_isr_t isr, vsf_dma_channel_sg_desc_t *scatter_gather_cfg, uint32_t sg_count) \
240 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, dma, channel_sg_start, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel) \
241 __VSF_HAL_TEMPLATE_API(__prefix_name, uint32_t, dma, channel_get_transferred_count, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel) \
242 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_dma_channel_status_t, dma, channel_status, VSF_MCONNECT(__prefix_name, _dma_t) *dma_ptr, uint8_t channel)
246#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE == DISABLED
373#if VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
389#if VSF_DMA_CFG_REIMPLEMENT_CFG_TYPE_CFG == DISABLED
402#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT == DISABLED
422#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG == DISABLED
443#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG == DISABLED
466#if VSF_DMA_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
477#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
479#if VSF_DMA_CFG_INHERIT_HAL_CAPABILITY == ENABLED
491#undef __VSF_HAL_TEMPLATE_API
492#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
498#if VSF_DMA_CFG_MULTI_CLASS == ENABLED
726#if VSF_DMA_CFG_FUNCTION_RENAME == ENABLED
727# define __vsf_dma_t VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_t)
728# define vsf_dma_init(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_init)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
729# define vsf_dma_fini(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_fini)((__vsf_dma_t *)(__DMA))
730# define vsf_dma_capability(__DMA) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_capability)((__vsf_dma_t *)(__DMA))
731# define vsf_dma_channel_request(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_request)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
732# define vsf_dma_channel_release(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_release)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
733# define vsf_dma_channel_config(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_config)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
734# define vsf_dma_channel_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
735# 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__)
736# define vsf_dma_channel_sg_start(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_sg_start)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
737# define vsf_dma_channel_cancel(__DMA, ...) VSF_MCONNECT(VSF_DMA_CFG_PREFIX, _dma_channel_cancel)((__vsf_dma_t *)(__DMA), ##__VA_ARGS__)
738# 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__)
739# 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:478
uint8_t channel_count
Definition vsf_template_dma.h:485
uint32_t max_request_count
Definition vsf_template_dma.h:484
inherit(vsf_peripheral_capability_t) vsf_dma_irq_mask_t irq_mask
Configuration structure for DMA.
Definition vsf_template_dma.h:397
vsf_arch_prio_t prio
Definition vsf_template_dma.h:398
dma configuration
Definition vsf_template_dma.h:433
uint8_t src_idx
Index of the peripheral or memory corresponding to the source address of the DMA.
Definition vsf_template_dma.h:437
vsf_dma_channel_mode_t mode
Definition vsf_template_dma.h:434
uint8_t dst_idx
Index of the peripheral or memory corresponding to the destination address of the DMA.
Definition vsf_template_dma.h:439
vsf_dma_isr_t isr
Definition vsf_template_dma.h:435
DMA channel hint structure.
Definition vsf_template_dma.h:410
uint8_t channel
Definition vsf_template_dma.h:413
uint8_t request_line
Definition vsf_template_dma.h:418
DMA scatter-gather descriptor structure.
Definition vsf_template_dma.h:457
uint32_t next
Next descriptor address.
Definition vsf_template_dma.h:462
uint32_t count
Number of bytes to be transferred.
Definition vsf_template_dma.h:461
uint32_t dst_address
Destination address.
Definition vsf_template_dma.h:460
vsf_dma_channel_mode_t mode
DMA channel mode.
Definition vsf_template_dma.h:458
uint32_t src_address
Source address.
Definition vsf_template_dma.h:459
Definition vsf_template_dma.h:467
Definition vsf_template_dma.h:427
vsf_dma_isr_handler_t * handler_fn
Definition vsf_template_dma.h:428
void * target_ptr
Definition vsf_template_dma.h:429
Definition vsf_template_dma.h:489
Definition vsf_template_dma.h:499
const vsf_dma_op_t * op
Definition vsf_template_dma.h:500
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
vsf_adc_isr_t isr
Definition adc.h:109
vsf_dma_channel_mode_t
Definition dma.h:118
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:181
vsf_dma_irq_mask_t
Definition dma.h:172
vsf_dma_channel_mode_t
Definition vsf_template_dma.h:247
@ VSF_DMA_DST_WIDTH_BYTES_32
Definition vsf_template_dma.h:273
@ VSF_DMA_SRC_BURST_LENGTH_64
Definition vsf_template_dma.h:281
@ VSF_DMA_DST_BURST_LENGTH_64
Definition vsf_template_dma.h:290
@ VSF_DMA_SRC_WIDTH_BYTES_8
Definition vsf_template_dma.h:264
@ VSF_DMA_SRC_WIDTH_BYTES_2
Definition vsf_template_dma.h:262
@ VSF_DMA_DST_WIDTH_BYTES_16
Definition vsf_template_dma.h:272
@ VSF_DMA_SRC_BURST_LENGTH_16
Definition vsf_template_dma.h:279
@ VSF_DMA_DST_BURST_LENGTH_128
Definition vsf_template_dma.h:291
@ VSF_DMA_DST_WIDTH_BYTE_1
Definition vsf_template_dma.h:268
@ VSF_DMA_SRC_WIDTH_BYTES_16
Definition vsf_template_dma.h:265
@ VSF_DMA_DST_ADDR_NO_CHANGE
Definition vsf_template_dma.h:259
@ VSF_DMA_DST_BURST_LENGTH_4
Definition vsf_template_dma.h:286
@ VSF_DMA_DST_BURST_LENGTH_1
Definition vsf_template_dma.h:284
@ VSF_DMA_SRC_ADDR_INCREMENT
Definition vsf_template_dma.h:253
@ VSF_DMA_MEMORY_TO_PERIPHERAL
Definition vsf_template_dma.h:249
@ VSF_DMA_DST_BURST_LENGTH_32
Definition vsf_template_dma.h:289
@ VSF_DMA_SRC_BURST_LENGTH_4
Definition vsf_template_dma.h:277
@ VSF_DMA_SRC_BURST_LENGTH_128
Definition vsf_template_dma.h:282
@ VSF_DMA_PRIOPIRY_VERY_HIGH
Definition vsf_template_dma.h:297
@ VSF_DMA_SRC_WIDTH_BYTE_1
Definition vsf_template_dma.h:261
@ VSF_DMA_MEMORY_TO_MEMORY
Definition vsf_template_dma.h:248
@ VSF_DMA_SRC_WIDTH_BYTES_4
Definition vsf_template_dma.h:263
@ VSF_DMA_DST_WIDTH_BYTES_8
Definition vsf_template_dma.h:271
@ VSF_DMA_SRC_BURST_LENGTH_1
Definition vsf_template_dma.h:275
@ VSF_DMA_PERIPHERA_TO_MEMORY
Definition vsf_template_dma.h:250
@ VSF_DMA_DST_WIDTH_BYTES_2
Definition vsf_template_dma.h:269
@ VSF_DMA_DST_WIDTH_BYTES_4
Definition vsf_template_dma.h:270
@ VSF_DMA_PRIOPIRY_LOW
Definition vsf_template_dma.h:294
@ VSF_DMA_SRC_BURST_LENGTH_2
Definition vsf_template_dma.h:276
@ VSF_DMA_SRC_ADDR_DECREMENT
Definition vsf_template_dma.h:254
@ VSF_DMA_DST_BURST_LENGTH_8
Definition vsf_template_dma.h:287
@ VSF_DMA_PERIPHERA_TO_PERIPHERAL
Definition vsf_template_dma.h:251
@ VSF_DMA_SRC_ADDR_NO_CHANGE
Definition vsf_template_dma.h:255
@ VSF_DMA_DST_BURST_LENGTH_16
Definition vsf_template_dma.h:288
@ VSF_DMA_SRC_BURST_LENGTH_8
Definition vsf_template_dma.h:278
@ VSF_DMA_DST_BURST_LENGTH_2
Definition vsf_template_dma.h:285
@ VSF_DMA_SRC_WIDTH_BYTES_32
Definition vsf_template_dma.h:266
@ VSF_DMA_SRC_BURST_LENGTH_32
Definition vsf_template_dma.h:280
@ VSF_DMA_PRIOPIRY_HIGH
Definition vsf_template_dma.h:296
@ VSF_DMA_PRIOPIRY_MEDIUM
Definition vsf_template_dma.h:295
@ VSF_DMA_DST_ADDR_DECREMENT
Definition vsf_template_dma.h:258
@ VSF_DMA_DST_ADDR_INCREMENT
Definition vsf_template_dma.h:257
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: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 vsf_template_dma.h:425
struct vsf_dma_capability_t vsf_dma_capability_t
@ VSF_DMA_PRIOPIRY_COUNT
Definition vsf_template_dma.h:355
@ VSF_DMA_DST_WIDTH_MASK
Definition vsf_template_dma.h:328
@ VSF_DMA_SRC_WIDTH_MASK
Definition vsf_template_dma.h:320
@ VSF_DMA_MODE_ALL_BITS_MASK
Definition vsf_template_dma.h:362
@ VSF_DMA_DST_ADDR_MASK
Definition vsf_template_dma.h:315
@ VSF_DMA_SRC_BURST_MASK
Definition vsf_template_dma.h:336
@ VSF_DMA_DST_ADDR_COUNT
Definition vsf_template_dma.h:314
@ VSF_DMA_DIRECTION_COUNT
Definition vsf_template_dma.h:303
@ VSF_DMA_DST_BURST_COUNT
Definition vsf_template_dma.h:345
@ VSF_DMA_SRC_BURST_COUNT
Definition vsf_template_dma.h:335
@ VSF_DMA_SRC_ADDR_COUNT
Definition vsf_template_dma.h:309
@ VSF_DMA_SRC_ADDR_MASK
Definition vsf_template_dma.h:310
@ VSF_DMA_DST_WIDTH_COUNT
Definition vsf_template_dma.h:327
@ VSF_DMA_DIRECTION_MASK
Definition vsf_template_dma.h:304
@ VSF_DMA_SRC_WIDTH_COUNT
Definition vsf_template_dma.h:319
@ VSF_DMA_PRIOPIRY_MASK
Definition vsf_template_dma.h:356
@ VSF_DMA_MODE_MASK_COUNT
Definition vsf_template_dma.h:361
@ VSF_DMA_DST_BURST_MASK
Definition vsf_template_dma.h:346
struct vsf_dma_channel_status_t vsf_dma_channel_status_t
@ VSF_DMA_IRQ_COUNT
Definition vsf_template_dma.h:382
@ VSF_DMA_IRQ_ALL_BITS_MASK
Definition vsf_template_dma.h:383
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:93
void vsf_dma_channel_release(vsf_dma_t *dma_ptr, uint8_t channel)
Release a DMA channel.
Definition dma_common.c:74
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:105
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:65
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:125
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:83
vsf_dma_irq_mask_t
Definition vsf_template_dma.h:374
@ VSF_DMA_IRQ_MASK_HALF_CPL
Definition vsf_template_dma.h:376
@ VSF_DMA_IRQ_MASK_CPL
Definition vsf_template_dma.h:375
@ VSF_DMA_IRQ_MASK_ERROR
Definition vsf_template_dma.h:377
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:143
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:56
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:134
#define VSF_DMA_APIS(__prefix_name)
DMA API template, used to generate DMA type, specific prefix function declarations,...
Definition vsf_template_dma.h:230