echo sound see http://mbed.org/users/okini3939/notebook/I2S_TLV320AIC23B/

Dependencies:   I2SSlave TLV320 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TLV320.h"
00003 
00004 #define BUF_SIZE 4000
00005 
00006 Serial pc(USBTX, USBRX);
00007 TLV320 audio(p9, p10, 0x34, p5, p6, p7, p8, p16); // I2S Codec
00008 DigitalOut myled(LED1);
00009 
00010 volatile int count = 0;
00011 int addr = 0;
00012 int buffer[BUF_SIZE];
00013 
00014 // interrupt TLV320 send/recv
00015 void isr_audio () {
00016     int i, a;
00017     short l, r, ll, rr;
00018     int buf[4];
00019 
00020     // I2S input
00021     audio.read();
00022     for (i = 0; i < 4; i ++) {
00023         buf[i] = audio.rxBuffer[i];
00024     }
00025 
00026     for (i = 0; i < 4; i ++) {
00027         l = (buffer[addr + i] >> 16);
00028         r = (buffer[addr + i] & 0xffff);
00029         ll = (buf[i] >> 16);
00030         rr = (buf[i] & 0xffff);
00031         l = (ll * 0.66) + (l * 0.33);
00032         r = (rr * 0.66) + (r * 0.33);
00033         buffer[addr + i] = buf[i];
00034         buf[i] = (l << 16) | (r & 0xffff);
00035     }
00036     addr += 4;
00037     if (addr >= BUF_SIZE) addr = 0;
00038 
00039     audio.write(buf, 0, 4);
00040 
00041     count ++;
00042 }
00043 
00044 int main() {
00045     int time = 0;
00046 
00047     pc.baud(115200);
00048     memset(buffer, 0, sizeof(buffer));
00049 
00050     audio.power(0x02); // mic off
00051     audio.outputVolume(1, 1); // headphone off
00052     audio.inputVolume(1, 1);
00053     audio.frequency(44100);
00054     audio.attach(&isr_audio);
00055     audio.start(RECEIVE);
00056     printf("Audio ready\r\n");
00057 
00058     while (1) {
00059         printf("%d / %d\r\n", time, count);
00060         printf("L %04x / R %04x\r\n", (buffer[0] >> 16), (buffer[0] & 0xffff));
00061         time ++;
00062 
00063         myled = 1;
00064         wait(0.5);
00065         myled = 0;
00066         wait(0.5);
00067 
00068 //        if (pc.readable()) break;
00069     }
00070 
00071     audio.stop();
00072     printf("exit\r\n");
00073 }