Project

General

Profile

Revision 1391

Added by James Kong over 14 years ago

Revised analog.

View differences:

branches/analog/code/projects/libdragonfly/analog.c
49 49
 * @{
50 50
 **/
51 51

  
52
int adc_loop_status = ADC_LOOP_STOPPED;
53
int adc_sig_stop_loop = 0;
54
int adc_current_port = 0;
55
adc_t an_val[11];
52
volatile int adc_loop_status = ADC_LOOP_STOPPED;
53
volatile int adc_sig_stop_loop = 0;
54
volatile int adc_current_port = 0;
55
volatile adc_t an_val[11];
56 56

  
57 57
/**
58 58
 * Initializes the ADC.
......
173 173
 * @see analog_stop_loop, analog_loop_status
174 174
 **/
175 175
void analog_start_loop(void) {
176
	//Start the conversion, enable ADC interrupt
177
	ADCSRA |= _BV(ADSC) | _BV(ADIE);
178
	adc_loop_status = ADC_LOOP_RUNNING;
176
	if(adc_loop_status != ADC_LOOP_RUNNING){
177
		//Start the conversion, enable ADC interrupt
178
		ADCSRA |= _BV(ADIE);
179
		ADCSRA |= _BV(ADSC);
180
		adc_loop_status = ADC_LOOP_RUNNING;
181
	}
179 182
}
180 183

  
181 184
/**
......
322 325
ISR(ADC_vect) {
323 326
	int adc_h = 0;
324 327
	int adc_l = 0;
328
	
329
	if(adc_loop_status != ADC_LOOP_RUNNING) return;
325 330

  
326 331
	//Store the value only if this read isn't for the BOM
327 332
	if (ADMUX != BOM_PORT) {
......
355 360

  
356 361
	//Stop loop if signal is set
357 362
	if(adc_sig_stop_loop) {
358
		//Disable the interrupt
359
		ADCSRA &= _BV(ADIE);
360 363
		adc_sig_stop_loop = 0;
361 364
		adc_loop_status = ADC_LOOP_STOPPED;
362 365
		return;
363 366
	}
364 367
	
368
	/*
369
	count++;
370
	usb_puts("adc_int\t");
371
	usb_puti(count);
372
	usb_puts("\n\r");
373
	
374
	delay_ms(100);
375
	*/
376
	
377
	
365 378
	//Start next conversion
366 379
	ADCSRA |= _BV(ADSC);
367 380
}
branches/analog/code/projects/libdragonfly/analog.h
97 97
/** @brief Analog loop status.  No ADC conversion running.**/
98 98
#define ADC_LOOP_STOPPED 0
99 99

  
100
/** @brief Analog init parameter. Start the analog loop. **/
101
#define ADC_START 1
102
/** @brief Analog init parameter. Don't start the analog loop. **/
103
#define ADC_STOP  0
104

  
100 105
#define ADMUX_OPT 0x60
101 106

  
102 107
/** @brief Struct to hold the value of a particular analog port **/

Also available in: Unified diff