rp2040-i2s
All Classes Files Functions Variables Typedefs Modules Pages
audio_i2s.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef _PICO_AUDIO_I2S_H
8 #define _PICO_AUDIO_I2S_H
9 
10 #include "pico_audio/audio.h"
11 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #ifndef PICO_AUDIO_I2S_DMA_IRQ
28 #ifdef PICO_AUDIO_DMA_IRQ
29 #define PICO_AUDIO_I2S_DMA_IRQ PICO_AUDIO_DMA_IRQ
30 #else
31 #define PICO_AUDIO_I2S_DMA_IRQ 0
32 #endif
33 #endif
34 
35 #ifndef PICO_AUDIO_I2S_PIO
36 #ifdef PICO_AUDIO_PIO
37 #define PICO_AUDIO_I2S_PIO PICO_AUDIO_PIO
38 #else
39 #define PICO_AUDIO_I2S_PIO 0
40 #endif
41 #endif
42 
43 #if !(PICO_AUDIO_I2S_DMA_IRQ == 0 || PICO_AUDIO_I2S_DMA_IRQ == 1)
44 #error PICO_AUDIO_I2S_DMA_IRQ must be 0 or 1
45 #endif
46 
47 #if !(PICO_AUDIO_I2S_PIO == 0 || PICO_AUDIO_I2S_PIO == 1)
48 #error PICO_AUDIO_I2S_PIO ust be 0 or 1
49 #endif
50 
51 #ifndef PICO_AUDIO_I2S_MAX_CHANNELS
52 #ifdef PICO_AUDIO_MAX_CHANNELS
53 #define PICO_AUDIO_I2S_MAX_CHANNELS PICO_AUDIO_MAX_CHANNELS
54 #else
55 #define PICO_AUDIO_I2S_MAX_CHANNELS 2u
56 #endif
57 #endif
58 
59 #ifndef PICO_AUDIO_I2S_BUFFERS_PER_CHANNEL
60 #ifdef PICO_AUDIO_BUFFERS_PER_CHANNEL
61 #define PICO_AUDIO_I2S_BUFFERS_PER_CHANNEL PICO_AUDIO_BUFFERS_PER_CHANNEL
62 #else
63 #define PICO_AUDIO_I2S_BUFFERS_PER_CHANNEL 3u
64 #endif
65 #endif
66 
67 #ifndef PICO_AUDIO_I2S_BUFFER_SAMPLE_LENGTH
68 #ifdef PICO_AUDIO_BUFFER_SAMPLE_LENGTH
69 #define PICO_AUDIO_I2S_BUFFER_SAMPLE_LENGTH PICO_AUDIO_BUFFER_SAMPLE_LENGTH
70 #else
71 #define PICO_AUDIO_I2S_BUFFER_SAMPLE_LENGTH 576u
72 #endif
73 #endif
74 
75 #ifndef PICO_AUDIO_I2S_SILENCE_BUFFER_SAMPLE_LENGTH
76 #ifdef PICO_AUDIO_I2S_SILENCE_BUFFER_SAMPLE_LENGTH
77 #define PICO_AUDIO_I2S_SILENCE_BUFFER_SAMPLE_LENGTH PICO_AUDIO_SILENCE_BUFFER_SAMPLE_LENGTH
78 #else
79 #define PICO_AUDIO_I2S_SILENCE_BUFFER_SAMPLE_LENGTH 256u
80 #endif
81 #endif
82 
83 // Allow use of pico_audio driver without actually doing anything much
84 #ifndef PICO_AUDIO_I2S_NOOP
85 #ifdef PICO_AUDIO_NOOP
86 #define PICO_AUDIO_I2S_NOOP PICO_AUDIO_NOOP
87 #else
88 #define PICO_AUDIO_I2S_NOOP 0
89 #endif
90 #endif
91 
92 #ifndef PICO_AUDIO_I2S_MONO_INPUT
93 #define PICO_AUDIO_I2S_MONO_INPUT 0
94 #endif
95 #ifndef PICO_AUDIO_I2S_MONO_OUTPUT
96 #define PICO_AUDIO_I2S_MONO_OUTPUT 0
97 #endif
98 
99 #ifndef PICO_AUDIO_I2S_DATA_PIN
100 //#warning PICO_AUDIO_I2S_DATA_PIN should be defined when using AUDIO_I2S
101 #define PICO_AUDIO_I2S_DATA_PIN 28
102 #endif
103 
104 #ifndef PICO_AUDIO_I2S_CLOCK_PIN_BASE
105 //#warning PICO_AUDIO_I2S_CLOCK_PIN_BASE should be defined when using AUDIO_I2S
106 #define PICO_AUDIO_I2S_CLOCK_PIN_BASE 26
107 #endif
108 
109 // todo this needs to come from a build config
113 typedef struct audio_i2s_config {
114  uint8_t data_pin;
115  uint8_t clock_pin_base;
116  uint8_t dma_channel;
117  uint8_t pio_sm;
119 
126 const audio_format_t *audio_i2s_setup(const audio_format_t *intended_audio_format,
127  const audio_i2s_config_t *config);
128 
129 
137 
138 
146 bool audio_i2s_connect(audio_buffer_pool_t *producer);
147 
148 
155 bool audio_i2s_connect_extra(audio_buffer_pool_t *producer, bool buffer_on_give, uint buffer_count, uint samples_per_buffer, audio_connection_t *connection);
156 
167 bool audio_i2s_connect_extra(audio_buffer_pool_t *producer, bool buffer_on_give, uint buffer_count,
168  uint samples_per_buffer, audio_connection_t *connection);
169 
170 
176 void audio_i2s_set_enabled(bool enabled);
177 
178 #ifdef __cplusplus
179 }
180 #endif
181 
182 #endif //_AUDIO_I2S_H
void audio_i2s_set_enabled(bool enabled)
Set up system to output I2S audio.
Definition: audio_i2s.c:343
const audio_format_t * audio_i2s_setup(const audio_format_t *intended_audio_format, const audio_i2s_config_t *config)
Set up system to output I2S audio.
Definition: audio_i2s.c:54
bool audio_i2s_connect(audio_buffer_pool_t *producer)
Definition: audio_i2s.c:174
bool audio_i2s_connect_thru(audio_buffer_pool_t *producer, audio_connection_t *connection)
Definition: audio_i2s.c:170
struct audio_i2s_config audio_i2s_config_t
Base configuration structure used when setting up.
bool audio_i2s_connect_s8(audio_buffer_pool_t *producer)
Definition: audio_i2s.c:242
bool audio_i2s_connect_extra(audio_buffer_pool_t *producer, bool buffer_on_give, uint buffer_count, uint samples_per_buffer, audio_connection_t *connection)
Definition: audio_i2s.c:178
Definition: audio.h:75
Definition: audio.h:92
Audio format definition.
Definition: audio.h:48
Base configuration structure used when setting up.
Definition: audio_i2s.h:113