Estoy usando un ATxmega64A3U, he conectado un cristal externo de 4MHz y dos 18pF topes de carga . Estoy usando el módulo ASF para la configuración del reloj, sin embargo, al iniciar puedo ver que el código se cuelga en el siguiente lugar:
static inline void osc_wait_ready(uint8_t id)
{
while (!osc_is_ready(id)) {
/* Do nothing */
}
}
El while espera a que la fuente del reloj se estabilice, pero eso nunca sucede. ¿Alguien tiene alguna sugerencia de por qué esto podría ser?
Adición
El código que he publicado arriba es de la ASF, para asegurarme de saber qué estoy ejecutando, escribí el siguiente código y pude ver que el código se atasca en el bucle while que espera a que el oscilador se estabilice.
OSC_CTRL |= OSC_XOSCEN_bm;
while(!(OSC_STATUS & OSC_XOSCRDY_bm));
CCP = CCP_IOREG_gc;
CLK_CTRL = (CLK_CTRL & ~CLK_SCLKSEL_gm) | CLK_SCLKSEL_XOSC_gc;
OSC_CTRL &= ~OSC_RC2MEN_bm;
Habilito el oscilador externo, espero que se estabilice, deshabilite el bloqueo en el registro, cambio al oscilador externo, deshabilite el oscilador interno de 2MHz.