Antecedentes:
Estoy tratando de utilizar un microcontrolador AT91SAM3X8E (para la compatibilidad con Arduino Due) para crear un USB a \$I^{2}S\$ interfaz. La mayoría de \$I^{2}S\$ Los CODECs 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}\$ . Esto sería trivial de generar si sólo estuviera tratando con una frecuencia de muestreo, pero me gustaría mantener la compatibilidad para todos los valores comunes (44,1kHz, 48kHz, 88,2kHz, 96kHz, 196kHz).
Para esta tarea tengo previsto utilizar el Controlador Serial Síncrono (SSC) del microcontrolador, que parece muy adecuado para ello.
El problema:
Todos los \$I^{2}S\$ Las señales de reloj deben funcionar a partir de un múltiplo de la frecuencia de muestreo, que varía entre dos conjuntos: múltiplos de 44,1kHz y múltiplos de 48kHz. Esto significa que el reloj que conduce el controlador de serie debe cambiar dinámicamente entre dos valores. Al principio, pensé que conducir el reloj de transmisión del controlador de serie con la frecuencia adecuada sería la mejor opción, pero eso no permite la división dinámica del reloj para soportar diferentes frecuencias de muestreo. Llegué a la conclusión (tal vez incorrecta) de que tengo que ser capaz de conmutar el reloj maestro del microcontrolador con el fin de abordar todas estas cuestiones.
Pregunta:
¿Puede el AT91SAM3X8E soportar el cambio dinámico del reloj que recibe en el pin XIN o causaría errores en tiempo de ejecución? Si es así, ¿habría una manera de evitarlos (como usar temporalmente el oscilador RC)?