14 #include <xcore/clock.h>
15 #include <xcore/port.h>
18 #include "rtos_osal.h"
19 #include "rtos_driver_rpc.h"
25 #define RTOS_I2S_APP_SEND_FILTER_CALLBACK_ATTR __attribute__((fptrgroup("rtos_i2s_send_filter_cb_fptr_grp")))
31 #define RTOS_I2S_APP_RECEIVE_FILTER_CALLBACK_ATTR __attribute__((fptrgroup("rtos_i2s_receive_filter_cb_fptr_grp")))
101 __attribute__((fptrgroup(
"rtos_i2s_rx_fptr_grp")))
102 size_t (*rx)(
rtos_i2s_t *, int32_t *, size_t, unsigned);
104 __attribute__((fptrgroup(
"rtos_i2s_tx_fptr_grp")))
105 size_t (*tx)(
rtos_i2s_t *, int32_t *, size_t, unsigned);
107 unsigned mclk_bclk_ratio;
109 port_t p_dout[I2S_MAX_DATALINES];
111 port_t p_din[I2S_MAX_DATALINES];
118 void *send_filter_app_data;
121 void *receive_filter_app_data;
124 rtos_osal_mutex_t mutex;
125 streaming_channel_t c_i2s_isr;
127 rtos_osal_thread_t hil_thread;
128 rtos_osal_semaphore_t send_sem;
129 rtos_osal_semaphore_t recv_sem;
137 volatile size_t total_written;
138 volatile size_t total_read;
139 volatile size_t required_free_count;
146 volatile size_t total_written;
147 volatile size_t total_read;
148 volatile size_t required_available_count;
153 #include "rtos_i2s_rpc.h"
166 const unsigned audio_clock_frequency,
167 const unsigned sample_rate)
169 return audio_clock_frequency / (sample_rate * (8 *
sizeof(int32_t)) * I2S_CHANS_PER_FRAME);
172 inline void rtos_i2s_send_filter_cb_set(
175 void *send_filter_app_data)
177 ctx->send_filter_app_data = send_filter_app_data;
178 ctx->send_filter_cb = send_filter_cb;
181 inline void rtos_i2s_receive_filter_cb_set(
184 void *receive_filter_app_data)
186 ctx->receive_filter_app_data = receive_filter_app_data;
187 ctx->receive_filter_cb = receive_filter_cb;
218 unsigned mclk_bclk_ratio,
220 size_t recv_buffer_size,
221 size_t send_buffer_size,
222 unsigned interrupt_core_id);
250 int32_t *i2s_sample_buf,
254 return ctx->rx(ctx, i2s_sample_buf, frame_count, timeout);
277 int32_t *i2s_sample_buf,
281 return ctx->tx(ctx, i2s_sample_buf, frame_count, timeout);
315 uint32_t io_core_mask,
347 uint32_t io_core_mask,
387 uint32_t io_core_mask,
size_t rtos_i2s_tx(rtos_i2s_t *ctx, int32_t *i2s_sample_buf, size_t frame_count, unsigned timeout)
Definition: rtos_i2s.h:275
size_t rtos_i2s_rx(rtos_i2s_t *ctx, int32_t *i2s_sample_buf, size_t frame_count, unsigned timeout)
Definition: rtos_i2s.h:248
#define RTOS_I2S_APP_SEND_FILTER_CALLBACK_ATTR
Definition: rtos_i2s.h:25
int rtos_i2s_mclk_bclk_ratio(const unsigned audio_clock_frequency, const unsigned sample_rate)
Definition: rtos_i2s.h:165
size_t(* rtos_i2s_send_filter_cb_t)(rtos_i2s_t *ctx, void *app_data, int32_t *i2s_frame, size_t i2s_frame_size, int32_t *send_buf, size_t samples_available)
Definition: rtos_i2s.h:63
size_t(* rtos_i2s_receive_filter_cb_t)(rtos_i2s_t *ctx, void *app_data, int32_t *i2s_frame, size_t i2s_frame_size, int32_t *receive_buf, size_t sample_spaces_free)
Definition: rtos_i2s.h:91
#define RTOS_I2S_APP_RECEIVE_FILTER_CALLBACK_ATTR
Definition: rtos_i2s.h:31
void rtos_i2s_start(rtos_i2s_t *i2s_ctx, unsigned mclk_bclk_ratio, i2s_mode_t mode, size_t recv_buffer_size, size_t send_buffer_size, unsigned interrupt_core_id)
Definition: rtos_i2s.c:322
void rtos_i2s_master_init(rtos_i2s_t *i2s_ctx, uint32_t io_core_mask, port_t p_dout[], size_t num_out, port_t p_din[], size_t num_in, port_t p_bclk, port_t p_lrclk, port_t p_mclk, xclock_t bclk)
Definition: rtos_i2s.c:417
void rtos_i2s_master_ext_clock_init(rtos_i2s_t *i2s_ctx, uint32_t io_core_mask, port_t p_dout[], size_t num_out, port_t p_din[], size_t num_in, port_t p_bclk, port_t p_lrclk, xclock_t bclk)
Definition: rtos_i2s.c:445
void rtos_i2s_slave_init(rtos_i2s_t *i2s_ctx, uint32_t io_core_mask, port_t p_dout[], size_t num_out, port_t p_din[], size_t num_in, port_t p_bclk, port_t p_lrclk, xclock_t bclk)
Definition: rtos_i2s.c:470
Definition: rtos_driver_rpc.h:23
Definition: rtos_i2s.h:98