¿Puedo cambiar dinámicamente la frecuencia del reloj de entrada del AT91SAM3X8E?

3

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)?

    
pregunta eva_k

1 respuesta

1

No sé nada sobre el AT91SAM3X8E específicamente, pero supongo una respuesta basada en mi conocimiento de los circuitos integrados.

Teóricamente, no hay ninguna razón por la que no pueda cambiar dinámicamente la frecuencia del reloj maestro en un circuito digital. De lo que debe tener cuidado es que durante el cambio no puede tener ninguno dos flancos ascendentes sucesivos que violen la frecuencia máxima del dispositivo. Si imagina que se está cambiando de una forma de onda a otra cuando el reloj 'cambiado de' está cayendo y el reloj 'cambiado a' está aumentando, entonces podría obtener un período de reloj para un ciclo que podría ser mucho menor que el período de cualquier reloj. Esto haría saltar el tiempo en varios de los caminos y dejaría a su micro en un estado ilegal.

Si tiene alguna forma de garantizar que puede sincronizar correctamente la transición entre los relojes sin crear tal pulso, no se me ocurre ningún problema.

    
respondido por el Tim

Lea otras preguntas en las etiquetas