VSF Documented
vsf_template_i2s.h
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#ifndef __VSF_TEMPLATE_I2S_H__
19#define __VSF_TEMPLATE_I2S_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
38#ifndef VSF_I2S_CFG_MULTI_CLASS
39# define VSF_I2S_CFG_MULTI_CLASS ENABLED
40#endif
41
48#if defined(VSF_HW_I2S_COUNT) && !defined(VSF_HW_I2S_MASK)
49# define VSF_HW_I2S_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_I2S_COUNT)
50#endif
51
58#if defined(VSF_HW_I2S_MASK) && !defined(VSF_HW_I2S_COUNT)
59# define VSF_HW_I2S_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_I2S_MASK)
60#endif
61
69#ifndef VSF_I2S_CFG_PREFIX
70# if VSF_I2S_CFG_MULTI_CLASS == ENABLED
71# define VSF_I2S_CFG_PREFIX vsf
72# elif defined(VSF_HW_I2S_COUNT) && (VSF_HW_I2S_COUNT != 0)
73# define VSF_I2S_CFG_PREFIX vsf_hw
74# else
75# define VSF_I2S_CFG_PREFIX vsf
76# endif
77#endif
78
79
87#ifndef VSF_I2S_CFG_FUNCTION_RENAME
88# define VSF_I2S_CFG_FUNCTION_RENAME ENABLED
89#endif
90
99#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE
100# define VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE DISABLED
101#endif
102
111#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK
112# define VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
113#endif
114
123#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS
124# define VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
125#endif
126
127
128
137#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG
138# define VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG DISABLED
139#endif
140
150#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY
151# define VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
152#endif
153
162#ifndef VSF_I2S_CFG_INHERIT_HAL_CAPABILITY
163# define VSF_I2S_CFG_INHERIT_HAL_CAPABILITY ENABLED
164#endif
165
187#ifndef __VSF_I2S_CFG_SUPPORT_STANDARD_OPTIONAL
188# define __VSF_I2S_CFG_SUPPORT_STANDARD_OPTIONAL DISABLED
189#endif
190
191/*============================ MACROFIED FUNCTIONS ===========================*/
192
201#define VSF_I2S_APIS(__prefix_name) \
202 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, init, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
203 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, get_configuration, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
204 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, tx_init, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
205 __VSF_HAL_TEMPLATE_API(__prefix_name, void, i2s, tx_fini, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
206 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, tx_get_configuration, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
207 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, tx_start, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
208 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, rx_init, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
209 __VSF_HAL_TEMPLATE_API(__prefix_name, void, i2s, rx_fini, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
210 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, rx_get_configuration, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
211 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, rx_start, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
212 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, i2s, enable, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
213 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, i2s, disable, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
214 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_i2s_status_t, i2s, status, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
215 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_i2s_capability_t, i2s, capability, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr) \
216 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, ctrl, VSF_MCONNECT(__prefix_name, _t) *i2s_ptr, vsf_i2s_ctrl_t ctrl, void* param)
217
218/*============================ TYPES =========================================*/
219
220#if VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
221typedef enum vsf_i2s_mode_t {
222 VSF_I2S_MODE_MASTER = (0x01ul << 0), // select master mode
223 VSF_I2S_MODE_SLAVE = (0x00ul << 0), // select slave mode
224
225 VSF_I2S_DATA_BITLEN_16 = (0x01ul << 1),
226 VSF_I2S_DATA_BITLEN_24 = (0x02ul << 1),
227 VSF_I2S_DATA_BITLEN_32 = (0x03ul << 1),
228
229 VSF_I2S_FRAME_BITLEN_16 = (0x01ul << 3),
230 VSF_I2S_FRAME_BITLEN_24 = (0x02ul << 3),
231 VSF_I2S_FRAME_BITLEN_32 = (0x03ul << 3),
232
234 VSF_I2S_STANDARD_MSB = (0x02ul << 5),
235 VSF_I2S_STANDARD_LSB = (0x03ul << 5),
236
237 VSF_I2S_LRCK_POL = (0x01ul << 7), // normally used to switch LR channel
238 VSF_I2S_BCK_POL = (0x01ul << 8), // bck level while idle
239 VSF_I2S_MCLK_OUTPUT = (0x01ul << 9),
241#endif
242
243enum {
247
252
257
262
270};
271
272#if VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
273typedef enum vsf_i2s_irq_mask_t {
277#endif
278
279enum {
282};
283
284#if VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
285typedef struct vsf_i2s_status_t {
286 union {
289 };
291#endif
292
293#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
294typedef struct vsf_i2s_capability_t {
295#if VSF_I2S_CFG_INHERIT_HAL_CAPABILITY == ENABLED
297#endif
298 struct {
299 // sample rate converter
300 bool is_src_supported;
301 // double buffer
302 bool is_dbuffer_supported;
305#endif
306
307#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
316typedef enum vsf_i2s_ctrl_t {
336#endif
337
338#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
339typedef struct vsf_i2s_t vsf_i2s_t;
340
374typedef void vsf_i2s_isr_handler_t(void *target_ptr,
375 vsf_i2s_t *i2s_ptr,
377
385typedef struct vsf_i2s_isr_t {
393
401typedef struct vsf_i2s_cfg_t {
417#endif
418
419typedef struct vsf_i2s_op_t {
421#undef __VSF_HAL_TEMPLATE_API
422#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
424
425 VSF_I2S_APIS(vsf_i2s)
427
428#if VSF_I2S_CFG_MULTI_CLASS == ENABLED
429struct vsf_i2s_t {
431};
432#endif
433
434/*============================ GLOBAL VARIABLES ==============================*/
435/*============================ PROTOTYPES ====================================*/
436
455extern vsf_err_t vsf_i2s_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg);
456
470extern vsf_err_t vsf_i2s_tx_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg);
471
483extern void vsf_i2s_tx_fini(vsf_i2s_t *i2s_ptr);
484
499
511extern vsf_err_t vsf_i2s_tx_start(vsf_i2s_t *i2s_ptr);
512
526extern vsf_err_t vsf_i2s_rx_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg);
527
539extern void vsf_i2s_rx_fini(vsf_i2s_t *i2s_ptr);
540
555
567extern vsf_err_t vsf_i2s_rx_start(vsf_i2s_t *i2s_ptr);
568
580extern void vsf_i2s_fini(vsf_i2s_t *i2s_ptr);
581
593extern fsm_rt_t vsf_i2s_enable(vsf_i2s_t *i2s_ptr);
594
606extern fsm_rt_t vsf_i2s_disable(vsf_i2s_t *i2s_ptr);
607
620
633
654
677extern vsf_err_t vsf_i2s_ctrl(vsf_i2s_t *i2s_ptr, vsf_i2s_ctrl_t ctrl, void *param);
678
679/*============================ MACROFIED FUNCTIONS ===========================*/
680
682#if VSF_I2S_CFG_FUNCTION_RENAME == ENABLED
683# define __vsf_i2s_t VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_t)
684# define vsf_i2s_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
685# define vsf_i2s_get_configuration(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_get_configuration) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
686# define vsf_i2s_enable(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_enable) ((__vsf_i2s_t *)(__i2s))
687# define vsf_i2s_disable(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_disable) ((__vsf_i2s_t *)(__i2s))
688# define vsf_i2s_status(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_status) ((__vsf_i2s_t *)(__i2s))
689# define vsf_i2s_capability(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_capability) ((__vsf_i2s_t *)(__i2s))
690
691# define vsf_i2s_tx_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
692# define vsf_i2s_tx_fini(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_fini) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
693# define vsf_i2s_tx_get_configuration(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_get_configuration) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
694# define vsf_i2s_tx_start(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_start) ((__vsf_i2s_t *)(__i2s))
695
696# define vsf_i2s_rx_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
697# define vsf_i2s_rx_fini(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_fini) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
698# define vsf_i2s_rx_get_configuration(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_get_configuration) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
699# define vsf_i2s_rx_start(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_start) ((__vsf_i2s_t *)(__i2s))
700# define vsf_i2s_ctrl(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_ctrl) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
701#endif
703
704#ifdef __cplusplus
705}
706#endif
707
708#endif /*__VSF_TEMPLATE_I2S_H__*/
vsf_err_t
Definition __type.h:42
vsf_i2s_mode_t
Definition i2s.h:37
vsf_i2s_irq_mask_t
Definition i2s.h:32
vsf_arch_prio_t
Definition cortex_a_generic.h:85
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_i2s.h:294
inherit(vsf_peripheral_capability_t) struct
Definition vsf_template_i2s.h:296
i2s_capability
Definition vsf_template_i2s.h:303
i2s configuration
Definition vsf_template_i2s.h:401
vsf_i2s_mode_t mode
Definition vsf_template_i2s.h:402
uint16_t buffer_size
Definition vsf_template_i2s.h:410
vsf_i2s_isr_t isr
Definition vsf_template_i2s.h:414
uint8_t channel_num
Definition vsf_template_i2s.h:412
uint32_t hw_sample_rate
Definition vsf_template_i2s.h:406
uint32_t data_sample_rate
Definition vsf_template_i2s.h:404
uint8_t * buffer
Definition vsf_template_i2s.h:408
i2s interrupt configuration
Definition vsf_template_i2s.h:385
vsf_arch_prio_t prio
Definition vsf_template_i2s.h:390
vsf_i2s_isr_handler_t * handler_fn
Definition vsf_template_i2s.h:386
void * target_ptr
Definition vsf_template_i2s.h:388
Definition vsf_template_i2s.h:419
Definition vsf_template_i2s.h:285
inherit(vsf_peripheral_capability_t) union
Definition i2s.h:165
Definition vsf_template_i2s.h:429
const vsf_i2s_op_t * op
Definition vsf_template_i2s.h:430
Definition vsf_template_hal_driver.h:204
Definition vsf_template_hal_driver.h:197
void vsf_i2s_isr_handler_t(void *target_ptr, vsf_i2s_t *i2s_ptr, vsf_i2s_irq_mask_t irq_mask)
Definition i2s.h:188
vk_av_control_value_t value
Definition vsf_audio.h:171
fsm_rt_t
Definition vsf_fsm.h:315
void vsf_i2s_tx_fini(vsf_i2s_t *i2s_ptr)
Finalize i2s tx channel.
Definition i2s_common.c:55
vsf_err_t vsf_i2s_rx_get_configuration(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
Get the current configuration of i2s rx channel.
Definition i2s_common.c:101
vsf_i2s_capability_t vsf_i2s_capability(vsf_i2s_t *i2s_ptr)
Get the capability of i2s instance.
Definition i2s_common.c:147
vsf_err_t vsf_i2s_ctrl(vsf_i2s_t *i2s_ptr, vsf_i2s_ctrl_t ctrl, void *param)
Execute a control command on an I2S instance.
Definition i2s_common.c:166
@ VSF_I2S_IRQ_ALL_BITS_MASK
Definition vsf_template_i2s.h:280
vsf_err_t vsf_i2s_tx_get_configuration(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
Get the current configuration of i2s tx channel.
Definition i2s_common.c:64
vsf_err_t vsf_i2s_rx_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg)
Initialize i2s rx channel.
Definition i2s_common.c:83
vsf_i2s_status_t vsf_i2s_status(vsf_i2s_t *i2s_ptr)
Get the status of i2s instance.
Definition i2s_common.c:138
vsf_err_t vsf_i2s_get_configuration(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
Get the current configuration of an I2S instance.
Definition i2s_common.c:156
vsf_err_t vsf_i2s_rx_start(vsf_i2s_t *i2s_ptr)
Start i2s rx channel.
Definition i2s_common.c:111
void vsf_i2s_fini(vsf_i2s_t *i2s_ptr)
Finalize a i2s instance.
void vsf_i2s_rx_fini(vsf_i2s_t *i2s_ptr)
Finalize i2s rx channel.
Definition i2s_common.c:92
void vsf_i2s_isr_handler_t(void *target_ptr, vsf_i2s_t *i2s_ptr, vsf_i2s_irq_mask_t irq_mask)
i2s interrupt callback function prototype.
Definition vsf_template_i2s.h:374
struct vsf_i2s_capability_t vsf_i2s_capability_t
vsf_err_t vsf_i2s_tx_start(vsf_i2s_t *i2s_ptr)
Start i2s tx channel.
Definition i2s_common.c:74
vsf_err_t vsf_i2s_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg)
Initialize an I2S instance.
Definition i2s_common.c:37
vsf_err_t vsf_i2s_tx_init(vsf_i2s_t *i2s_ptr, vsf_i2s_cfg_t *i2s_cfg)
Initialize i2s tx channel.
Definition i2s_common.c:46
fsm_rt_t vsf_i2s_enable(vsf_i2s_t *i2s_ptr)
Enable I2S instance.
Definition i2s_common.c:120
#define VSF_I2S_APIS(__prefix_name)
I2S API template, used to generate I2S type, specific prefix function declarations,...
Definition vsf_template_i2s.h:201
struct vsf_i2s_cfg_t vsf_i2s_cfg_t
i2s configuration
struct vsf_i2s_isr_t vsf_i2s_isr_t
i2s interrupt configuration
struct vsf_i2s_status_t vsf_i2s_status_t
vsf_i2s_mode_t
Definition vsf_template_i2s.h:221
@ VSF_I2S_MCLK_OUTPUT
Definition vsf_template_i2s.h:239
@ VSF_I2S_STANDARD_LSB
Definition vsf_template_i2s.h:235
@ VSF_I2S_DATA_BITLEN_16
Definition vsf_template_i2s.h:225
@ VSF_I2S_FRAME_BITLEN_32
Definition vsf_template_i2s.h:231
@ VSF_I2S_FRAME_BITLEN_16
Definition vsf_template_i2s.h:229
@ VSF_I2S_STANDARD_MSB
Definition vsf_template_i2s.h:234
@ VSF_I2S_MODE_MASTER
Definition vsf_template_i2s.h:222
@ VSF_I2S_LRCK_POL
Definition vsf_template_i2s.h:237
@ VSF_I2S_DATA_BITLEN_32
Definition vsf_template_i2s.h:227
@ VSF_I2S_STANDARD_PHILIPS
Definition vsf_template_i2s.h:233
@ VSF_I2S_DATA_BITLEN_24
Definition vsf_template_i2s.h:226
@ VSF_I2S_FRAME_BITLEN_24
Definition vsf_template_i2s.h:230
@ VSF_I2S_MODE_SLAVE
Definition vsf_template_i2s.h:223
@ VSF_I2S_BCK_POL
Definition vsf_template_i2s.h:238
fsm_rt_t vsf_i2s_disable(vsf_i2s_t *i2s_ptr)
Disable i2s instance.
Definition i2s_common.c:129
@ VSF_I2S_FRAME_BITLEN_COUNT
Definition vsf_template_i2s.h:253
@ VSF_I2S_DATA_BITLEN_MASK
Definition vsf_template_i2s.h:249
@ VSF_I2S_STANDARD_COUNT
Definition vsf_template_i2s.h:258
@ VSF_I2S_FRAME_BITLEN_MASK
Definition vsf_template_i2s.h:254
@ VSF_I2S_MODE_COUNT
Definition vsf_template_i2s.h:244
@ VSF_I2S_MODE_MASK
Definition vsf_template_i2s.h:245
@ VSF_I2S_MODE_ALL_BITS_MASK
Definition vsf_template_i2s.h:263
@ VSF_I2S_DATA_BITLEN_COUNT
Definition vsf_template_i2s.h:248
@ VSF_I2S_STANDARD_MASK
Definition vsf_template_i2s.h:259
vsf_i2s_ctrl_t
I2S control commands for hardware-specific operations.
Definition vsf_template_i2s.h:316
@ __VSF_I2S_CTRL_DUMMY
Dummy value for compilation, required when no actual control commands are defined.
Definition vsf_template_i2s.h:334
vsf_i2s_irq_mask_t
Definition vsf_template_i2s.h:273
@ VSF_I2S_IRQ_MASK_RX_TGL_BUFFER
Definition vsf_template_i2s.h:275
@ VSF_I2S_IRQ_MASK_TX_TGL_BUFFER
Definition vsf_template_i2s.h:274
Generated from commit: vsfteam/vsf@111ae53