Background:
Estoy intentando usar un microcontrolador AT91SAM3X8E (para compatibilidad con Arduino Due) para crear un USB para la interfaz \ $ I ^ {2} S \ $. La mayoría de \ $ I ^ {2} S \ $ CODEC requieren un reloj maestro que es \ $ MCLK = 256 * BCLK \ $ donde BCLK es el reloj de bits, que a su vez es \ $ BCLK = 64 * F_ {s} \ $ . Sería trivial generar si solo estuviera tratando con una frecuencia de muestra, pero me gustaría conservar la compatibilidad para todos los valores comunes (44.1kHz, 48kHz, 88.2kHz, 96kHz, 196kHz).
Planeo utilizar el Controlador en serie síncrono (SSC) del microcontrolador para esta tarea, que parece muy adecuado para.
Problema :
Todas las señales del reloj \ $ I ^ {2} S \ $ deben ejecutarse a partir de un múltiplo de la frecuencia de muestreo, que varía entre dos conjuntos: múltiplos de 44.1 kHz y múltiplos de 48 kHz. Esto significa que el reloj que controla el controlador serie debe cambiarse dinámicamente entre dos valores. Al principio, pensé que conducir la señal de transmisión del controlador en serie con la frecuencia adecuada sería la mejor opción, pero eso no permite la división dinámica del reloj para admitir diferentes frecuencias de muestreo. Llegué a la conclusión (quizás de manera incorrecta) que necesito poder cambiar el reloj maestro del microcontrolador para solucionar todos estos problemas.
Pregunta :
¿Puede el AT91SAM3X8E admitir el cambio dinámico del reloj que recibe en el pin XIN o causaría errores en el tiempo de ejecución? Si es así, ¿habría una manera de evitar eso (como usar temporalmente el oscilador RC)?