samd21: Enable xosc AGC. Wait longer for xosc to start
[fw/altos] / src / samd21 / ao_timer.c
index 2b431d38ada440fa3581d8e46b3237158b69a2b7..51a672ad88ab73028bcd02bfd3e756e037bc3562 100644 (file)
@@ -122,9 +122,10 @@ ao_clock_init(void)
                ;
 
 #ifdef AO_XOSC
+       ao_enable_output(&samd21_port_b, 10, 1);
        /* Enable xosc (external xtal oscillator) */
-       samd21_sysctrl.xosc = ((SAMD21_SYSCTRL_XOSC_STARTUP_8192 << SAMD21_SYSCTRL_XOSC_STARTUP) |
-                              (0 << SAMD21_SYSCTRL_XOSC_AMPGC) |
+       samd21_sysctrl.xosc = ((SAMD21_SYSCTRL_XOSC_STARTUP_16384 << SAMD21_SYSCTRL_XOSC_STARTUP) |
+                              (1 << SAMD21_SYSCTRL_XOSC_AMPGC) |
                               (SAMD21_SYSCTRL_XOSC_GAIN_16MHz << SAMD21_SYSCTRL_XOSC_GAIN) |
                               (0 << SAMD21_SYSCTRL_XOSC_ONDEMAND) |
                               (1 << SAMD21_SYSCTRL_XOSC_RUNSTDBY) |
@@ -135,6 +136,8 @@ ao_clock_init(void)
        while ((samd21_sysctrl.pclksr & (1 << SAMD21_SYSCTRL_PCLKSR_XOSCRDY)) == 0)
                ;
 
+       ao_enable_output(&samd21_port_b, 11, 1);
+
        /* program DPLL */
 
        /* Divide down */
@@ -289,4 +292,6 @@ ao_clock_init(void)
 
        /* Disable automatic NVM write operations */
        samd21_nvmctrl.ctrlb |= (1UL << SAMD21_NVMCTRL_CTRLB_MANW);
+
+       ao_gpio_set(&samd21_port_b, 10, 0);
 }