diff options
Diffstat (limited to 'src/cc1111/ao_timer.c')
| -rw-r--r-- | src/cc1111/ao_timer.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/src/cc1111/ao_timer.c b/src/cc1111/ao_timer.c index d681f51b..2fbc6621 100644 --- a/src/cc1111/ao_timer.c +++ b/src/cc1111/ao_timer.c @@ -83,6 +83,11 @@ ao_timer_init(void)  	T1CTL = T1CTL_MODE_MODULO | T1CTL_DIV_8;  } +#ifndef NEEDS_CC1111_CLOCK_HACK +#define NEEDS_CC1111_CLOCK_HACK		1 +#endif + +#if NEEDS_CC1111_CLOCK_HACK  static void  ao_clock_delay(void)  { @@ -91,6 +96,7 @@ ao_clock_delay(void)  	while (--i)  		ao_arch_nop();  } +#endif  /*   * AltOS always cranks the clock to the max frequency @@ -98,6 +104,7 @@ ao_clock_delay(void)  void  ao_clock_init(void)  { +#if NEEDS_CC1111_CLOCK_HACK  	/* Power up both oscillators */  	SLEEP &= ~(SLEEP_OSC_PD); @@ -115,16 +122,18 @@ ao_clock_init(void)  	 */  	ao_clock_delay(); +#endif  	/* Switch system clock to crystal oscilator */  	CLKCON = (CLKCON & ~CLKCON_OSC_MASK) | (CLKCON_OSC_XTAL); +	/* Wait for the HFRC oscillator to be stable */ +	while (!(SLEEP & SLEEP_XOSC_STB)) +		; +  	/* Power down the unused HFRC oscillator */  	SLEEP |= SLEEP_OSC_PD; -	/* Wait for HFRC to power down */ -	while ((SLEEP & SLEEP_HFRC_STB) != 0) -		;  	/* Crank up the timer tick and system clock speed */  	CLKCON = ((CLKCON & ~(CLKCON_TICKSPD_MASK | CLKCON_CLKSPD_MASK)) |  		  (CLKCON_TICKSPD_1 | CLKCON_CLKSPD_1));  | 
