sample and play see http://mbed.org/users/okini3939/notebook/I2S_TLV320AIC23B/

Dependencies:   I2SSlave TLV320 mbed

Fork of i2s_audio_echo by Suga koubou

Committer:
okini3939
Date:
Fri Nov 23 08:24:10 2012 +0000
Revision:
0:68f7b69ecca0
Child:
1:2aeba027f61e
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:68f7b69ecca0 1 #include "mbed.h"
okini3939 0:68f7b69ecca0 2 #include "TLV320.h"
okini3939 0:68f7b69ecca0 3
okini3939 0:68f7b69ecca0 4 #define BUF_SIZE 4000
okini3939 0:68f7b69ecca0 5
okini3939 0:68f7b69ecca0 6 Serial pc(USBTX, USBRX);
okini3939 0:68f7b69ecca0 7 TLV320 audio(p9, p10, 0x34, p5, p6, p7, p8, p16); // I2S Codec
okini3939 0:68f7b69ecca0 8 DigitalOut myled(LED1);
okini3939 0:68f7b69ecca0 9
okini3939 0:68f7b69ecca0 10 volatile int count = 0;
okini3939 0:68f7b69ecca0 11 int addr = 0;
okini3939 0:68f7b69ecca0 12 int buffer[BUF_SIZE];
okini3939 0:68f7b69ecca0 13
okini3939 0:68f7b69ecca0 14 // interrupt TLV320 send/recv
okini3939 0:68f7b69ecca0 15 void isr_audio () {
okini3939 0:68f7b69ecca0 16 int i, a;
okini3939 0:68f7b69ecca0 17 short l, r, ll, rr;
okini3939 0:68f7b69ecca0 18 int buf[4];
okini3939 0:68f7b69ecca0 19
okini3939 0:68f7b69ecca0 20 // I2S input
okini3939 0:68f7b69ecca0 21 audio.read();
okini3939 0:68f7b69ecca0 22 for (i = 0; i < 4; i ++) {
okini3939 0:68f7b69ecca0 23 buf[i] = audio.rxBuffer[i];
okini3939 0:68f7b69ecca0 24 }
okini3939 0:68f7b69ecca0 25
okini3939 0:68f7b69ecca0 26 for (i = 0; i < 4; i ++) {
okini3939 0:68f7b69ecca0 27 l = (buffer[addr + i] >> 16);
okini3939 0:68f7b69ecca0 28 r = (buffer[addr + i] & 0xffff);
okini3939 0:68f7b69ecca0 29 ll = (buf[i] >> 16);
okini3939 0:68f7b69ecca0 30 rr = (buf[i] & 0xffff);
okini3939 0:68f7b69ecca0 31 l = (ll * 0.66) + (l * 0.33);
okini3939 0:68f7b69ecca0 32 r = (rr * 0.66) + (r * 0.33);
okini3939 0:68f7b69ecca0 33 buffer[addr + i] = buf[i];
okini3939 0:68f7b69ecca0 34 buf[i] = (l << 16) | (r & 0xffff);
okini3939 0:68f7b69ecca0 35 }
okini3939 0:68f7b69ecca0 36 addr += 4;
okini3939 0:68f7b69ecca0 37 if (addr >= BUF_SIZE) addr = 0;
okini3939 0:68f7b69ecca0 38
okini3939 0:68f7b69ecca0 39 audio.write(buf, 0, 4);
okini3939 0:68f7b69ecca0 40
okini3939 0:68f7b69ecca0 41 count ++;
okini3939 0:68f7b69ecca0 42 }
okini3939 0:68f7b69ecca0 43
okini3939 0:68f7b69ecca0 44 int main() {
okini3939 0:68f7b69ecca0 45 int time = 0;
okini3939 0:68f7b69ecca0 46
okini3939 0:68f7b69ecca0 47 pc.baud(115200);
okini3939 0:68f7b69ecca0 48 memset(buffer, 0, sizeof(buffer));
okini3939 0:68f7b69ecca0 49
okini3939 0:68f7b69ecca0 50 audio.power(0x02); // mic off
okini3939 0:68f7b69ecca0 51 audio.outputVolume(1, 1); // headphone off
okini3939 0:68f7b69ecca0 52 audio.inputVolume(1, 1);
okini3939 0:68f7b69ecca0 53 audio.frequency(44100);
okini3939 0:68f7b69ecca0 54 audio.attach(&isr_audio);
okini3939 0:68f7b69ecca0 55 audio.start(RECEIVE);
okini3939 0:68f7b69ecca0 56 printf("Audio ready\r\n");
okini3939 0:68f7b69ecca0 57
okini3939 0:68f7b69ecca0 58 while (1) {
okini3939 0:68f7b69ecca0 59 printf("%d / %d\r\n", time, count);
okini3939 0:68f7b69ecca0 60 printf("L %04x / R %04x\r\n", (buffer[0] >> 16), (buffer[0] & 0xffff));
okini3939 0:68f7b69ecca0 61 time ++;
okini3939 0:68f7b69ecca0 62
okini3939 0:68f7b69ecca0 63 myled = 1;
okini3939 0:68f7b69ecca0 64 wait(0.5);
okini3939 0:68f7b69ecca0 65 myled = 0;
okini3939 0:68f7b69ecca0 66 wait(0.5);
okini3939 0:68f7b69ecca0 67
okini3939 0:68f7b69ecca0 68 // if (pc.readable()) break;
okini3939 0:68f7b69ecca0 69 }
okini3939 0:68f7b69ecca0 70
okini3939 0:68f7b69ecca0 71 audio.stop();
okini3939 0:68f7b69ecca0 72 printf("exit\r\n");
okini3939 0:68f7b69ecca0 73 }