sample and play see http://mbed.org/users/okini3939/notebook/I2S_TLV320AIC23B/
Dependencies: I2SSlave TLV320 mbed
Fork of i2s_audio_echo by
main.cpp@0:68f7b69ecca0, 2012-11-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |