diff options
Diffstat (limited to 'firmware/drivers')
| -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 8c661eb..3b411a3 100644 --- a/firmware/drivers/adc-as3514.c +++ b/firmware/drivers/adc-as3514.c @@ -26,40 +26,18 @@ /* Read 10-bit channel data */ unsigned short adc_read(int channel) { - unsigned short data = 0; - - if ((unsigned)channel >= NUM_ADC_CHANNELS) - return 0; + unsigned char buf[2]; ascodec_lock(); /* Select channel */ - if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0) - { - unsigned char buf[2]; - - /* - * The AS3514 ADC will trigger an interrupt when the conversion - * is finished, if the corresponding enable bit in IRQ_ENRD2 - * is set. - * Previously the code did not wait and this apparently did - * not pose any problems, but this should be more correct. - * Without the wait the data read back may be completely or - * partially (first one of the two bytes) stale. - */ - ascodec_wait_adc_finished(); + ascodec_write(AS3514_ADC_0, (channel << 4)); - - /* Read data */ - if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0) - { - data = (((buf[0] & 0x3) << 8) | buf[1]); - } - } + ascodec_readbytes(AS3514_ADC_0, 2, buf); ascodec_unlock(); - - return data; + + return (((buf[0] & 0x3) << 8) | buf[1]); } void adc_init(void) |