From: Keith Packard Date: Wed, 11 May 2011 23:24:26 +0000 (-0700) Subject: ao-bringup-avr: Enable crystal clock in blink demo X-Git-Tag: 0.9.3~39 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=cb0192d389d6c76b8653ee6b7552f6c5ddc74c95;p=fw%2Faltos ao-bringup-avr: Enable crystal clock in blink demo Signed-off-by: Keith Packard --- diff --git a/ao-bringup-avr/ao-blink.c b/ao-bringup-avr/ao-blink.c index 5694b9a3..4d726fd9 100644 --- a/ao-bringup-avr/ao-blink.c +++ b/ao-bringup-avr/ao-blink.c @@ -16,6 +16,7 @@ */ #include +#include #define F_CPU 16000000UL // 16 MHz #include @@ -26,12 +27,51 @@ 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); } }