Ok. A instancias de @stevenvh, así es como lo haría ...
La unidad uC que eligió no tiene una interfaz similar a I2C que normalmente se conectaría, más o menos, directamente a un DAC de audio. La solución ideal sería elegir otra unidad de usuario que soporte I2C directamente, pero, por supuesto, no siempre tenemos ese lujo. Podríamos usar algunos de los puertos de E / S en el uC, pero eso requeriría una gran cantidad de pines / señales. Una cosa que podría usarse es el periférico maestro SPI. Entonces, esto es lo que propongo.
Use un CPLD barato para conectar el puerto SPI en la unidad de control de datos con el puerto I2C en un convertidor de audio típico.
Comience con un oscilador de frecuencia apropiada, tal vez 24.576 MHz para una frecuencia de muestreo de 48 KHz. En el CPLD tienes un contador que se ejecuta fuera de este reloj. La salida del contador se utiliza para generar todos los relojes de audio: MCLK, BITCLK y LRCLK. También se utiliza para generar una o dos señales de control.
Otra sección del CPLD es un registro de desplazamiento de RX. El RX SR puede tener una longitud de 16, 24 o incluso 64 bits. Obtiene sus datos de la interfaz SPI en la unidad de control de datos, y transfiere sus datos al registro de cambios de TX a intervalos regulares. El registro de cambios de TX es del mismo tamaño que el registro de cambios de RX, y registra sus datos en el DAC a la misma velocidad que BITCLK.
El tamaño ideal de los SR es realmente un acto de equilibrio. Está equilibrando el tamaño del CPLD frente a la sobrecarga del software frente al número de bits en su audio. Por el momento, asumamos 1 canal de audio de 16 bits.
Para este ejemplo, los SR tienen 16 bits de longitud. Al comienzo de la muestra, el CPLD genera una IRQ a la CPU. La CPU responde enviando la siguiente muestra de 16 bits a través de la interfaz SPI al RX SR. Al final de la muestra, o al comienzo de la siguiente, los datos del RX SR se cargan en el TX SR, donde se transfieren al DAC. Por lo tanto, en un momento dado, podrían ocurrir dos transferencias al mismo tiempo: SPI a RX SR y TX SR a DAC.
El TX SR se configura de modo que a medida que los datos se desplazan, los ceros se desplazan hacia adentro. En realidad, envía 64 bits de datos al DAC, pero está bien si los bits "no utilizados" son todos cero.
Si desea enviar audio de 24 bits en lugar de 16 bits, simplemente alargue sus registros de desplazamiento a 24 bits. Pero si quieres ir al audio estéreo las cosas se ponen un poco más complicadas. Sé que al OP solo le importa el audio mono, pero lo incluiré aquí para que esté completo.
Puede elegir: puede dejar los SR a 16 o 24 bits, pero ejecutar los IRQ dos veces más rápido (y cargar el TX SR dos veces más rápido). O puede alargar los SR a casi 64 bits. La primera opción mantiene el CPLD pequeño, pero duplica la cantidad de IRQ que debe realizar. La segunda opción está invertida.
Para un canal simple de audio de 16 bits, necesitará un CPLD con aproximadamente 48 Flip-Flops: contador de 9 bits, dos SR de 16 bits, tres relojes de salida, un IRQ y un par de extras. Esto encajaría en una parte de Xilinx Coolrunner-II 64-macrocell que se ejecuta alrededor de US $ 1.50 en volúmenes medios. Altera tiene algunas partes de Max V que son más ricas en Flip-Flop que podrían ser más baratas.
En cuanto a un DAC adecuado, hay docenas para elegir. Cirrus Logic, Texas Instruments (Burr Brown) y AKM son los tres primeros que elegiría. Todos ellos tienen un DAC estéreo de bajo costo que funcionará bien. Cuanto más simple, mejor. Me gusta el Cirrus Logic CS4334 / 35/38/39 . Digikey tiene la parte por US $ 3. Pero los otros muchachos tienen partes muy similares por un costo similar.