21#if VSF_HAL_USE_SPI == ENABLED
23#define vsf_real_spi_t VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_t)
24#define vsf_real_spi_capability VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_capability)
25#define vsf_real_spi_ctrl VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_ctrl)
27#ifndef VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY
28# define VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
31#ifndef VSF_SPI_CFG_REIMPLEMENT_API_CTRL
32# define VSF_SPI_CFG_REIMPLEMENT_API_CTRL DISABLED
35#ifdef VSF_SPI_CFG_IMP_REMAP_PREFIX
36# undef VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY
37# define VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
40#if VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
41# ifndef VSF_SPI_CFG_CAPABILITY_SUPPORT_AUTO_CS
42# define VSF_SPI_CFG_CAPABILITY_SUPPORT_AUTO_CS 1
44# ifndef VSF_SPI_CFG_CAPABILITY_SUPPORT_MANUAL_CS
45# define VSF_SPI_CFG_CAPABILITY_SUPPORT_MANUAL_CS 1
47# ifndef VSF_SPI_CFG_CAPABILITY_CS_COUNT
48# define VSF_SPI_CFG_CAPABILITY_CS_COUNT 1
50# ifndef VSF_SPI_CFG_CAPABILITY_MAX_CLOCK_HZ
51# define VSF_SPI_CFG_CAPABILITY_MAX_CLOCK_HZ 0xFFFFFFFF
53# ifndef VSF_SPI_CFG_CAPABILITY_MIN_CLOCK_HZ
54# define VSF_SPI_CFG_CAPABILITY_MIN_CLOCK_HZ 1
60#if VSF_SPI_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
65 .support_software_cs = VSF_SPI_CFG_CAPABILITY_SUPPORT_MANUAL_CS,
66 .cs_count = VSF_SPI_CFG_CAPABILITY_CS_COUNT,
67 .max_clock_hz = VSF_SPI_CFG_CAPABILITY_MAX_CLOCK_HZ,
68 .min_clock_hz = VSF_SPI_CFG_CAPABILITY_MIN_CLOCK_HZ,
71 return spi_capability;
75#if VSF_SPI_CFG_REIMPLEMENT_API_CTRL == DISABLED
84#undef VSF_SPI_CFG_CAPABILITY_SUPPORT_AUTO_CS
85#undef VSF_SPI_CFG_CAPABILITY_SUPPORT_MANUAL_CS
86#undef VSF_SPI_CFG_CAPABILITY_CS_COUNT
87#undef VSF_SPI_CFG_CAPABILITY_MAX_CLOCK_HZ
88#undef VSF_SPI_CFG_CAPABILITY_MIN_CLOCK_HZ
90#undef vsf_real_spi_capability
91#undef vsf_real_spi_ctrl
98#ifdef VSF_SPI_CFG_IMP_REMAP_PREFIX
100# define vsf_imp_spi_t VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_t)
101# define vsf_imp_spi_init VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_init)
102# define vsf_imp_spi_enable VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_enable)
103# define vsf_imp_spi_disable VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_disable)
104# define vsf_imp_spi_irq_enable VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_irq_enable)
105# define vsf_imp_spi_irq_disable VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_irq_disable)
106# define vsf_imp_spi_status VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_status)
107# define vsf_imp_spi_capability VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_capability)
108# define vsf_imp_spi_cs_active VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_cs_active)
109# define vsf_imp_spi_cs_inactive VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_cs_inactive)
110# define vsf_imp_spi_fifo_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_fifo_transfer)
111# define vsf_imp_spi_request_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_request_transfer)
112# define vsf_imp_spi_cancel_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_cancel_transfer)
113# define vsf_imp_spi_get_transferred_count VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_get_transferred_count)
114# define vsf_imp_spi_ctrl VSF_MCONNECT(VSF_SPI_CFG_IMP_PREFIX, _spi_ctrl)
116# define vsf_remap_spi_t VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_t)
117# define vsf_remap_spi_init VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_init)
118# define vsf_remap_spi_enable VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_enable)
119# define vsf_remap_spi_disable VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_disable)
120# define vsf_remap_spi_irq_enable VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_irq_enable)
121# define vsf_remap_spi_irq_disable VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_irq_disable)
122# define vsf_remap_spi_status VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_status)
123# define vsf_remap_spi_capability VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_capability)
124# define vsf_remap_spi_cs_active VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_cs_active)
125# define vsf_remap_spi_cs_inactive VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_cs_inactive)
126# define vsf_remap_spi_fifo_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_fifo_transfer)
127# define vsf_remap_spi_request_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_request_transfer)
128# define vsf_remap_spi_cancel_transfer VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_cancel_transfer)
129# define vsf_remap_spi_get_transferred_count VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_get_transferred_count)
130# define vsf_remap_spi_ctrl VSF_MCONNECT(VSF_SPI_CFG_IMP_REMAP_PREFIX, _spi_ctrl)
132# define VSF_SPI_CFG_IMP_REMAP_FUNCTIONS \
133 vsf_err_t vsf_imp_spi_init(vsf_imp_spi_t *spi_ptr, vsf_spi_cfg_t *cfg_ptr) \
135 VSF_HAL_ASSERT(spi_ptr != NULL); \
136 return vsf_remap_spi_init(spi_ptr, cfg_ptr); \
138 void vsf_imp_spi_fini(vsf_imp_spi_t *spi_ptr) \
140 VSF_HAL_ASSERT(spi_ptr != NULL); \
141 vsf_remap_spi_fini(spi_ptr); \
143 fsm_rt_t vsf_imp_spi_enable(vsf_imp_spi_t *spi_ptr) \
145 VSF_HAL_ASSERT(spi_ptr != NULL); \
146 return vsf_remap_spi_enable(spi_ptr); \
148 fsm_rt_t vsf_imp_spi_disable(vsf_imp_spi_t *spi_ptr) \
150 VSF_HAL_ASSERT(spi_ptr != NULL); \
151 return vsf_remap_spi_disable(spi_ptr); \
153 void vsf_imp_spi_irq_enable(vsf_imp_spi_t *spi_ptr, vsf_spi_irq_mask_t irq_mask) \
155 VSF_HAL_ASSERT(spi_ptr != NULL); \
156 vsf_remap_spi_irq_enable(spi_ptr, irq_mask); \
158 void vsf_imp_spi_irq_disable(vsf_imp_spi_t *spi_ptr, vsf_spi_irq_mask_t irq_mask) \
160 VSF_HAL_ASSERT(spi_ptr != NULL); \
161 vsf_remap_spi_irq_disable(spi_ptr, irq_mask); \
163 vsf_spi_status_t vsf_imp_spi_status(vsf_imp_spi_t *spi_ptr) \
165 VSF_HAL_ASSERT(spi_ptr != NULL); \
166 return vsf_remap_spi_status(spi_ptr); \
168 vsf_err_t vsf_imp_spi_cs_active(vsf_imp_spi_t *spi_ptr, uint_fast8_t index) \
170 VSF_HAL_ASSERT(spi_ptr != NULL); \
171 return vsf_remap_spi_cs_active(spi_ptr, index); \
173 vsf_err_t vsf_imp_spi_cs_inactive(vsf_imp_spi_t *spi_ptr, uint_fast8_t index) \
175 VSF_HAL_ASSERT(spi_ptr != NULL); \
176 return vsf_remap_spi_cs_inactive(spi_ptr, index); \
178 void vsf_imp_spi_fifo_transfer(vsf_imp_spi_t *spi_ptr, \
179 void *out_buffer_ptr, \
180 uint_fast32_t* out_offset_ptr, \
181 void *in_buffer_ptr, \
182 uint_fast32_t* in_offset_ptr, \
185 VSF_HAL_ASSERT(spi_ptr != NULL); \
186 vsf_remap_spi_fifo_transfer(spi_ptr, \
187 out_buffer_ptr, out_offset_ptr, \
188 in_buffer_ptr, in_offset_ptr, \
191 vsf_err_t vsf_imp_spi_request_transfer(vsf_imp_spi_t *spi_ptr, void *out_buffer_ptr, \
192 void *in_buffer_ptr, uint_fast32_t count) \
194 VSF_HAL_ASSERT(spi_ptr != NULL); \
195 return vsf_remap_spi_request_transfer(spi_ptr, out_buffer_ptr, \
196 in_buffer_ptr, count); \
198 vsf_err_t vsf_imp_spi_cancel_transfer(vsf_imp_spi_t *spi_ptr) \
200 VSF_HAL_ASSERT(spi_ptr != NULL); \
201 return vsf_remap_spi_cancel_transfer(spi_ptr); \
203 void vsf_imp_spi_get_transferred_count(vsf_imp_spi_t *spi_ptr, \
204 uint_fast32_t * tx_count, uint_fast32_t *rx_count) \
206 VSF_HAL_ASSERT(spi_ptr != NULL); \
207 vsf_remap_spi_get_transferred_count(spi_ptr, tx_count, rx_count); \
209 vsf_spi_capability_t vsf_imp_spi_capability(vsf_imp_spi_t *spi_ptr) \
211 VSF_HAL_ASSERT(spi_ptr != NULL); \
212 return vsf_remap_spi_capability(spi_ptr); \
214 vsf_err_t vsf_imp_spi_ctrl(vsf_imp_spi_t *spi_ptr, vsf_spi_ctrl_t ctrl, void *param) \
216 VSF_HAL_ASSERT(spi_ptr != NULL); \
217 return vsf_remap_spi_ctrl(spi_ptr, ctrl, param); \
224#define VSF_HAL_TEMPLATE_IMP_NAME _spi
225#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _SPI
227#ifndef VSF_SPI_CFG_IMP_PREFIX
228# error "Please define VSF_SPI_CFG_IMP_PREFIX in spi driver"
231#ifndef VSF_SPI_CFG_IMP_UPCASE_PREFIX
232# error "Please define VSF_SPI_CFG_IMP_UPCASE_PREFIX in spi driver"
235#ifndef VSF_SPI_CFG_IMP_COUNT_MASK_PREFIX
236# define VSF_SPI_CFG_IMP_COUNT_MASK_PREFIX VSF_SPI_CFG_IMP_UPCASE_PREFIX
239#ifdef VSF_SPI_CFG_IMP_REMAP_FUNCTIONS
240# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_SPI_CFG_IMP_REMAP_FUNCTIONS
245#undef VSF_SPI_CFG_IMP_PREFIX
246#undef VSF_SPI_CFG_IMP_COUNT_MASK_PREFIX
247#undef VSF_SPI_CFG_IMP_UPCASE_PREFIX
248#undef VSF_SPI_CFG_IMP_LV0
249#undef VSF_SPI_CFG_IMP_REMAP_FUNCTIONS
250#undef VSF_SPI_CFG_IMP_HAS_OP
251#undef VSF_SPI_CFG_IMP_EXTERN_OP
254#undef vsf_imp_spi_init
255#undef vsf_imp_spi_enable
256#undef vsf_imp_spi_disable
257#undef vsf_imp_spi_irq_enable
258#undef vsf_imp_spi_irq_disable
259#undef vsf_imp_spi_status
260#undef vsf_imp_spi_capability
261#undef vsf_imp_spi_cs_active
262#undef vsf_imp_spi_cs_inactive
263#undef vsf_imp_spi_fifo_transfer
264#undef vsf_imp_spi_request_transfer
265#undef vsf_imp_spi_cancel_transfer
266#undef vsf_imp_spi_get_transferred_count
267#undef vsf_imp_spi_ctrl
269#undef vsf_remap_spi_t
270#undef vsf_remap_spi_init
271#undef vsf_remap_spi_enable
272#undef vsf_remap_spi_disable
273#undef vsf_remap_spi_irq_enable
274#undef vsf_remap_spi_irq_disable
275#undef vsf_remap_spi_status
276#undef vsf_remap_spi_capability
277#undef vsf_remap_spi_cs_active
278#undef vsf_remap_spi_cs_inactive
279#undef vsf_remap_spi_fifo_transfer
280#undef vsf_remap_spi_request_transfer
281#undef vsf_remap_spi_cancel_transfer
282#undef vsf_remap_spi_get_transferred_count
283#undef vsf_remap_spi_ctrl
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
Predefined VSF SPI capability that can be reimplemented in specific HAL drivers. Even if the hardware...
Definition vsf_template_spi.h:655
uint8_t support_hardware_cs
Hardware chip select support (1: supported, 0: not supported)
Definition vsf_template_spi.h:661
vsf_spi_ctrl_t
Predefined VSF SPI control commands that can be reimplemented in specific HAL drivers....
Definition vsf_template_spi.h:734