void low_power(void) { /* Use as little power as possible */ random_walk_disable(); motor_off(); fled_off(); /* IR Led off */ P4OUT &= ~1; P4DIR |= 1; P4SEL &= ~1; dint(); _BIS_SR(LPM3_bits); while(1); }
interrupt (ADC10_VECTOR) adc10_isr( void ) { static uint16_t food0; /*output from food with LED off*/ static uint16_t food1; /*output from food with LED on*/ static uint32_t batt_time = 0; adc10_dis(); switch(curreading){ case PD1: pd_value[0] = ADC10MEM; adc10_set_channel(PD2_CHANNEL); curreading = PD2; break; case PD2: pd_value[1] = ADC10MEM; adc10_set_channel(PD3_CHANNEL); curreading = PD3; break; case PD3: pd_value[2] = ADC10MEM; /* sample the battery voltage once in a while */ if (the_time > batt_time) { batt_time = the_time + BATT_INTERVAL; adc10_set_channel(BATT_CHANNEL); curreading = BATT; /* disable other channels to prevent coupling of photocurrents */ ADC10AE0 = 0; /* Use ACLK */ ADC10CTL1 = (ADC10CTL1 & (~ADC10SSEL_SMCLK)) | ADC10SSEL_ACLK; /* Remove clock divide */ ADC10CTL1 &= ~ADC10DIV_7; ADC10CTL0 |= SREF_1; /* Use 2.5V Reference */ /* Divide by 4 */ ADC10CTL0 = (ADC10CTL0 & (~ADC10SHT_DIV64)) | ADC10SHT_DIV4; } else { adc10_set_channel(FOOD_CHANNEL); curreading = FOOD0; } bearing_set( pd_value ); break; case BATT: battval = ADC10MEM; adc10_set_channel(FOOD_CHANNEL); ADC10AE0 = CHANNEL_CONFIG; ADC10CTL1 &= ~ADC10SSEL_SMCLK; ADC10CTL1 |= ADC10SSEL_MCLK; /* Bacl to master clock*/ ADC10CTL1 |= ADC10DIV_7; /* Divide by 7 */ ADC10CTL0 &= ~SREF_7; /* Vcc - Vss rails */ ADC10CTL0 |= ADC10SHT_DIV4; /* Divide clock by 64 */ curreading = FOOD0; break; case FOOD0: /* FLED Off */ food0 = ADC10MEM; adc10_set_channel(FOOD_CHANNEL); curreading = FOOD1; break; case FOOD1: /* Fled ON */ food1 = ADC10MEM; adc10_set_channel(PD1_CHANNEL); foodcallback(food0, food1); curreading = PD1; break; } fled_off(); }