I2S
Not to be confused with I2C, is a protocol for connecting to audio devices. The samples are sent continuously in the background using DMA transfer.
This library is in beta, and the API / implementation is subject to change!
To use this library, include it in your code:
#include "I2S.h"
I2SClass i2s(...);
I2SClass(SPI_TypeDef *instance);
Construct I2S that will be connected to the specified I2S instance on chip.
The board default pins will be used for sd/ws/ck. mck will not be used.
I2SClass(SPI_TypeDef *instance, uint8_t sd, uint8_t ws, uint8_t ck);
Construct I2S that will be connected to the specified I2S instance on chip.
The specified pins will be used for sd/ws/ck. mck will not be used.
I2SClass(SPI_TypeDef *instance, uint8_t sd, uint8_t ws, uint8_t ck, uint8_t mck);
Construct I2S that will be connected to the specified I2S instance on chip.
The specified pins will be used for sd/ws/ck/mck.
uint8_t I2SClass::begin(i2s_mode_t mode, uint32_t sampleRate, uint8_t bitsPerSample);
Configure the pins, and the parameters for the connection.
- mode: one of I2S_PHILIPS_MODE,I2S_RIGHT_JUSTIFIED_MODE, I2S_LEFT_JUSTIFIED_MODE
- sampleRate: between 8000 and 96000
- bitsPerSample: 16. (Note: 24 or 32 bit per sample currently not working!)
write(int16_t data);
Send 16 bit data. Blocks if there is no space left in the internal buffer.
write(int16_t *data, uint16_t size);
Send 16 bit data. Blocks if there is no space left in the internal buffer.
setBuffer(uint16_t *buffer, int bufferSize);
Set the DMA transfer buffer size. The default buffer is 2048 * 16 bits.
int getBufferSize();
Returns size of the transfer buffer.
stm32SetSD(uint8_t pin);
Set the alternative SD pin used by this I2S.
This method must be called before begin()!
stm32SetWD(uint8_t pin);
Set the alternative WD pin used by this I2S.
This method must be called before begin()!
stm32SetCK(uint8_t pin);
Set the alternative CK pin used by this I2S.
This method must be called before begin()!
stm32SetMCK(uint8_t pin);
Set the alternative MCK pin used by this I2S.
This method must be called before begin()!