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

Files at this revision

API Documentation at this revision

Comitter:
d_worrall
Date:
Fri Aug 05 10:12:21 2011 +0000
Parent:
0:3d6892f6384f
Commit message:
verison 2.0

Changed in this revision

I2SSlave.lib Show annotated file Show diff for this revision Revisions of this file
I2SSlave/I2SSlave.cpp Show diff for this revision Revisions of this file
I2SSlave/I2SSlave.h Show diff for this revision Revisions of this file
TLV320.lib Show annotated file Show diff for this revision Revisions of this file
TLV320/TLV320.cpp Show diff for this revision Revisions of this file
TLV320/TLV320.h Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/I2SSlave.lib	Fri Aug 05 10:12:21 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/d_worrall/code/I2SSlave/#aa3e863920d2
--- a/I2SSlave/I2SSlave.cpp	Fri Aug 05 10:07:47 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,306 +0,0 @@
-/******************************************************
- * I2SSlave.cpp: I2S port abstraction library cpp file for NXP LPC1768
- *
- * Written by:
- * mbed Team     -   15th July 2011
- * Daniel Worrall
- *
- * History
- * version 1.31
-******************************************************/
-#include "I2SSlave.h"
-/*Global Functions*/
-FunctionPointer akjnh3489v8ncv;
-
-extern "C" void I2S_IRQHandler(void){                   //this is a very special function so can remain outside
-    akjnh3489v8ncv.call();
-}
-/******************************************************
- * Function name:   I2SSlave
- *
- * Description:     class constructor
- *
- * Parameters:      PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
- * Returns:         none
-******************************************************/
-//Constructor
-I2SSlave::I2SSlave(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
-    storePins_(tx_sda, tx_ws, clk, rx_sda, rx_ws);
-    format(16, STEREO);                                 //this also invokes initialize so no need to call it twice
-}
-//Public functions
-/******************************************************
- * Function name:   format()
- *
- * Description:     sets the bit length for writing and stereo or mono mode
- *
- * Parameters:      int bit, bool mode
- * Returns:         none
-******************************************************/
-void I2SSlave::format(int bit, bool mode){
-    bit_ = bit;
-    mode_ = mode;
-    initialize_(tx_sda_, tx_ws_, clk_, rx_sda_, rx_ws_);
-}
-/******************************************************
- * Function name:   write()
- *
- * Description:     load buffer to write to I2S port
- *
- * Parameters:      long *buffer
- * Returns:         none
-******************************************************/
-void I2SSlave::write(int* buffer, int from, int length){
-    int to = from + length;
-    for(int i = from; i < to; ++i){
-        LPC_I2S->I2STXFIFO = buffer[i];
-    }
-}
-/******************************************************
- * Function name:   start()
- *
- * Description:     attach streamOut_ function to ticker interrupt
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void I2SSlave::start(int mode){
-    switch(mode){
-        case(0):
-             LPC_I2S->I2SIRQ |= (0 << 0);           //disable receive interrupt
-             LPC_I2S->I2SIRQ |= (0 << 1);           //disable transmit interrupt
-             break;
-        case(1):
-            LPC_I2S->I2SIRQ |= (0 << 0);            //disable receive interrupt
-            LPC_I2S->I2SIRQ |= (1 << 1);            //enable transmit interrupt
-            LPC_I2S->I2SIRQ |= (0 << 16);           //set I2STXFIFO depth to 0 words
-            break;
-        case(2):
-            LPC_I2S->I2SIRQ |= (1 << 0);            //enable receive interrupt
-            LPC_I2S->I2SIRQ |= (0 << 1);            //disable transmit interrupt
-            LPC_I2S->I2SIRQ |= (4 << 8);            //set I2SRXFIFO depth to 4 words
-            break;
-        case(3):
-            LPC_I2S->I2SIRQ |= (1 << 0);            //enable receive interrupt
-            LPC_I2S->I2SIRQ |= (4 << 8);            //set I2SRXFIFO depth to 4 words
-            LPC_I2S->I2SIRQ |= (1 << 1);            //enable transmit interrupt
-            LPC_I2S->I2SIRQ |= (0 << 16);           //set I2STXFIFO depth to 0 words
-            break;
-        default:
-            break;
-    }
-    NVIC_SetPriority(I2S_IRQn, 0);
-    NVIC_EnableIRQ(I2S_IRQn);                       //enable I2S interrupt in the NVIC 
-}
-/******************************************************
- * Function name:   stop()
- *
- * Description:     detach streamOut_ from ticker
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void I2SSlave::stop(void){
-    NVIC_DisableIRQ(I2S_IRQn);           
-}
-/******************************************************
- * Function name:   read()
- *
- * Description:     reads FIFORX buffer into [int32_t rxBuffer[8]]
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void I2SSlave::read(void){
-    rxBuffer[0] = LPC_I2S->I2SRXFIFO;
-    rxBuffer[1] = LPC_I2S->I2SRXFIFO;
-    rxBuffer[2] = LPC_I2S->I2SRXFIFO;
-    rxBuffer[3] = LPC_I2S->I2SRXFIFO;
-}
-/******************************************************
- * Function name:   status_()
- *
- * Description:     Read I2SSTATE register
- *
- * Parameters:      none
- * Returns:         int
-******************************************************/
-int I2SSlave::status(void){
-    return LPC_I2S->I2SSTATE;
-}
-//Private functions
-/******************************************************
- * Function name:   initialize()
- *
- * Description:     initialises I2S port 
- *
- * Parameters:      PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
- * Returns:         0 =  successful initialisation
-                   -1 = initialisation failure
-******************************************************/
-int I2SSlave::initialize_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
-    setPins_(tx_sda, tx_ws, clk, rx_sda, rx_ws);        //designate pins
-    LPC_SC->PCONP |= (1 << 27);
-    //configure input/output register
-    format_(bit_, mode_);           
-    //set mbed as SLAVE  
-    LPC_I2S->I2SDAO |= (1 << 5);
-    LPC_I2S->I2SDAI |= (1 << 5);
-    //clock mode
-    setClocks_(4);
-    //set slave mode
-    modeConfig_();
-    //set receiver mode
-    LPC_I2S->I2SRXMODE |= (1 << 1);
-    //slave mode
-    LPC_I2S->I2STXRATE = 0;
-    LPC_I2S->I2SRXRATE = 0;
-    //Start
-    LPC_I2S->I2SDAO |= (0 << 3);          
-    LPC_I2S->I2SDAI |= (0 << 3);
-    LPC_I2S->I2SDAO |= (0 << 4);          
-    LPC_I2S->I2SDAI |= (0 << 4);
-    LPC_I2S->I2SDAO |= (0 << 15);          
-    return 0;
-}
-/******************************************************
- * Function name:   setClocks_()
- *
- * Description:     Set the division setting on the internal clocks
- *
- * Parameters:      int divideBy
- * Returns:         nothing
-******************************************************/
-void I2SSlave::setClocks_(int divideBy){
-    switch(divideBy){
-        case 1:
-            LPC_SC->PCLKSEL1 |= (1 << 22); 
-            LPC_SC->PCLKSEL1 |= (0 << 23);     
-            break;
-        case 2:
-            LPC_SC->PCLKSEL1 |= (0 << 22);
-            LPC_SC->PCLKSEL1 |= (1 << 23);
-            break;
-        case 4:
-            LPC_SC->PCLKSEL1 |= (0 << 22);
-            LPC_SC->PCLKSEL1 |= (0 << 23);
-            break;
-        case 8:
-            LPC_SC->PCLKSEL1 |= (1 << 22);
-            LPC_SC->PCLKSEL1 |= (1 << 23);
-            break;
-        default:
-            break;
-    }
-}
-/******************************************************
- * Function name:   setPins_()
- *
- * Description:     set external pin configuration
- *
- * Parameters:      PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
- * Returns:         none
-******************************************************/
-void I2SSlave::setPins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
-    if(rx_ws == p29){
-        LPC_PINCON->PINSEL0 |= (1 << 10);   //set p29 as receive word select line
-    } else {
-        LPC_PINCON->PINSEL1 |= (2 << 16);   //set p16 as receive word select line
-    }
-    if(rx_sda == p8){
-        LPC_PINCON->PINSEL0 |= (1 << 12);   //set p8 as receive serial data line
-    } else {
-        LPC_PINCON->PINSEL1 |= (2 << 18);   //set p17 as receive serial data line
-    }
-    LPC_PINCON->PINSEL0 |= (1 << 14);       //set p7 as transmit clock line (only one of these)    
-    LPC_PINCON->PINSEL0 |= (1 << 16);       //set p6 as word select line (only one of these)   
-    LPC_PINCON->PINSEL0 |= (1 << 18);       //set p5 as transmit serial data line (only one of these)
-    LPC_PINCON->PINSEL0 |= (0 << 8);        //clear rx_clk
-}
-/******************************************************
- * Function name:   format_()
- *
- * Description:     sets the bit length for writing and stereo or mono mode
- *
- * Parameters:      int bit, bool mode
- * Returns:         none
-******************************************************/
-void I2SSlave::format_(int bit, bool mode){
-    uint32_t bps= ((bit+1)*8)-1;
-    LPC_I2S->I2SDAO &= (0x00 << 6);
-    LPC_I2S->I2SDAO |= (bps << 6);
-    //set bit length
-    switch(bit){
-        case 8:
-            LPC_I2S->I2SDAO &= 0xfffffffc;
-            break;
-        case 16:
-            LPC_I2S->I2SDAO &= (0 << 1);
-            LPC_I2S->I2SDAO |= (1 << 0);           
-            break;
-        case 32:
-            LPC_I2S->I2SDAO &= (0 << 1);
-            LPC_I2S->I2SDAO |= (3 << 0);
-            break;
-        default:
-            break;
-    }
-    //set audio mode
-    if(mode == STEREO){
-        LPC_I2S->I2SDAO |= (0 << 2);
-    } else {
-        LPC_I2S->I2SDAO |= (1 << 2);
-    }
-    //set transmitter and receiver setting to be the same
-    LPC_I2S->I2SDAI &= (0x00 << 6);
-    LPC_I2S->I2SDAI |= (bps << 6);
-    //set bit length
-    switch(bit){
-        case 8:
-            LPC_I2S->I2SDAI &= 0xfffffffc;
-            break;
-        case 16:
-            LPC_I2S->I2SDAI &= (0 << 1);
-            LPC_I2S->I2SDAI |= (1 << 0);
-            break;
-        case 32:
-            LPC_I2S->I2SDAI &= (0 << 1);
-            LPC_I2S->I2SDAI |= (3 << 0);
-            break;
-        default:
-            break;
-    }
-    //set audio mode
-    if(mode == STEREO){
-        LPC_I2S->I2SDAI |= (0 << 2);
-    } else {
-        LPC_I2S->I2SDAI |= (1 << 2);
-    }
-}
-/******************************************************
- * Function name:   modeConfig_()
- *
- * Description:     Set slave mode
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void I2SSlave::modeConfig_(void){
-    LPC_I2S->I2STXMODE |= (0x0 << 0);
-    LPC_I2S->I2SRXMODE |= (0x0 << 0);
-}
-/******************************************************
- * Function name:   storePins_()
- *
- * Description:     set external pin configuration
- *
- * Parameters:      PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
- * Returns:         none
-******************************************************/
-void I2SSlave::storePins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
-    tx_sda_ = tx_sda;
-    tx_ws_ = tx_ws;
-    clk_ = clk;
-    rx_sda_ = rx_sda;
-    rx_ws_ = rx_ws;
-}
\ No newline at end of file
--- a/I2SSlave/I2SSlave.h	Fri Aug 05 10:07:47 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-/******************************************************
- * I2SSlave.h: I2S port abstraction library header file for NXP LPC1768
- *
- * Written by:
- * mbed Team     -   15th July 2011
- * Daniel Worrall
- *
- * History
- * version 1.31
-******************************************************/
-
-#include "mbed.h"
-#include "math.h"
-
-#ifndef __MBED_I2SSLAVE_H__
-#define __MBED_I2SSLAVE_H__
-
-/** I2S class defined on the LPC1768 port
- *
- */
-extern FunctionPointer akjnh3489v8ncv;
-class I2SSlave{
-
-    public:
-        //Constructor
-        /** Create an I2S object
-         *
-         * @param tx_sda Transmitter serial data line
-         * @param tx_ws Transmitter word select line
-         * @param clk Shared transmitter/receiver clock line
-         * @param rx_sda Receiver serial data line
-         * @param rx_ws Receiver word select line
-         */
-        I2SSlave(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
-        /** Set the data transmission format
-         *
-         * @param bit Set the number of bits per write
-         * @param mode Set STEREO (0) or MONO (1) mode
-         */
-        void format(int bit, bool mode);
-        /** Write a buffer to the I2S port
-         *
-         * @param buffer Address of buffer to pass to I2S port
-         * @param from Start position in buffer to read from
-         * @param length Length of buffer (MUST not exceed 8 words, each 32 bits long)
-         *
-         * Note: sending 8 words to the TXFIFO will trigger an interrupt!
-         */
-        void write(int* buffer, int from,  int length);
-        /** Activate I2S port for data streaming 
-         *
-         * @param mode Mode to enable - NONE, TRANSMIT only, RECEIVE only, BOTH
-         * Enables tx/rx interrupts
-         */
-        void start(int mode);
-        /** Deactivate I2S port from data streaming 
-         *
-         * Disable all interrupts
-         */
-        void stop(void);
-        /** Load receive FIFO data into receiver buffer
-         *
-         */
-        void read(void);
-        /** Attach a void/void function or void/void static memeber function to an interrupt generated by the I2SxxFIFOs
-         *
-         * @param function Function to attach
-         *
-         * e.g. myI2sObject.attach(&myfunction);
-         * OR   myI2sObject.attach(&myClass::myStaticMemberFunction);
-         */
-        void attach(void(*fptr)(void)){
-            akjnh3489v8ncv.attach(fptr);
-        }
-        /** 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. myI2sObject.attach(&myObject, &myClass::myNonstaticMemberFunction); where myObject is an object of myClass
-         */
-        template<typename T>
-        void attach(T *tptr, void(T::*mptr)(void)){
-            akjnh3489v8ncv.attach(tptr, mptr);
-        }
-        /** Return contents of I2S status register
-         *
-         * @returns Content of I2SSTATE register
-         *
-         * bit0: receive/transmit interrupt active
-         * bit1: receive/transmit DMA request 1
-         * bit2: receive/transmit DMA request 2
-         * bit[11:8]: receive FIFO level
-         * bit[19:16]: transmit FIFO level
-         */
-        int status(void);
-        
-        //Receiver buffer
-        int rxBuffer[4];
-        //defines
-        #define STEREO  0
-        #define MONO    1
-        
-        #define I2SFIFO_EMPTY    0
-        #define I2SFIFO_FULL     8
-        
-        #define RAM_LENGTH  1024
-        #define RAM_LIMIT   (RAM_LENGTH - 1) 
-        #define PTR_MAX     ((RAM_LENGTH / 8) - 1)
-        
-        #define NONE        0
-        #define TRANSMIT    1
-        #define RECEIVE     2
-        #define BOTH        3
-
-    private:        
-        /** I2S intitalize function
-         *
-         * @param tx_sda Transmitter serial data line
-         * @param tx_ws Transmitter word select line
-         * @param clk Shared transmitter/receiver clock line
-         * @param rx_sda Receiver serial data line
-         * @param rx_ws Receiver word select line
-         * @return Returns 0 for successful initialisation, -1 for an error
-         */
-        int initialize_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
-        /** Set internal clock divide by rate
-         *
-         * @param divideBy Divide by 1, 2, 4 or 8
-         */
-        void setClocks_(int divideBy);
-        /** Set up the pins on the processor itself
-         *
-         * @param tx_sda Transmitter serial data line
-         * @param tx_ws Transmitter word select line
-         * @param clk Shared transmitter/receiver clock line
-         * @param rx_sda Receiver serial data line
-         * @param rx_ws Receiver word select line
-         */
-        void setPins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
-        /** Set the data transmission format 
-         *
-         * @param bit Set the number of bits per write
-         * @param mode Set STEREO (0) or MONO (1) mode
-         */
-        void format_(int bit, bool mode);
-        /** Set slave mode
-         *
-         */
-        void modeConfig_(void);
-        /** Store PinName values
-         * 
-         * @param tx_sda Transmitter serial data line
-         * @param tx_ws Transmitter word select line
-         * @param clk Shared transmitter/receiver clock line
-         * @param rx_sda Receiver serial data line
-         * @param rx_ws Receiver word select line
-         */
-        void storePins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
-        //variables
-        int bit_;
-        bool mode_;
-        PinName tx_sda_; 
-        PinName tx_ws_; 
-        PinName clk_;
-        PinName rx_sda_;
-        PinName rx_ws_;
-};
-
-#endif /*__MBED_I2S_H__*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TLV320.lib	Fri Aug 05 10:12:21 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/d_worrall/code/TLV320/#7e76c6f56169
--- a/TLV320/TLV320.cpp	Fri Aug 05 10:07:47 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,344 +0,0 @@
- /******************************************************
- * TLV320.cpp: 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
-******************************************************/
-#include "mbed.h"
-#include "TLV320.h"
-
-TLV320::TLV320(PinName sda, PinName scl, int addr, PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws)
-                         : mAddr(addr), mI2c_(sda, scl), mI2s_(tx_sda, tx_ws, clk, rx_sda, rx_ws){
-    mI2c_.frequency(150000);
-    reset();                                //TLV resets
-    power(0x07);                            //Power Up the TLV320, but not the MIC, ADC and LINE
-    format(16, STEREO);                     //16Bit I2S protocol format, STEREO
-    frequency(44100);                       //Default sample frequency is 44.1kHz
-    bypass(false);                          //Do not bypass device
-    mute(false);                            //Not muted
-    activateDigitalInterface_();            //The digital part of the chip is active
-    outputVolume(0.6, 0.6);                 //Headphone volume to the default state
-    rxBuffer = &mI2s_.rxBuffer[0];
-} 
-//Public Functions
-/******************************************************
- * Function name:   inputVolume()
- *
- * Description:     set line in volume for left and right channels
- *
- * Parameters:      float leftVolumeIn, float rightVolumeIn
- * Returns:         int 0 (success), -1 (value out of range)
-******************************************************/
-int TLV320::inputVolume(float leftVolumeIn, float rightVolumeIn){
-    //check values are in range
-    if((leftVolumeIn < 0.0)||leftVolumeIn > 1.0) return -1;
-    if((rightVolumeIn < 0.0)||rightVolumeIn > 1.0) return -1;
-    //convert float to encoded char
-    char left = (char)31*leftVolumeIn;          
-    char right = (char)31*rightVolumeIn;
-    //Left Channel
-    cmd[1] = left | (0 << 7);                           //set volume
-    cmd[0] = LEFT_LINE_INPUT_CHANNEL_VOLUME_CONTROL;    //set address
-    mI2c_.write(mAddr, cmd, 2);                         //send
-    //Right Channel
-    cmd[1] = right | (0 << 7);                          //set volume
-    cmd[0] = RIGHT_LINE_INPUT_CHANNEL_VOLUME_CONTROL;   //set address
-    mI2c_.write(mAddr, cmd, 2);                         //send
-    return 0;
-}
-/******************************************************
- * Function name:   outputVolume()
- *
- * Description:     Set headphone (line out) volume for left an right channels
- *
- * Parameters:      float leftVolumeOut, float rightVolumeOut
- * Returns:         int 0 (success), -1 (value out of range)
-******************************************************/
-int TLV320::outputVolume(float leftVolumeOut, float rightVolumeOut){
-    //check values are in range
-    if((leftVolumeOut < 0.0)||leftVolumeOut > 1.0) return -1;
-    if((rightVolumeOut < 0.0)||rightVolumeOut > 1.0) return -1;
-    //convert float to encoded char
-    char left = (char)(79*leftVolumeOut)+0x30;
-    char right = (char)(79*rightVolumeOut)+0x30;
-    //Left Channel
-    cmd[1] = left | (1 << 7);                           //set volume
-    cmd[0] = LEFT_CHANNEL_HEADPHONE_VOLUME_CONTROL;     //set address
-    mI2c_.write(mAddr, cmd, 2);                         //send
-    //Right Channel
-    cmd[1] = right | (1 << 7);                          //set volume
-    cmd[0] = RIGHT_CHANNEL_HEADPHONE_VOLUME_CONTROL;    //set address
-    mI2c_.write(mAddr, cmd, 2);                         //send
-    return 0;
-}
-/******************************************************
- * Function name:   bypass()
- *
- * Description:     Send TLV320 into bypass mode, i.e. connect input to output 
- *
- * Parameters:      bool bypassVar
- * Returns:         none
-******************************************************/
-void TLV320::bypass(bool bypassVar){
-    if(bypassVar == true)
-        cmd[1] = (1 << 3) | (0 << 4) | (0 << 5);//bypass enabled, DAC disabled, sidetone insertion disabled
-    else
-        cmd[1] = (0 << 3) | (1 << 4);           //bypass disabled, DAC enabled
-    cmd[1] |= (0 << 2);
-    cmd[0] = ANALOG_AUDIO_PATH_CONTROL;         //set address
-    mI2c_.write(mAddr, cmd, 2);                 //send
-}
-/******************************************************
- * Function name:   mute()
- *
- * Description:     Send TLV320 into mute mode
- *
- * Parameters:      bool softMute
- * Returns:         none
-******************************************************/
-void TLV320::mute(bool softMute){   
-    if(softMute == true) cmd[1] = 0x08;         //set instruction to mute
-    else cmd[1] = 0x00;                         //set instruction to NOT mute
-     
-    cmd[0] = DIGITAL_AUDIO_PATH_CONTROL;        //set address  
-    mI2c_.write(mAddr, cmd, 2);                 //send
-}    
-/******************************************************
- * Function name:   power()
- *
- * Description:     Switch TLV320 on/off
- *
- * Parameters:      bool powerUp
- * Returns:         none
-******************************************************/      
-void TLV320::power(bool powerUp){
-    if(powerUp == true) cmd[1] = 0x00;          //everything on
-    else cmd[1] = 0xFF;                         //everything off
-    
-    cmd[0] = POWER_DOWN_CONTROL;                //set address
-    mI2c_.write(mAddr, cmd, 2);                  //send
-}
-/******************************************************
- * Function name:   power()
- *
- * Description:     Switch on individual devices on TLV320
- *
- * Parameters:      int device
- * Returns:         none
-******************************************************/
-void TLV320::power(int device){
-    cmd[1] = (char)device;                      //set user defined commands
-    cmd[0] = POWER_DOWN_CONTROL;                //set address
-    mI2c_.write(mAddr, cmd, 2);                 //send
-}
-/******************************************************
- * Function name:   format()
- *
- * Description:     Set interface format
- *
- * Parameters:      char length, bool mode
- * Returns:         none
-******************************************************/      
-void TLV320::format(char length, bool mode){  
-    char modeSet = (1 << 6);   
-    modeSet |= (1 << 5);                        //swap left and right channels
-    
-    switch (length)                             //input data into instruction byte
-    {
-        case 16:
-            cmd[1] = modeSet | 0x02; 
-            break;
-        case 20:
-            cmd[1] = modeSet | 0x06;
-            break;
-        case 24:
-            cmd[1] = modeSet | 0x0A;
-            break;
-        case 32:
-            cmd[1] = modeSet | 0x0E;
-            break;
-        default:
-            break;
-    }
-    mI2s_.format(length, mode);
-    cmd[0] = DIGITAL_AUDIO_INTERFACE_FORMAT;        //set address
-    mI2c_.write(mAddr, cmd, 2);                     //send
-}
-/******************************************************
- * Function name:   frequency()
- *
- * Description:     Set sample frequency
- *
- * Parameters:      int hz
- * Returns:         int 0 (success), -1 (value not recognised)
-******************************************************/
-int TLV320::frequency(int hz){
-    char rate;
-    switch(hz){
-        case 8000:
-            rate = 0x03; 
-            break;
-        case 8021:
-            rate = 0x0B;
-            break;
-        case 32000:
-            rate = 0x06;
-            break;
-        case 44100:
-            rate = 0x08; 
-            break;
-        case 48000:
-            rate = 0x00; 
-            break;
-        case 88200:
-            rate = 0x0F;  
-            break;
-        case 96000:
-            rate = 0x07;
-            break;
-        default:
-            return -1;
-    }
-    char clockInChar = (0 << 6);
-    char clockModeChar = (1 << 0);
-
-    cmd[1] = (rate << 2) | clockInChar | clockModeChar;      //input data into instruciton byte
-    cmd[0] = SAMPLE_RATE_CONTROL;           //set address  
-    mI2c_.write(mAddr, cmd, 2);              //send
-    return 0;
-}   
-/******************************************************
- * Function name:   reset()
- *
- * Description:     Reset TLV320
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/        
-void TLV320::reset(void){
-    cmd[0] = RESET_REGISTER;                //set address
-    cmd[1] = 0x00;                          //this resets the entire device
-    mI2c_.write(mAddr, cmd, 2);               
-}
-/******************************************************
- * Function name:   start()
- *
- * Description:     Enable interrupts on the I2S port
- *
- * Parameters:      int mode
- * Returns:         none
-******************************************************/
-void TLV320::start(int mode){
-    mI2s_.start(mode);
-}
-/******************************************************
- * Function name:   stop()
- *
- * Description:     Disable interrupts on the I2S port
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void TLV320::stop(void){
-    mI2s_.stop();
-}
-/******************************************************
- * Function name:   write()
- *
- * Description:     Write (part of) a buffer to the I2S port
- *
- * Parameters:      int *buffer, int from, int length
- * Returns:         none
-******************************************************/
-void TLV320::write(int *buffer, int from, int length){
-    mI2s_.write(buffer, from, length);
-}
-/******************************************************
- * Function name:   read()
- *
- * Description:     Place I2SRXFIFO in rxBuffer
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void TLV320::read(void){
-    mI2s_.read();
-}
-/******************************************************
- * Function name:   attach()
- *
- * Description:     Attach a void/void function or void/void static member function to IRQHandler
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void TLV320::attach(void(*fptr)(void)){
-    mI2s_.attach(fptr);
-}
-//Private Functions
-/******************************************************
- * Function name:   setSampleRate_()
- *
- * Description:     Clocking control
- *
- * Parameters:      char rate, bool clockIn, bool clockMode, bool bOSR
- * Returns:         none
-******************************************************/
-void TLV320::setSampleRate_(char rate, bool clockIn, bool clockMode, bool bOSR){
-    char clockInChar;
-    char clockModeChar;
-    char baseOverSamplingRate;
-    if(bOSR){
-        baseOverSamplingRate = (1 << 0);
-    } else {
-        baseOverSamplingRate = (0 << 0);
-    }
-    if(clockIn){
-        clockInChar = (1 << 6);
-    } else {
-        clockInChar = (0 << 6);
-    }
-    if(clockMode){
-        clockModeChar = 0x01;
-    } else {
-        clockModeChar = 0x00;
-    }
-    cmd[1] = (rate << 2) | clockInChar | clockModeChar | baseOverSamplingRate;      //input data into instruciton byte
-    cmd[0] = SAMPLE_RATE_CONTROL;               //set address  
-    mI2c_.write(mAddr, cmd, 2);                 //send
-}
-/******************************************************
- * Function name:   activateDigitalInterface_()
- *
- * Description:     Activate digital part of chip
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-void TLV320::activateDigitalInterface_(void){
-    cmd[1] = 0x01;                          //Activate  
-    cmd[0] = DIGITAL_INTERFACE_ACTIVATION;  //set address
-    mI2c_.write(mAddr, cmd, 2);             //send
-}
-/******************************************************
- * Function name:   deactivateDigitalInterface_
- *
- * Description:     Deactivate digital part of chip
- *
- * Parameters:      none
- * Returns:         none
-******************************************************/
-//Digital interface deactivation 
-void TLV320::deactivateDigitalInterface_(void){
-    cmd[1] = 0x00;                          //Deactivate
-    cmd[0] = DIGITAL_INTERFACE_ACTIVATION;  //set address
-    mI2c_.write(mAddr, cmd, 2);             //send
-}
-
--- 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