From 9e8fe0e4c662d3d5c26ea2f1f64c7da66cf3ce04 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 30 Oct 2006 11:33:38 +0000 Subject: General: changed local adc to voltage conversions in several places to use battery_voltage. Added battery_read_info function for unfiltered battery information. x5: removed adc_read as a distinct function. Removed adc tick task. adc_init is empty inline. Adjusted battery scale, voltage to level array and read 10 bits from the ADC for battery since 255 levels is not enough for true centivolt resolution. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11396 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/coldfire/iaudio/x5/adc-target.h | 5 ++- firmware/target/coldfire/iaudio/x5/adc-x5.c | 48 +++++++++--------------- firmware/target/coldfire/iaudio/x5/pcf50606-x5.c | 4 +- 3 files changed, 23 insertions(+), 34 deletions(-) (limited to 'firmware/target/coldfire/iaudio') diff --git a/firmware/target/coldfire/iaudio/x5/adc-target.h b/firmware/target/coldfire/iaudio/x5/adc-target.h index 4081562fe5..28ba6225d1 100644 --- a/firmware/target/coldfire/iaudio/x5/adc-target.h +++ b/firmware/target/coldfire/iaudio/x5/adc-target.h @@ -28,5 +28,8 @@ /* Force a scan now */ unsigned short adc_scan(int channel); - +static inline unsigned short adc_read(int channel) + { return adc_scan(channel); } +static inline void adc_init(void) + {} #endif /* _ADC_TARGET_H_ */ diff --git a/firmware/target/coldfire/iaudio/x5/adc-x5.c b/firmware/target/coldfire/iaudio/x5/adc-x5.c index 72aec7d547..1895cacfe9 100755 --- a/firmware/target/coldfire/iaudio/x5/adc-x5.c +++ b/firmware/target/coldfire/iaudio/x5/adc-x5.c @@ -24,49 +24,35 @@ #include "adc.h" #include "pcf50606.h" -static unsigned short adcdata[NUM_ADC_CHANNELS]; - -static const int adcc2_parms[] = +/* get remaining 2 bits and return 10 bit value */ +static int get_10bit_voltage(int msbdata) { - [ADC_BUTTONS] = 0x80 | (5 << 1) | 1, /* ADCIN2 */ - [ADC_REMOTE] = 0x80 | (6 << 1) | 1, /* ADCIN3 */ - [ADC_BATTERY] = 0x80 | (0 << 1) | 1, /* BATVOLT, resistive divider */ -}; + int data = msbdata << 2; + data |= pcf50606_read(0x31) & 0x3; + return data; +} unsigned short adc_scan(int channel) { + static const int adcc2_parms[] = + { + [ADC_BUTTONS] = 0x81 | (5 << 1), /* 8b - ADCIN2 */ + [ADC_REMOTE] = 0x81 | (6 << 1), /* 8b - ADCIN3 */ + [ADC_BATTERY] = 0x01 | (0 << 1), /* 10b - BATVOLT, resistive divider */ + }; + int level; - unsigned char data; + int data; level = set_irq_level(HIGHEST_IRQ_LEVEL); pcf50606_write(0x2f, adcc2_parms[channel]); data = pcf50606_read(0x30); - adcdata[channel] = data; + if (channel == ADC_BATTERY) + data = get_10bit_voltage(data); set_irq_level(level); - return data; -} - -unsigned short adc_read(int channel) -{ - return adcdata[channel]; -} - -static int adc_counter; - -static void adc_tick(void) -{ - if (++adc_counter == HZ) - { - adc_counter = 0; - adc_scan(ADC_BATTERY); - } -} -void adc_init(void) -{ - adc_scan(ADC_BATTERY); - tick_add_task(adc_tick); + return (unsigned short)data; } diff --git a/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c b/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c index 3443d1e567..59140667ef 100644 --- a/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c +++ b/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c @@ -128,8 +128,8 @@ void GPI0(void) if (data[2] & 0x06) { /* ACDINS/ACDREM */ - /* Check if adc_scan should actually scan main buttons or not - - bias towards "yes" out of paranoia. */ + /* Check if main buttons should be actually be scanned or not + - bias towards "yes" out of paranoia. */ button_enable_scan((data[2] & 0x02) != 0 || (pcf50606_read(0x33) & 0x01) != 0); } -- cgit v1.2.3