diff options
Diffstat (limited to 'firmware/drivers/adc-as3514.c')
-rw-r--r-- | firmware/drivers/adc-as3514.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/firmware/drivers/adc-as3514.c b/firmware/drivers/adc-as3514.c index 8c661eb133..3b411a379d 100644 --- a/firmware/drivers/adc-as3514.c +++ b/firmware/drivers/adc-as3514.c | |||
@@ -26,40 +26,18 @@ | |||
26 | /* Read 10-bit channel data */ | 26 | /* Read 10-bit channel data */ |
27 | unsigned short adc_read(int channel) | 27 | unsigned short adc_read(int channel) |
28 | { | 28 | { |
29 | unsigned short data = 0; | 29 | unsigned char buf[2]; |
30 | |||
31 | if ((unsigned)channel >= NUM_ADC_CHANNELS) | ||
32 | return 0; | ||
33 | 30 | ||
34 | ascodec_lock(); | 31 | ascodec_lock(); |
35 | 32 | ||
36 | /* Select channel */ | 33 | /* Select channel */ |
37 | if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0) | 34 | ascodec_write(AS3514_ADC_0, (channel << 4)); |
38 | { | ||
39 | unsigned char buf[2]; | ||
40 | |||
41 | /* | ||
42 | * The AS3514 ADC will trigger an interrupt when the conversion | ||
43 | * is finished, if the corresponding enable bit in IRQ_ENRD2 | ||
44 | * is set. | ||
45 | * Previously the code did not wait and this apparently did | ||
46 | * not pose any problems, but this should be more correct. | ||
47 | * Without the wait the data read back may be completely or | ||
48 | * partially (first one of the two bytes) stale. | ||
49 | */ | ||
50 | ascodec_wait_adc_finished(); | ||
51 | 35 | ||
52 | 36 | ascodec_readbytes(AS3514_ADC_0, 2, buf); | |
53 | /* Read data */ | ||
54 | if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0) | ||
55 | { | ||
56 | data = (((buf[0] & 0x3) << 8) | buf[1]); | ||
57 | } | ||
58 | } | ||
59 | 37 | ||
60 | ascodec_unlock(); | 38 | ascodec_unlock(); |
61 | 39 | ||
62 | return data; | 40 | return (((buf[0] & 0x3) << 8) | buf[1]); |
63 | } | 41 | } |
64 | 42 | ||
65 | void adc_init(void) | 43 | void adc_init(void) |