96kHz-16bit USB Audio Output interface with UDA1345 and 24.576MHz Xtal.

Dependencies:   I2S USBDevice mbed

Fork of USBAudioPlayback by Samuel Mokrani

Revision:
6:dc7b32ce4277
Parent:
5:ca2316551f3d
--- a/main.cpp	Wed Feb 05 14:31:03 2014 +0000
+++ b/main.cpp	Tue Sep 16 23:21:17 2014 +0000
@@ -4,7 +4,7 @@
 #include "USBAudio.h"
 #include "I2S.h"
 
-// frequency: 48 kHz
+// frequency: 96 kHz
 #define FREQ_SPK 96000
 #define FREQ_MIC 8000
 
@@ -24,6 +24,11 @@
 I2S i2s(I2S_TRANSMIT, p5, p6, p7);
 I2S i2srx(I2S_RECEIVE, p8, p29, p15);
 
+//SPI spi(p11, p12, p13); // mosi, miso, sclk
+DigitalOut mode(p14);
+DigitalOut spiout(p11);
+DigitalOut spiclk(p13);
+
 #define CHUNKS 8
 
 int buf_out[LENGTH_AUDIO_PACKET_MIC/sizeof(int)];
@@ -67,7 +72,84 @@
     myled = 0;
 }
 
+void spi_send(int byte)
+{
+    wait_us(10);
+    for (int i = 0; i < 8; i++) {
+        if (byte & (1 << i)) 
+            spiout = 1;
+        else
+            spiout = 0;
+        spiclk = 0;
+        wait_us(10);
+        spiclk = 1;
+        wait_us(10);
+    }
+}
+    
+
+void init_uda1345() {
+    spiclk = 1;
+    mode = 1;
+    wait_us(100);
+    mode = 0;
+    spi_send(0x16);
+    mode = 1;
+    spi_send(0x21);
+    mode = 0;
+    spi_send(0x14);
+    mode = 1;
+    spi_send(0x84);
+    mode = 0;
+    wait_us(10);
+    mode = 1;
+    spi_send(0x02);
+    mode = 0;
+    wait_us(10);
+    mode = 1;
+    spi_send(0xc3);
+        
+#if 0
+    spi.format(8, 3);
+    spi.frequency(100000);
+    mode = 1;
+    wait_us(100);
+    mode = 0;
+    spi.write(0x68); // 0x16
+    wait_us(100);
+    mode = 1;
+    wait_us(100);
+    spi.write(0x84); // 0x21
+    wait_us(100);
+    mode = 0;
+    spi.write(0x28); // 0x14
+    wait_us(100);
+    mode = 1;
+    wait_us(100);
+    spi.write(0x21); // 0x84
+    wait_us(100);
+    mode = 0;
+    //spi.write(0x28); // 0x14
+    wait_us(100);
+    mode = 1;
+    wait_us(100);
+    spi.write(0x40); // 0x02
+    wait_us(100);
+    mode = 0;
+    //spi.write(0x28); // 0x14
+    wait_us(100);
+    mode = 1;
+    wait_us(100);
+    spi.write(0xc3); // 0xc3
+    //wait_us(100);
+    //mode = 0;
+    //wait_us(100);    
+    //mode = 1;
+#endif
+}
+
 int main() {
+    init_uda1345();
     i2srx.masterslave(I2S_SLAVE);
     i2srx.frequency(96000);
     i2srx.start();