Use the TLV320 with in-built I2S object to stream audio data from an SD Card and send it to the TLV320 CODEC for audio playback
Dependencies: I2SSlave mbed TLV320
Diff: TLV320/TLV320.h
- Revision:
- 1:9ea0cc2fa567
- Parent:
- 0:3d6892f6384f
diff -r 3d6892f6384f -r 9ea0cc2fa567 TLV320/TLV320.h --- a/TLV320/TLV320.h Fri Aug 05 10:07:47 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ - /****************************************************** - * TLV320.h: Texas instruments TLV320AIC23B library NXP LPC1768 - * - * Written by: - * mbed Team - * Ioannis Kedros - 10th January 2011 - * (basic functionality incurred) - * Daniel Worrall - 15th July 2011 - * (I2SSlave implementation and API restructuring) - * - * History - * version 2.29 -******************************************************/ - -#ifndef MBED_TLV320_H -#define MBED_TLV320_H - -#include "mbed.h" -#include "I2SSlave.h" - -/** TLV320 class, defined on the I2C master bus -* -*/ - -class TLV320 -{ - public: - //constructor - /** Create a TLV320 object defined on the I2C port - * - * @param sda Serial data pin (p9 or p28) - * @param scl Serial clock pin (p10 or p27) - * @param addr Object address - */ - TLV320(PinName sda, PinName scl, int addr, PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws); - /** Power up/down - * - * @param powerUp 0 = power down, 1 = power up - */ - void power(bool powerUp); - /** Overloaded power() function - * - * @param device Call individual devices to power up/down - * Device power 0x00 = On 0x80 = Off - * Clock 0x00 = On 0x40 = Off - * Oscillator 0x00 = On 0x20 = Off - * Outputs 0x00 = On 0x10 = Off - * DAC 0x00 = On 0x08 = Off - * ADC 0x00 = On 0x04 = Off - * Microphone input 0x00 = On 0x02 = Off - * Line input 0x00 = On 0x01 = Off - */ - void power(int device); - /** Set I2S interface bit length and mode - * - * @param length Set bit length to 16, 20, 24 or 32 bits - * @param mode Set STEREO (0), MONO (1) - */ - void format(char length, bool mode); - /** Set sample frequency - * - * @param frequency Sample frequency of data in Hz - * @return Returns an integer 0 = success, -1 = unrecognnised frequency - * - * The TLV320 supports the following frequencies: 8kHz, 8.021kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz - * Default is 44.1kHz - */ - int frequency(int hz); - /** Reset TLV320 - * - */ - void reset(void); - /** Start streaming i.e. enable interrupts - * - * @param mode Enable interrupts for NONE, TRANSMIT only, RECEIVE only, BOTH - */ - void start(int mode); - /** Stop streaming i.e. disable all interrupts - * - */ - void stop(void); - /** Write [length] 32 bit words in buffer to I2S port - * - * @param *buffer Address of buffer to be written - * @param from Start position in buffer to read from - * @param length Number of words to be written (MUST not exceed 4) - */ - void write(int *buffer, int from, int length); - /** Read 4 x (32bit) words into rxBuffer - * - */ - void read(void); - /** Attach a void/void function or void/void static member funciton to an interrupt generated by the I2SxxFIFOs - * - * @param function Function to attach - * - * e.g. myTlv320Object.attach(&myfunction); - * OR myTlv320Object.attach(&myClass::myStaticMemberFunction); - */ - void attach(void(*fptr)(void)); - /** Attach a nonstatic void/void member function to an interrupt generated by the I2SxxFIFOs - * - * @param tptr Object pointer - * @param mptr Member function pointer - * - * e.g. myTlv320Object.attach(&myObject, &myClass::myNonstaticMemberFunction); where myObject is an object of myClass - */ - template<typename T> - void attach(T *tptr, void(T::*mptr)(void)){ - mI2s_.attach(tptr, mptr); - } - /** Line in volume control i.e. record volume - * - * @param leftVolumeIn Left line-in volume - * @param rightVolumeIn Right line-in volume - * @return Returns 0 for success, -1 if parameters are out of range - * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -34.5dB - * and 1.0 maps to +12dB (0.74 = 0 dB default). - */ - int inputVolume(float leftVolumeIn, float rightVolumeIn); - /** Headphone out volume control - * - * @param leftVolumeOut Left line-out volume - * @param rightVolumeOut Right line-out volume - * @return Returns 0 for success, -1 if parameters are out of range - * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -73dB (mute) - * and 1.0 maps to +6dB (0.5 = default) - */ - int outputVolume(float leftVolumeOut, float rightVolumeOut); - /** Analog audio path control - * - * @param bypassVar Route analogue audio direct from line in to headphone out - */ - void bypass(bool bypassVar); - /**Digital audio path control - * - * @param softMute Mute output - */ - void mute(bool softMute); - //Receive buffer - - int *rxBuffer; - - protected: - char cmd[2]; //the address and command for TLV320 internal registers - int mAddr; //register write address - private: - I2C mI2c_; //MUST use the I2C port - I2SSlave mI2s_; - Ticker I2sTick; - void io(void); - /** Sample rate control - * - * @param rate Set the sampling rate as per datasheet section 3.3.2 - * @param clockIn Set the clock in divider MCLK, MCLK_DIV2 - * @param clockMode Set clock mode CLOCK_NORMAL, CLOCK_USB - */ - void setSampleRate_(char rate, bool clockIn, bool mode, bool bOSR); - /** Digital interface activation - * - */ - void activateDigitalInterface_(void); - /** Digital interface deactivation - * - */ - void deactivateDigitalInterface_(void); - - //TLV320AIC23B register addresses as defined in the TLV320AIC23B datasheet - #define LEFT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x00 << 1) - #define RIGHT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x01 << 1) - #define LEFT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x02 << 1) - #define RIGHT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x03 << 1) - #define ANALOG_AUDIO_PATH_CONTROL (0x04 << 1) - #define DIGITAL_AUDIO_PATH_CONTROL (0x05 << 1) - #define POWER_DOWN_CONTROL (0x06 << 1) - #define DIGITAL_AUDIO_INTERFACE_FORMAT (0x07 << 1) - #define SAMPLE_RATE_CONTROL (0x08 << 1) - #define DIGITAL_INTERFACE_ACTIVATION (0x09 << 1) - #define RESET_REGISTER (0x0F << 1) - - #define CLOCK_NORMAL 0 - #define CLOCK_USB 1 - #define MCLK 0 - #define MCLK_DIV2 1 -}; - -#endif \ No newline at end of file