echo sound see http://mbed.org/users/okini3939/notebook/I2S_TLV320AIC23B/
Dependencies: I2SSlave TLV320 mbed
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 }
Generated on Sat Jul 16 2022 13:07:13 by 1.7.2