3 votos

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

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

1voto

user10765 Puntos 121

No sé nada sobre el AT91SAM3X8E específicamente, pero voy a adivinar una respuesta basada en mi conocimiento de los CI.

En teoría, no hay razón para no poder cambiar dinámicamente la frecuencia del reloj maestro en un circuito digital. Lo que tienes que tener cuidado es que durante la conmutación no puedes tener cualquier dos flancos ascendentes sucesivos que violan la frecuencia máxima del dispositivo. Si se imagina que se pasa de una forma de onda a otra cuando el reloj "conmutado desde" está cayendo y el reloj "conmutado a" está subiendo, entonces podría obtener un período de reloj para un ciclo que podría ser mucho menor que el período de cualquiera de los dos relojes. Esto haría saltar la sincronización en varias de las rutas y dejaría tu micro en un estado ilegal.

Si tienes alguna forma de garantizar que puedes sincronizar correctamente la transición entre los relojes sin crear ese pulso, no se me ocurre ningún problema al respecto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X