summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-05-11 16:24:26 -0700
committerKeith Packard <keithp@keithp.com>2011-05-11 16:24:26 -0700
commitcb0192d389d6c76b8653ee6b7552f6c5ddc74c95 (patch)
tree8cf27b92878fe19ff0fb33fa67fca452c737b319
parentfef945e36c2397dd39b68995ed8d2ab81a4d24cd (diff)
ao-bringup-avr: Enable crystal clock in blink demo
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--ao-bringup-avr/ao-blink.c44
1 files changed, 42 insertions, 2 deletions
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 <avr/io.h>
+#include <avr/interrupt.h>
#define F_CPU 16000000UL // 16 MHz
#include <util/delay.h>
@@ -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);
}
}