XMega Obtener velocidad de reloj

Estoy depurando un poco mi proyecto y necesito verificar si estoy configurando mi cristal externo correctamente. Tengo la capacidad de imprimir en un monitor en serie a través de USB, ¿es posible recuperar la velocidad del reloj y si la CPU se está ejecutando o no con el reloj interno o un cristal externo para poder imprimir eso?

¿Tienes un osciloscopio? Podría alternar un pin de E/S y medir la velocidad del reloj de esa manera.
Yo no. Necesito poder verificar el código.

Respuestas (2)

Puede medir la velocidad actual del reloj de la CPU utilizando el reloj de tiempo real interno impulsado por el oscilador local de 32,76 kHz. No tengo un XMEGA a mano en este momento, así que no puedo dar el procedimiento exacto, pero la idea general es configurar el RTC para medir una cantidad fija de tiempo (por ejemplo, 1 ms) y luego medir cuántos pulsos de reloj ocurren durante ese período de tiempo utilizando uno de los contadores/temporizadores de 16 bits. Si, por ejemplo, cuenta 8044 tics durante un solo ciclo RTC de 1 ms, entonces la velocidad del reloj de su CPU es 8044/1 ms = ~8 Mhz .

Puede verificar si se está quedando sin un reloj interno o externo mirando los bits de Selección de reloj del sistema (SCLKSEL) en el Registro de control de reloj (CTRL).

Esto no requiere un alcance. Requiere un pin de E/S.

Según lo que crea que es la frecuencia del cristal, escriba una rutina que crea que debería alternar un pin de E/S cada segundo (500 ms encendido, 500 ms apagado), luego conecte un LED al pin y cuente la cantidad de pulsos en un minuto. Luego, dependiendo de si el número sale 60 o algo más, puedes tener una idea de lo que está pasando.

He hecho esto todo el tiempo para comprobar la configuración de mi reloj.

Esto funciona. Obtuve 60 pulsos en un minuto, pero no sé a qué frecuencia se está ejecutando realmente o si se está ejecutando en el reloj interno o en el reloj externo.
@bwoogie, haría algunos experimentos. Primero, uno fácil sería desconectar el reloj externo y ver si todavía funciona. En segundo lugar, haga un cambio en su código que crea que debería hacer una diferencia medible y vea qué sucede realmente. Dependiendo de cómo haya escrito su código (ya sea un bucle simple o haya utilizado un temporizador), debería ser posible trabajar hacia atrás y calcular la frecuencia.