VSF Documented
dma_template.inc
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#if VSF_HAL_USE_DMA == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#define vsf_real_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_t)
24#define vsf_real_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_capability)
25#define vsf_real_dma_channel_sg_config_desc VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_sg_config_desc)
26#define vsf_real_dma_channel_sg_start VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_sg_start)
27
28#ifndef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
29# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
30#endif
31
32#ifndef VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG_DESC
33# define VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG_DESC DISABLED
34#endif
35
36#ifndef VSF_DMA_CFG_REIMPLEMENT_API_SG_START
37# define VSF_DMA_CFG_REIMPLEMENT_API_SG_START DISABLED
38#endif
39
40#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
41# undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
42# define VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
43#endif
44
45#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
46# ifndef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
47# define VSF_DMA_CFG_CAPABILITY_IRQ_MASK VSF_DMA_IRQ_ALL_BITS_MASK
48# endif
49# ifndef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
50# define VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT 0xFFFFFFFF
51# endif
52# ifndef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
53# define VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT 8
54# endif
55#endif
56
57/*============================ LOCAL VARIABLES ===============================*/
58/*============================ IMPLEMENTATION ================================*/
59
60#if VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
61vsf_dma_capability_t vsf_real_dma_capability(vsf_real_dma_t *dma_ptr)
62{
63 vsf_dma_capability_t dma_capability = {
64 .irq_mask = VSF_DMA_CFG_CAPABILITY_IRQ_MASK,
65 .max_request_count = VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT,
66 .channel_count = VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT,
67 };
68
69 return dma_capability;
70}
71#endif
72
73#if VSF_DMA_CFG_REIMPLEMENT_API_SG_CONFIG == DISABLED
74vsf_err_t vsf_real_dma_channel_sg_config_desc(vsf_real_dma_t *dma_ptr, uint8_t channel, vsf_dma_isr_t isr,
75 vsf_dma_channel_sg_desc_t *sg_desc_ptr, uint32_t sg_count)
76{
77 VSF_HAL_ASSERT(dma_ptr != NULL);
78 VSF_HAL_ASSERT(sg_desc_ptr != NULL);
79 VSF_HAL_ASSERT(sg_count > 0);
80
81 if ((NULL == dma_ptr) || (NULL == sg_desc_ptr) || (sg_count == 0)) {
83 }
84
85 // TODO
87}
88#endif
89
90#if VSF_DMA_CFG_REIMPLEMENT_API_SG_START == DISABLED
91vsf_err_t vsf_real_dma_channel_sg_start(vsf_real_dma_t *dma_ptr, uint8_t channel)
92{
93 VSF_HAL_ASSERT(dma_ptr != NULL);
94
95 if (NULL == dma_ptr) {
97 }
98
99 // TODO
100 return VSF_ERR_NOT_SUPPORT;
101}
102#endif
103
104/*============================ MACROS ========================================*/
105
106#undef VSF_DMA_CFG_REIMPLEMENT_API_CAPABILITY
107#undef VSF_DMA_CFG_CAPABILITY_IRQ_MASK
108#undef VSF_DMA_CFG_CAPABILITY_MAX_REQUEST_COUNT
109#undef VSF_DMA_CFG_CAPABILITY_CHANNEL_COUNT
110#undef vsf_real_dma_t
111#undef vsf_real_dma_capability
112
113/*============================ LOCAL VARIABLES ===============================*/
114/*============================ IMPLEMENTATION ================================*/
115/*============================ MACROS ========================================*/
116
117
118#ifdef VSF_DMA_CFG_IMP_REMAP_PREFIX
119# define vsf_imp_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_t)
120# define vsf_imp_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_init)
121# define vsf_imp_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_fini)
122# define vsf_imp_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_capability)
123# define vsf_imp_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_request)
124# define vsf_imp_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_release)
125# define vsf_imp_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_config)
126# define vsf_imp_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_start)
127# define vsf_imp_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_cancel)
128# define vsf_imp_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_get_transferred_count)
129# define vsf_imp_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_status)
130
131# define vsf_remap_dma_t VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_t)
132# define vsf_remap_dma_init VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_init)
133# define vsf_remap_dma_fini VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_fini)
134# define vsf_remap_dma_capability VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_capability)
135# define vsf_remap_dma_channel_request VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_request)
136# define vsf_remap_dma_channel_release VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_release)
137# define vsf_remap_dma_channel_config VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_config)
138# define vsf_remap_dma_channel_start VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_start)
139# define vsf_remap_dma_channel_cancel VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_cancel)
140# define vsf_remap_dma_channel_get_transferred_count VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_get_transferred_count)
141# define vsf_remap_dma_channel_status VSF_MCONNECT(VSF_DMA_CFG_IMP_REMAP_PREFIX, _dma_channel_status)
142
143# define VSF_DMA_CFG_IMP_REMAP_FUNCTIONS \
144 vsf_err_t vsf_imp_dma_init(vsf_imp_dma_t *dma_ptr) \
145 { \
146 VSF_HAL_ASSERT(dma_ptr != NULL); \
147 return vsf_remap_dma_init(dma_ptr); \
148 } \
149 void vsf_imp_dma_fini(vsf_imp_dma_t *dma_ptr) \
150 { \
151 VSF_HAL_ASSERT(dma_ptr != NULL); \
152 vsf_remap_dma_fini(dma_ptr); \
153 } \
154 vsf_dma_capability_t vsf_imp_dma_capability(vsf_imp_dma_t *dma_ptr) \
155 { \
156 VSF_HAL_ASSERT(dma_ptr != NULL); \
157 return vsf_remap_dma_capability(dma_ptr); \
158 } \
159 int8_t vsf_imp_dma_channel_request(vsf_imp_dma_t *dma_ptr, void *filter_param) \
160 { \
161 VSF_HAL_ASSERT(dma_ptr != NULL); \
162 return vsf_remap_dma_channel_request(dma_ptr, filter_param); \
163 } \
164 void vsf_imp_dma_channel_release(vsf_imp_dma_t *dma_ptr, int8_t channel) \
165 { \
166 VSF_HAL_ASSERT(dma_ptr != NULL); \
167 vsf_remap_dma_channel_release(dma_ptr, channel); \
168 } \
169 vsf_err_t vsf_imp_dma_channel_config(vsf_imp_dma_t *dma_ptr, int8_t channel, \
170 vsf_dma_channel_cfg_t *cfg_ptr) \
171 { \
172 VSF_HAL_ASSERT(dma_ptr != NULL); \
173 return vsf_remap_dma_channel_config(dma_ptr, channel, cfg_ptr); \
174 } \
175 vsf_err_t vsf_imp_dma_channel_start(vsf_imp_dma_t *dma_ptr, int8_t channel, \
176 uint32_t src_address, uint32_t dst_address, \
177 uint32_t count) \
178 { \
179 VSF_HAL_ASSERT(dma_ptr != NULL); \
180 return vsf_remap_dma_channel_start(dma_ptr, channel, src_address, \
181 dst_address, count); \
182 } \
183 vsf_err_t vsf_imp_dma_channel_cancel(vsf_imp_dma_t *dma_ptr, int8_t channel) \
184 { \
185 VSF_HAL_ASSERT(dma_ptr != NULL); \
186 return vsf_remap_dma_channel_cancel(dma_ptr, channel); \
187 } \
188 vsf_err_t vsf_imp_dma_channel_get_transferred_count(vsf_imp_dma_t *dma_ptr, \
189 int8_t channel) \
190 { \
191 VSF_HAL_ASSERT(dma_ptr != NULL); \
192 return vsf_remap_dma_channel_get_transferred_count(dma_ptr, channel); \
193 } \
194 vsf_dma_channel_status_t vsf_imp_dma_channel_status(vsf_imp_dma_t *dma_ptr, \
195 int8_t channel) \
196 { \
197 VSF_HAL_ASSERT(dma_ptr != NULL); \
198 return vsf_remap_dma_channel_status(dma_ptr, channel); \
199 }
200#endif
201
202
203/*============================ GLOBAL VARIABLES ==============================*/
204
205#define VSF_HAL_TEMPLATE_IMP_NAME _dma
206#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _DMA
207
208#if !defined(VSF_DMA_CFG_IMP_PREFIX) && !defined(VSF_DMA_CFG_IMP_DEVICE_PREFIX)
209# error "Please define VSF_DMA_CFG_IMP_PREFIX in dma driver"
210#endif
211
212#if !defined(VSF_DMA_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_DMA_CFG_IMP_DEVICE_UPCASE_PREFIX)
213# error "Please define VSF_DMA_CFG_IMP_UPCASE_PREFIX in dma driver"
214#endif
215
216#ifndef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
217# define VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX VSF_DMA_CFG_IMP_UPCASE_PREFIX
218#endif
219
220#ifdef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
221# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
222#endif
223
225
226#undef VSF_DMA_CFG_IMP_PREFIX
227#undef VSF_DMA_CFG_IMP_COUNT_MASK_PREFIX
228#undef VSF_DMA_CFG_IMP_UPCASE_PREFIX
229#undef VSF_DMA_CFG_IMP_DEVICE_PREFIX
230#undef VSF_DMA_CFG_IMP_DEVICE_UPCASE_PREFIX
231#undef VSF_DMA_CFG_IMP_LV0
232#undef VSF_DMA_CFG_IMP_REMAP_FUNCTIONS
233#undef VSF_DMA_CFG_IMP_HAS_OP
234#undef VSF_DMA_CFG_IMP_EXTERN_OP
235
236#undef vsf_imp_dma_t
237#undef vsf_imp_dma_init
238#undef vsf_imp_dma_fini
239#undef vsf_imp_dma_capability
240#undef vsf_imp_dma_channel_request
241#undef vsf_imp_dma_channel_release
242#undef vsf_imp_dma_channel_config
243#undef vsf_imp_dma_channel_start
244#undef vsf_imp_dma_channel_cancel
245#undef vsf_imp_dma_channel_get_transferred_count
246#undef vsf_imp_dma_channel_status
247
248#undef vsf_remap_dma_t
249#undef vsf_remap_dma_init
250#undef vsf_remap_dma_fini
251#undef vsf_remap_dma_capability
252#undef vsf_remap_dma_channel_request
253#undef vsf_remap_dma_channel_release
254#undef vsf_remap_dma_channel_config
255#undef vsf_remap_dma_channel_start
256#undef vsf_remap_dma_channel_cancel
257#undef vsf_remap_dma_channel_get_transferred_count
258#undef vsf_remap_dma_channel_status
259
260#endif /* VSF_HAL_USE_DMA */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_INVALID_PARAMETER
invalid parameter
Definition __type.h:52
#define NULL
Definition lvgl.h:26
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_dma.h:478
uint32_t max_request_count
Definition vsf_template_dma.h:484
DMA scatter-gather descriptor structure.
Definition vsf_template_dma.h:457
Definition vsf_template_dma.h:427
vsf_adc_isr_t isr
Definition adc.h:109
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
Generated from commit: vsfteam/vsf@0c4049f