18#ifndef __VSF_TEMPLATE_I2S_H__
19#define __VSF_TEMPLATE_I2S_H__
38#ifndef VSF_I2S_CFG_MULTI_CLASS
39# define VSF_I2S_CFG_MULTI_CLASS ENABLED
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)
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)
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
75# define VSF_I2S_CFG_PREFIX vsf
87#ifndef VSF_I2S_CFG_FUNCTION_RENAME
88# define VSF_I2S_CFG_FUNCTION_RENAME ENABLED
99#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE
100# define VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE DISABLED
111#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK
112# define VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
123#ifndef VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS
124# define VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
137#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
138# define VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG DISABLED
150#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
151# define VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
162#ifndef VSF_I2S_CFG_INHERIT_HAL_CAPABILITY
163# define VSF_I2S_CFG_INHERIT_HAL_CAPABILITY ENABLED
176#define VSF_I2S_APIS(__prefix_name) \
177 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, init, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
178 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, tx_init, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
179 __VSF_HAL_TEMPLATE_API(__prefix_name, void, i2s, tx_fini, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
180 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, tx_start, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
181 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, rx_init, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
182 __VSF_HAL_TEMPLATE_API(__prefix_name, void, i2s, rx_fini, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
183 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, i2s, rx_start, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
184 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, i2s, enable, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
185 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, i2s, disable, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
186 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_i2s_status_t, i2s, status, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr) \
187 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_i2s_capability_t, i2s, capability, VSF_MCONNECT(__prefix_name, _i2s_t) *i2s_ptr)
191#if VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
243#if VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
255#if VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
264#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
266#if VSF_I2S_CFG_INHERIT_HAL_CAPABILITY == ENABLED
271 bool is_src_supported;
273 bool is_dbuffer_supported;
278#if VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
361#undef __VSF_HAL_TEMPLATE_API
362#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
368#if VSF_I2S_CFG_MULTI_CLASS == ENABLED
547#if VSF_I2S_CFG_FUNCTION_RENAME == ENABLED
548# define __vsf_i2s_t VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_t)
549# define vsf_i2s_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
550# define vsf_i2s_enable(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_enable) ((__vsf_i2s_t *)(__i2s))
551# define vsf_i2s_disable(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_disable) ((__vsf_i2s_t *)(__i2s))
552# define vsf_i2s_status(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_status) ((__vsf_i2s_t *)(__i2s))
553# define vsf_i2s_capability(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_capability) ((__vsf_i2s_t *)(__i2s))
555# define vsf_i2s_tx_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
556# define vsf_i2s_tx_fini(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_fini) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
557# define vsf_i2s_tx_start(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_tx_start) ((__vsf_i2s_t *)(__i2s))
559# define vsf_i2s_rx_init(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_init) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
560# define vsf_i2s_rx_fini(__i2s, ...) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_fini) ((__vsf_i2s_t *)(__i2s), ##__VA_ARGS__)
561# define vsf_i2s_rx_start(__i2s) VSF_MCONNECT(VSF_I2S_CFG_PREFIX, _i2s_rx_start) ((__vsf_i2s_t *)(__i2s))
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:88
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:265
inherit(vsf_peripheral_capability_t) struct
Definition vsf_template_i2s.h:267
i2s_capability
Definition vsf_template_i2s.h:274
i2s configuration
Definition vsf_template_i2s.h:341
vsf_i2s_mode_t mode
Definition vsf_template_i2s.h:342
uint16_t buffer_size
Definition vsf_template_i2s.h:350
vsf_i2s_isr_t isr
Definition vsf_template_i2s.h:354
uint8_t channel_num
Definition vsf_template_i2s.h:352
uint32_t hw_sample_rate
Definition vsf_template_i2s.h:346
uint32_t data_sample_rate
Definition vsf_template_i2s.h:344
uint8_t * buffer
Definition vsf_template_i2s.h:348
i2s interrupt configuration
Definition vsf_template_i2s.h:325
vsf_arch_prio_t prio
Definition vsf_template_i2s.h:330
vsf_i2s_isr_handler_t * handler_fn
Definition vsf_template_i2s.h:326
void * target_ptr
Definition vsf_template_i2s.h:328
Definition vsf_template_i2s.h:359
Definition vsf_template_i2s.h:256
Definition vsf_template_i2s.h:369
const vsf_i2s_op_t * op
Definition vsf_template_i2s.h:370
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
void vsf_i2s_isr_handler_t(void *target_ptr, vsf_i2s_t *i2s_ptr, vsf_i2s_irq_mask_t irq_mask)
Definition i2s.h:187
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_i2s_capability_t vsf_i2s_capability(vsf_i2s_t *i2s_ptr)
Get the capability of i2s instance.
Definition i2s_common.c:127
@ VSF_I2S_IRQ_ALL_BITS_MASK
Definition vsf_template_i2s.h:251
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:73
vsf_i2s_status_t vsf_i2s_status(vsf_i2s_t *i2s_ptr)
Get the status of i2s instance.
Definition i2s_common.c:118
vsf_err_t vsf_i2s_rx_start(vsf_i2s_t *i2s_ptr)
Start i2s rx channel.
Definition i2s_common.c:91
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:82
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:314
struct vsf_i2s_capability_t vsf_i2s_capability_t
@ VSF_I2S_FRAME_BITLEN_COUNT
Definition vsf_template_i2s.h:224
@ VSF_I2S_DATA_BITLEN_MASK
Definition vsf_template_i2s.h:220
@ VSF_I2S_STANDARD_COUNT
Definition vsf_template_i2s.h:229
@ VSF_I2S_FRAME_BITLEN_MASK
Definition vsf_template_i2s.h:225
@ VSF_I2S_MODE_COUNT
Definition vsf_template_i2s.h:215
@ VSF_I2S_MODE_MASK
Definition vsf_template_i2s.h:216
@ VSF_I2S_MODE_ALL_BITS_MASK
Definition vsf_template_i2s.h:234
@ VSF_I2S_DATA_BITLEN_COUNT
Definition vsf_template_i2s.h:219
@ VSF_I2S_STANDARD_MASK
Definition vsf_template_i2s.h:230
vsf_err_t vsf_i2s_tx_start(vsf_i2s_t *i2s_ptr)
Start i2s tx channel.
Definition i2s_common.c:64
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:100
#define VSF_I2S_APIS(__prefix_name)
I2S API template, used to generate I2S type, specific prefix function declarations,...
Definition vsf_template_i2s.h:176
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:192
@ VSF_I2S_MCLK_OUTPUT
Definition vsf_template_i2s.h:210
@ VSF_I2S_STANDARD_LSB
Definition vsf_template_i2s.h:206
@ VSF_I2S_DATA_BITLEN_16
Definition vsf_template_i2s.h:196
@ VSF_I2S_FRAME_BITLEN_32
Definition vsf_template_i2s.h:202
@ VSF_I2S_FRAME_BITLEN_16
Definition vsf_template_i2s.h:200
@ VSF_I2S_STANDARD_MSB
Definition vsf_template_i2s.h:205
@ VSF_I2S_MODE_MASTER
Definition vsf_template_i2s.h:193
@ VSF_I2S_LRCK_POL
Definition vsf_template_i2s.h:208
@ VSF_I2S_DATA_BITLEN_32
Definition vsf_template_i2s.h:198
@ VSF_I2S_STANDARD_PHILIPS
Definition vsf_template_i2s.h:204
@ VSF_I2S_DATA_BITLEN_24
Definition vsf_template_i2s.h:197
@ VSF_I2S_FRAME_BITLEN_24
Definition vsf_template_i2s.h:201
@ VSF_I2S_MODE_SLAVE
Definition vsf_template_i2s.h:194
@ VSF_I2S_BCK_POL
Definition vsf_template_i2s.h:209
fsm_rt_t vsf_i2s_disable(vsf_i2s_t *i2s_ptr)
Disable i2s instance.
Definition i2s_common.c:109
vsf_i2s_irq_mask_t
Definition vsf_template_i2s.h:244
@ VSF_I2S_IRQ_MASK_RX_TGL_BUFFER
Definition vsf_template_i2s.h:246
@ VSF_I2S_IRQ_MASK_TX_TGL_BUFFER
Definition vsf_template_i2s.h:245