src/cc1111: Turn off RC osc after xtal is running
[fw/altos] / src / cc1111 / ao_timer.c
index aadee71e239e324a8b7644fe70872148e615f5d9..75cc4ce8b562e6f339d76451a103b9e3bdd73fc0 100644 (file)
 
 #include "ao.h"
 
-static volatile __data uint16_t ao_tick_count;
+volatile __data uint16_t ao_tick_count;
 
 uint16_t ao_time(void) __critical
 {
        return ao_tick_count;
 }
 
-static __xdata uint8_t ao_forever;
-
-void
-ao_delay(uint16_t ticks)
-{
-       ao_alarm(ticks);
-       ao_sleep(&ao_forever);
-       ao_clear_alarm();
-}
-
 #define T1_CLOCK_DIVISOR       8       /* 24e6/8 = 3e6 */
 #define T1_SAMPLE_TIME         30000   /* 3e6/30000 = 100 */
 
@@ -49,6 +39,9 @@ void ao_timer_isr(void) __interrupt 9
        if (++ao_adc_count == ao_adc_interval) {
                ao_adc_count = 0;
                ao_adc_poll();
+#if (AO_DATA_ALL & ~(AO_DATA_ADC))
+               ao_wakeup(DATA_TO_XDATA(&ao_adc_count));
+#endif
        }
 #endif
 }
@@ -102,6 +95,13 @@ ao_clock_init(void)
        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));