/*! * @file Adafruit_ZeroI2S.h * * This is a library for the I2S peripheral on SAMD21 and SAMD51 devices * * Adafruit invests time and resources providing this open source code, * please support Adafruit and open-source hardware by purchasing * products from Adafruit! * * Written by Dean Miller for Adafruit Industries. * * BSD license, all text here must be included in any redistribution. * */ #ifndef ADAFRUIT_ZEROI2S_H #define ADAFRUIT_ZEROI2S_H #include /**************************************************************************/ /*! @brief available I2S slot sizes */ /**************************************************************************/ typedef enum _I2SSlotSize { I2S_8_BIT = 0, I2S_16_BIT, I2S_24_BIT, I2S_32_BIT } I2SSlotSize; /**************************************************************************/ /*! @brief number of I2S slots to use (stereo) */ /**************************************************************************/ #define I2S_NUM_SLOTS 2 /**************************************************************************/ /*! @brief Class that stores state and functions for interacting with I2S peripheral on SAMD21 and SAMD51 devices */ /**************************************************************************/ class I2S_class { public: I2S_class(uint8_t FS_PIN, uint8_t SCK_PIN, uint8_t TX_PIN, uint8_t RX_PIN); I2S_class(); ~I2S_class() {} bool begin(I2SSlotSize width, int fs_freq, int mck_mult = 256); void enableTx(); void disableTx(); void enableRx(); void disableRx(); void enableMCLK(); void disableMCLK(); bool txReady(); bool rxReady(); void write(int32_t left, int32_t right); void read(int32_t *left, int32_t *right); private: int8_t _fs, _sck, _tx, _rx; #ifndef __SAMD51__ int8_t _i2sserializer, _i2sclock; #endif }; #endif