Esp32/Components/driver/include/driver/i2s.h
Go to the documentation of this file.
1 
26 #pragma once
27 
28 #include <stdint.h>
29 #include <stddef.h>
30 #include <esp_attr.h>
31 #include <esp32/rom/ets_sys.h>
32 #include "espinc/timer_register.h"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
53 typedef union {
54  uint32_t u32;
55  struct {
56  int16_t left;
57  int16_t right;
58  };
59 } i2s_sample_t;
60 
64 typedef enum {
69 
73 typedef enum {
77 
81 typedef enum {
86 
90 typedef enum {
97 
101 typedef enum {
105 } i2s_mode_t;
106 
110 typedef enum {
116 
121 typedef void (*i2s_callback_t)(void* param, i2s_event_type_t event);
122 
126 typedef struct {
127  i2s_mode_t mode;
128  i2s_bits_per_sample_t bits_per_sample;
129  i2s_channel_fmt_t channel_format;
130  i2s_comm_format_t communication_format;
131  uint16_t dma_buf_len;
132  uint8_t dma_buf_count;
133  uint8_t callback_threshold;
136 
140 typedef struct {
143  unsigned sample_rate;
144  bool tx_desc_auto_clear;
145  bool auto_start;
146  i2s_callback_t callback;
147  void* param;
148  uint8_t bits_mod;
149 } i2s_config_t;
150 
157 bool i2s_driver_install(const i2s_config_t* config);
158 
162 void i2s_driver_uninstall();
163 
170 bool i2s_start();
171 
177 bool i2s_stop();
178 
182 bool i2s_set_sample_rates(uint32_t rate);
183 
187 bool i2s_set_dividers(uint8_t bck_div, uint8_t mclk_div);
188 
192 float i2s_get_real_rate();
193 
197 typedef struct {
198  union {
199  void* buffer;
200  i2s_sample_t* samples;
201  };
202  size_t size;
203  // debugging
204  uint16_t buf;
205  uint16_t pos;
207 
211 typedef unsigned TickType_t;
212 
222 bool IRAM_ATTR i2s_dma_read(i2s_buffer_info_t* info, size_t max_bytes);
223 
233 bool IRAM_ATTR i2s_dma_write(i2s_buffer_info_t* info, size_t max_bytes);
234 
243 size_t i2s_write(const void* src, size_t size, TickType_t ticks_to_wait);
244 
252 size_t i2s_read(void* dest, size_t size, TickType_t ticks_to_wait);
253 
258 bool i2s_zero_dma_buffer();
259 
263 typedef enum {
265  I2S_PIN_WS_OUT = 0x02,
267  I2S_PIN_BC_IN = 0x10,
268  I2S_PIN_WS_IN = 0x20,
270 } i2s_pin_t;
271 
272 typedef uint8_t i2s_pin_set_t;
273 
284 void i2s_set_pins(i2s_pin_set_t pins, bool enable);
285 
286 bool i2s_enable_loopback(bool enable);
287 
292 typedef struct {
293  uint16_t size;
294  uint16_t used;
296 
302 bool i2s_stat_tx(i2s_buffer_stat_t* stat);
303 
309 bool i2s_stat_rx(i2s_buffer_stat_t* stat);
310 
314 //unsigned i2s_rx_available();
315 
316 
319 #ifdef __cplusplus
320 }
321 #endif
size_t i2s_write(const void *src, size_t size, TickType_t ticks_to_wait)
writes a buffer of frames into the DMA memory, returns the amount of frames written.
I2S bits per sample: 16-bits.
Definition: Esp32/Components/driver/include/driver/i2s.h:66
bool i2s_zero_dma_buffer()
Zero the contents of the TX DMA buffer.
I2S sample.
Definition: Esp8266/Components/driver/include/driver/i2s.h:51
Definition: Esp32/Components/driver/include/driver/i2s.h:112
void(* i2s_callback_t)(void *param, i2s_event_type_t event)
Callback function type.
Definition: Esp32/Components/driver/include/driver/i2s.h:121
i2s_bits_per_sample_t
I2S bit width per sample.
Definition: Esp32/Components/driver/include/driver/i2s.h:64
GPIO 15 / TXD2 / D8.
Definition: Esp32/Components/driver/include/driver/i2s.h:264
i2s_event_type_t
I2S event types.
Definition: Esp32/Components/driver/include/driver/i2s.h:110
i2s_comm_format_t
I2S communication standard format.
Definition: Esp32/Components/driver/include/driver/i2s.h:81
bool i2s_stat_rx(i2s_buffer_stat_t *stat)
Obtain state information for RX buffers.
I2S 2 channel (stereo)
Definition: Esp32/Components/driver/include/driver/i2s.h:75
bool i2s_set_dividers(uint8_t bck_div, uint8_t mclk_div)
GPIO 12 / D6.
Definition: Esp32/Components/driver/include/driver/i2s.h:269
I2S bits per sample: 8-bits.
Definition: Esp32/Components/driver/include/driver/i2s.h:65
Definition: Esp32/Components/driver/include/driver/i2s.h:92
Definition: Esp32/Components/driver/include/driver/i2s.h:95
i2s_mode_t
I2S Mode, default is I2S_MODE_MASTER.
Definition: Esp32/Components/driver/include/driver/i2s.h:101
bool i2s_stop()
Stop I2S driver.
Definition: Esp32/Components/driver/include/driver/i2s.h:91
i2s_channel_fmt_t
I2S channel format type.
Definition: Esp32/Components/driver/include/driver/i2s.h:90
i2s_pin_t
I2S pin enable for i2s_set_pin.
Definition: Esp32/Components/driver/include/driver/i2s.h:263
bool i2s_driver_install(const i2s_config_t *config)
Install and start I2S driver.
bool i2s_stat_tx(i2s_buffer_stat_t *stat)
Obtain state information for TX buffers.
void i2s_set_pins(i2s_pin_set_t pins, bool enable)
Configure I2S pins.
size_t i2s_read(void *dest, size_t size, TickType_t ticks_to_wait)
Reads a block of received data.
GPIO 14 / D5.
Definition: Esp32/Components/driver/include/driver/i2s.h:268
I2S configuration parameters.
Definition: Esp8266/Components/driver/include/driver/i2s.h:138
Definition: Esp32/Components/driver/include/driver/i2s.h:113
Definition: Esp32/Components/driver/include/driver/i2s.h:104
I2S 1 channel (mono)
Definition: Esp32/Components/driver/include/driver/i2s.h:74
unsigned TickType_t
Defines the wait interval (presently milliseconds)
Definition: Esp32/Components/driver/include/driver/i2s.h:211
Definition: Esp32/Components/driver/include/driver/i2s.h:111
GPIO 13 / RXD2 / D7.
Definition: Esp32/Components/driver/include/driver/i2s.h:267
bool i2s_enable_loopback(bool enable)
Defines a buffer with available content.
Definition: Esp8266/Components/driver/include/driver/i2s.h:195
I2S format MSB.
Definition: Esp32/Components/driver/include/driver/i2s.h:83
bool i2s_set_sample_rates(uint32_t rate)
Definition: Esp32/Components/driver/include/driver/i2s.h:93
I2S communication format I2S.
Definition: Esp32/Components/driver/include/driver/i2s.h:82
Definition: Esp32/Components/driver/include/driver/i2s.h:103
float i2s_get_real_rate()
Definition: Esp32/Components/driver/include/driver/i2s.h:114
GPIO 2 / TXD1 / D4.
Definition: Esp32/Components/driver/include/driver/i2s.h:265
I2S format LSB.
Definition: Esp32/Components/driver/include/driver/i2s.h:84
bool i2s_dma_read(i2s_buffer_info_t *info, size_t max_bytes)
Fetch a DMA buffer containing received data (zero-copy)
Definition: Esp32/Components/driver/include/driver/i2s.h:102
bool i2s_start()
Start I2S driver.
I2S bits per sample: 24-bits.
Definition: Esp32/Components/driver/include/driver/i2s.h:67
i2s_channel_t
I2S channel.
Definition: Esp32/Components/driver/include/driver/i2s.h:73
I2S module configuration (TX or RX)
Definition: Esp8266/Components/driver/include/driver/i2s.h:124
GPIO 3 / RXD0 / D9.
Definition: Esp32/Components/driver/include/driver/i2s.h:266
void i2s_driver_uninstall()
Uninstall I2S driver.
Definition: Esp32/Components/driver/include/driver/i2s.h:94
Contains I2S buffer status information.
Definition: Esp8266/Components/driver/include/driver/i2s.h:290
uint8_t i2s_pin_set_t
Definition: Esp32/Components/driver/include/driver/i2s.h:272
bool i2s_dma_write(i2s_buffer_info_t *info, size_t max_bytes)
Fetch a DMA buffer for direct writing (zero-copy)