diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-10-22 15:28:40 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-10-22 15:28:40 +0000 |
commit | 4c06ad6e72293e94a867bdca9296abc06ab98ab3 (patch) | |
tree | 2de60349cd1760de7aee3a45f9135da7cc93fe0e | |
parent | 0ed79898afe2e21fcd86544b427f2f1ffa177130 (diff) | |
download | rockbox-4c06ad6e72293e94a867bdca9296abc06ab98ab3.tar.gz rockbox-4c06ad6e72293e94a867bdca9296abc06ab98ab3.zip |
mr500 sort of working battery measurments. probably could be done better, but it works
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15271 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c | 13 | ||||
-rwxr-xr-x | firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c | 35 |
2 files changed, 46 insertions, 2 deletions
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c index f31c6ecb9f..10587a485f 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c @@ -187,8 +187,21 @@ int button_read_device(int *data) } /* Touchpad data available interupt */ +void read_battery_inputs(void); void GIO14(void) { + short tsadc = tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS); + short adscm = (tsadc&TSADC_ADSCM_MASK)>>TSADC_ADSCM_SHIFT; + switch (adscm) + { + case 1: + case 2: + touch_available = true; + break; + case 0xb: + read_battery_inputs(); + break; + } touch_available = true; IO_INTC_IRQ2 = (1<<3); /* IRQ_GIO14 == 35 */ } diff --git a/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c index 40d65d145d..0f85a5b007 100755 --- a/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c @@ -20,7 +20,10 @@ #include "config.h" #include "adc.h" #include "powermgmt.h" +#include "tsc2100.h" +#include "kernel.h" +unsigned short current_voltage = 3910; const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = { 3450 @@ -42,10 +45,38 @@ const unsigned short percent_to_volt_charge[11] = { 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990 }; - +void read_battery_inputs(void) +{ + short tsadc = tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS); + short adscm = (tsadc&TSADC_ADSCM_MASK)>>TSADC_ADSCM_SHIFT; + if (adscm == 0xb) /* battery is available */ + { + current_voltage = tsc2100_readreg(0, 5); /* BAT1 */ + tsc2100_readreg(0, 6); /* BAT2 */ + tsc2100_readreg(0, 7); /* AUX */ + /* reset the TSC2100 to read touches */ + tsadc &= ~(TSADC_PSTCM|TSADC_ADST|TSADC_ADSCM_MASK); + tsadc |= TSADC_PSTCM|(0x2<<TSADC_ADSCM_SHIFT); + tsc2100_writereg(TSADC_PAGE, TSADC_ADDRESS, tsadc); + tsc2100_writereg(TSSTAT_PAGE, TSSTAT_ADDRESS, 2<<TSSTAT_PINTDAV_SHIFT); + } +} + /* Returns battery voltage from ADC [millivolts] */ unsigned int battery_adc_voltage(void) { - return 3910; + static unsigned last_tick = 0; + short tsadc = tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS); + if (TIME_BEFORE(last_tick+2*HZ, current_tick)) + { + tsadc &= ~(TSADC_PSTCM|TSADC_ADST|TSADC_ADSCM_MASK); + tsadc |= 0xb<<TSADC_ADSCM_SHIFT; + tsc2100_writereg(TSADC_PAGE, TSADC_ADDRESS, tsadc&(~(1<<15))); + tsc2100_writereg(TSSTAT_PAGE, TSSTAT_ADDRESS, 2<<TSSTAT_PINTDAV_SHIFT); + last_tick = current_tick; + } + else + read_battery_inputs(); + return current_voltage; } |