ao-bringup-avr: Enable crystal clock in blink demo
authorKeith Packard <keithp@keithp.com>
Wed, 11 May 2011 23:24:26 +0000 (16:24 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 11 May 2011 23:24:26 +0000 (16:24 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
ao-bringup-avr/ao-blink.c

index 5694b9a34c7bab1443dd713c90ff0ab0d2812646..4d726fd9c60be63eb5772234b0990229d254abee 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #include <avr/io.h>
+#include <avr/interrupt.h>
 #define F_CPU 16000000UL       // 16 MHz
 #include <util/delay.h>
 
 
 int main(void)
 {
+       /* disable RC clock */
+       CLKSEL0 &= ~(1 << RCE);
+
+       /* Disable PLL */
+       PLLCSR &= ~(1 << PLLE);
+
+       /* Enable external clock */
+       CLKSEL0 |= (1 << EXTE);
+
+       /* wait for external clock to be ready */
+       while ((CLKSTA & (1 << EXTON)) == 0)
+               ;
+
+       /* select external clock */
+       CLKSEL0 |= (1 << CLKS);
+
+       /* Disable the clock prescaler */
+       cli();
+       CLKPR = (1 << CLKPCE);
+       CLKPR = 0;
+       sei();
+
+       /* Set up the PLL to use the crystal */
+
+       /* Use primary system clock as PLL source */
+       PLLFRQ = ((0 << PINMUX) |       /* Use primary clock */
+                 (0 << PLLUSB) |       /* No divide by 2 for USB */
+                 (0 << PLLTM0) |       /* Disable high speed timer */
+                 (0x4 << PDIV0));      /* 48MHz PLL clock */
+
+       /* Set the frequency of the crystal */
+       PLLCSR |= (1 << PINDIV);        /* For 16MHz crystal on Teensy board */
+       // PLLCSR &= ~(1 << PINDIV);    /* For 8MHz crystal on TeleScience board */
+
+       /* Enable the PLL */
+       PLLCSR |= (1 << PLLE);
+       while (!(PLLCSR & (1 << PLOCK)))
+               ;
+
        LEDDDR |= (1 << LEDDDRPIN);
 
        while (1) {
                LEDPORT |= (1 << LEDOUT);
-               _delay_ms(200);
+               _delay_ms(1000);
                LEDPORT &= ~(1 << LEDOUT);
-               _delay_ms(200);
+               _delay_ms(1000);
        }
 }