XCORE SDK
XCORE Software Development Kit
i2s.h
1 // Copyright 2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 #ifndef _i2s_h_
4 #define _i2s_h_
5 #include <xs1.h>
6 #include <stdint.h>
7 #include <stddef.h>
8 #include <xcore/port.h>
9 #include <xcore/clock.h>
10 #include <xcore/parallel.h>
11 
19 #define I2S_MAX_DATALINES 8
20 #define I2S_CHANS_PER_FRAME 2
21 
27 typedef enum i2s_mode {
31 
43 
49 typedef struct i2s_config {
50  unsigned mclk_bclk_ratio;
54 
60 typedef enum i2s_restart {
65 
81 typedef void (*i2s_init_t)(void *app_data, i2s_config_t *i2s_config);
82 
97 typedef i2s_restart_t (*i2s_restart_check_t)(void *app_data);
98 
116 typedef void (*i2s_receive_t)(void *app_data, size_t num_in, const int32_t *samples);
117 
134 typedef void (*i2s_send_t)(void *app_data, size_t num_out, int32_t *samples);
135 
140 #define I2S_CALLBACK_ATTR __attribute__((fptrgroup("i2s_callback")))
141 
147 typedef struct {
150 
153 
156 
159 
161  void *app_data;
163  // END: addtogroup hil_i2s_core
165 
166 DECLARE_JOB(i2s_master, (const i2s_callback_group_t *, const port_t *, const size_t, const port_t *, const size_t, const port_t, const port_t, const port_t, const xclock_t));
167 DECLARE_JOB(i2s_master_external_clock, (const i2s_callback_group_t *, const port_t *, const size_t, const port_t *, const size_t, const port_t, const port_t, const xclock_t));
168 DECLARE_JOB(i2s_slave, (const i2s_callback_group_t *, port_t *, const size_t, port_t *, const size_t, port_t, port_t, xclock_t));
169 
202  const i2s_callback_group_t *const i2s_cbg,
203  const port_t p_dout[],
204  const size_t num_out,
205  const port_t p_din[],
206  const size_t num_in,
207  const port_t p_bclk,
208  const port_t p_lrclk,
209  const port_t p_mclk,
210  const xclock_t bclk);
211 
238  const i2s_callback_group_t *const i2s_cbg,
239  const port_t p_dout[],
240  const size_t num_out,
241  const port_t p_din[],
242  const size_t num_in,
243  const port_t p_bclk,
244  const port_t p_lrclk,
245  const xclock_t bclk);
246  // END: addtogroup hil_i2s_master
248 
280  const i2s_callback_group_t *const i2s_cbg,
281  port_t p_dout[],
282  const size_t num_out,
283  port_t p_din[],
284  const size_t num_in,
285  port_t p_bclk,
286  port_t p_lrclk,
287  xclock_t bclk);
288  // END: addtogroup hil_i2s_slave
290 
291 #endif // _i2s_h_
void(* i2s_receive_t)(void *app_data, size_t num_in, const int32_t *samples)
Definition: i2s.h:116
i2s_slave_bclk_polarity
Definition: i2s.h:39
i2s_restart_t(* i2s_restart_check_t)(void *app_data)
Definition: i2s.h:97
#define I2S_CALLBACK_ATTR
Definition: i2s.h:140
i2s_mode
Definition: i2s.h:27
struct i2s_config i2s_config_t
enum i2s_restart i2s_restart_t
enum i2s_mode i2s_mode_t
void(* i2s_send_t)(void *app_data, size_t num_out, int32_t *samples)
Definition: i2s.h:134
void(* i2s_init_t)(void *app_data, i2s_config_t *i2s_config)
Definition: i2s.h:81
enum i2s_slave_bclk_polarity i2s_slave_bclk_polarity_t
i2s_restart
Definition: i2s.h:60
@ I2S_SLAVE_SAMPLE_ON_BCLK_FALLING
Definition: i2s.h:41
@ I2S_SLAVE_SAMPLE_ON_BCLK_RISING
Definition: i2s.h:40
@ I2S_MODE_LEFT_JUSTIFIED
Definition: i2s.h:29
@ I2S_MODE_I2S
Definition: i2s.h:28
@ I2S_SHUTDOWN
Definition: i2s.h:63
@ I2S_NO_RESTART
Definition: i2s.h:61
@ I2S_RESTART
Definition: i2s.h:62
void i2s_master(const i2s_callback_group_t *const i2s_cbg, const port_t p_dout[], const size_t num_out, const port_t p_din[], const size_t num_in, const port_t p_bclk, const port_t p_lrclk, const port_t p_mclk, const xclock_t bclk)
void i2s_master_external_clock(const i2s_callback_group_t *const i2s_cbg, const port_t p_dout[], const size_t num_out, const port_t p_din[], const size_t num_in, const port_t p_bclk, const port_t p_lrclk, const xclock_t bclk)
void i2s_slave(const i2s_callback_group_t *const i2s_cbg, port_t p_dout[], const size_t num_out, port_t p_din[], const size_t num_in, port_t p_bclk, port_t p_lrclk, xclock_t bclk)
Definition: i2s.h:147
I2S_CALLBACK_ATTR i2s_restart_check_t restart_check
Definition: i2s.h:152
I2S_CALLBACK_ATTR i2s_receive_t receive
Definition: i2s.h:155
I2S_CALLBACK_ATTR i2s_init_t init
Definition: i2s.h:149
void * app_data
Definition: i2s.h:161
I2S_CALLBACK_ATTR i2s_send_t send
Definition: i2s.h:158
Definition: i2s.h:49
i2s_mode_t mode
Definition: i2s.h:51
i2s_slave_bclk_polarity_t slave_bclk_polarity
Definition: i2s.h:52
unsigned mclk_bclk_ratio
Definition: i2s.h:50