projects
/
avr_bc100.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2008-03-14 Martin Thomas <mthomas@rhrk.uni-kl.de>
[avr_bc100.git]
/
BaseTinyFirmware
/
GCC
/
statefunc.c
diff --git
a/BaseTinyFirmware/GCC/statefunc.c
b/BaseTinyFirmware/GCC/statefunc.c
index 9df2b5c93ea086c8c0d2611d1f8cec4141e571d5..ef1464dcab714766f0addf4d6fb0261e04cec53b 100644
(file)
--- a/
BaseTinyFirmware/GCC/statefunc.c
+++ b/
BaseTinyFirmware/GCC/statefunc.c
@@
-103,7
+103,7
@@
unsigned char Initialize(unsigned char inp)
// Clear on-chip EEPROM.
\r
for (page = 0; page < 4; page++) {
\r
for (i = 0; i < 32; i++) {
\r
// Clear on-chip EEPROM.
\r
for (page = 0; page < 4; page++) {
\r
for (i = 0; i < 32; i++) {
\r
- eeprom_write_byte(&BattEEPROM[page][i], 0);
\r
+
eeprom_write_byte(&BattEEPROM[page][i], 0);
\r
}
\r
}
\r
\r
}
\r
}
\r
\r
@@
-113,13
+113,16
@@
unsigned char Initialize(unsigned char inp)
ADC_Init();
\r
Time_Init();
\r
\r
ADC_Init();
\r
Time_Init();
\r
\r
+ // Enable interrupts
\r
+ sei();
\r
+
\r
// Attempt to get ADC-readings (also gets RID-data) from both batteries.
\r
for (i = 0; i < 2; i++) {
\r
EnableBattery(i);
\r
ADC_Wait();
\r
BatteryStatusRefresh();
\r
}
\r
// Attempt to get ADC-readings (also gets RID-data) from both batteries.
\r
for (i = 0; i < 2; i++) {
\r
EnableBattery(i);
\r
ADC_Wait();
\r
BatteryStatusRefresh();
\r
}
\r
-
\r
+
\r
DisableBatteries();
\r
\r
BattActive = 0; // We have to start somewhere..
\r
DisableBatteries();
\r
\r
BattActive = 0; // We have to start somewhere..
\r
@@
-166,7
+169,7
@@
unsigned char BatteryControl(unsigned char inp)
// Get ADC-readings, try to read EPROM, and start prequalification
\r
// of any uncharged battery.
\r
for (i = 0; i < 2; i++) {
\r
// Get ADC-readings, try to read EPROM, and start prequalification
\r
// of any uncharged battery.
\r
for (i = 0; i < 2; i++) {
\r
- if (eeprom_read_byte(&BattControl[i]) & BIT_BATTERY_ENABLED) {
\r
+ if (eeprom_read_byte(&BattControl[i]) & BIT_BATTERY_ENABLED) {
\r
EnableBattery(i);
\r
ADC_Wait();
\r
\r
EnableBattery(i);
\r
ADC_Wait();
\r
\r
@@
-174,7
+177,7
@@
unsigned char BatteryControl(unsigned char inp)
if (!BattData.Charged) {
\r
BatteryDataRefresh();
\r
\r
if (!BattData.Charged) {
\r
BatteryDataRefresh();
\r
\r
- return(ST_PREQUAL);
\r
+ return(ST_PREQUAL);
\r
}
\r
}
\r
}
\r
}
\r
}
\r
}
\r
@@
-246,7
+249,7
@@
void Doze(void)
ADCS.Flag = FALSE;
\r
\r
do {
\r
ADCS.Flag = FALSE;
\r
\r
do {
\r
- } while (ADCS.Flag == FALSE);
\r
+ } while (ADCS.Flag == FALSE);
\r
\r
WDTCR = (1<<WDP3)|(1<<WDP0); // 8.0 seconds at 5 volts VCC.
\r
WDTCR |= (1<<WDIF)|(1<<WDIE)|(1<<WDE); // Clear flag and enable watchdog.
\r
\r
WDTCR = (1<<WDP3)|(1<<WDP0); // 8.0 seconds at 5 volts VCC.
\r
WDTCR |= (1<<WDIF)|(1<<WDIE)|(1<<WDE); // Clear flag and enable watchdog.
\r
@@
-313,7
+316,7
@@
unsigned char Error(unsigned char inp)
\r
case ERR_NO_BATTERIES_ENABLED:
\r
// Clear if any battery gets enabled.
\r
\r
case ERR_NO_BATTERIES_ENABLED:
\r
// Clear if any battery gets enabled.
\r
- if ((eeprom_read_byte(&BattControl[0]) & BIT_BATTERY_ENABLED) || (eeprom_read_byte(&BattControl[1]) & BIT_BATTERY_ENABLED)) {
\r
+
if ((eeprom_read_byte(&BattControl[0]) & BIT_BATTERY_ENABLED) || (eeprom_read_byte(&BattControl[1]) & BIT_BATTERY_ENABLED)) {
\r
ErrorFlags &= ~i;
\r
}
\r
break;
\r
ErrorFlags &= ~i;
\r
}
\r
break;
\r
@@
-378,6
+381,10
@@
void SetErrorFlag(unsigned char Flag)
*/
\r
unsigned char JumperCheck(void)
\r
{
\r
*/
\r
unsigned char JumperCheck(void)
\r
{
\r
+ unsigned char sreg_saved;
\r
+ unsigned int adcs_rawVBAT_tmp, adcs_VIN_tmp, adcs_VBAT_tmp;
\r
+ signed int adcs_IBAT_tmp;
\r
+
\r
DisableBatteries(); // Disconnect, or loads may be destroyed!
\r
\r
PWM_Start(); // Start PWM (controls the buck charger).
\r
DisableBatteries(); // Disconnect, or loads may be destroyed!
\r
\r
PWM_Start(); // Start PWM (controls the buck charger).
\r
@@
-388,14
+395,22
@@
unsigned char JumperCheck(void)
do {
\r
// If the PWM output voltage saturates the ADC, stop PWM output and
\r
// report a failure.
\r
do {
\r
// If the PWM output voltage saturates the ADC, stop PWM output and
\r
// report a failure.
\r
- if (ADCS.rawVBAT == 1023) {
\r
+ sreg_saved = SREG;
\r
+ cli();
\r
+ adcs_rawVBAT_tmp = ADCS.rawVBAT;
\r
+ adcs_VBAT_tmp = ADCS.VBAT;
\r
+ adcs_VIN_tmp = ADCS.VIN;
\r
+ adcs_IBAT_tmp = ADCS.IBAT;
\r
+ SREG = sreg_saved;
\r
+
\r
+ if (adcs_rawVBAT_tmp == 1023) {
\r
PWM_Stop();
\r
return(FALSE);
\r
}
\r
\r
// If the absolute difference between measured (VIN - VBAT) and the
\r
// typical value are below our set maximum, everything is OK.
\r
PWM_Stop();
\r
return(FALSE);
\r
}
\r
\r
// If the absolute difference between measured (VIN - VBAT) and the
\r
// typical value are below our set maximum, everything is OK.
\r
- if (abs((signed int)(
ADCS.VIN - VIN_VBAT_DIFF_TYP - ADCS.VBAT
)) <
\r
+ if (abs((signed int)(
adcs_VIN_tmp - VIN_VBAT_DIFF_TYP - adcs_VBAT_tmp
)) <
\r
VIN_VBAT_DIFF_MAX ) {
\r
\r
PWM_Stop();
\r
VIN_VBAT_DIFF_MAX ) {
\r
\r
PWM_Stop();
\r
@@
-403,7
+418,7
@@
unsigned char JumperCheck(void)
}
\r
\r
// Charge current is too high -> check load and jumper J405 and J406.
\r
}
\r
\r
// Charge current is too high -> check load and jumper J405 and J406.
\r
- if (abs(
ADCS.IBAT
) > 100) {
\r
+ if (abs(
adcs_IBAT_tmp
) > 100) {
\r
PWM_Stop();
\r
return(FALSE);
\r
}
\r
PWM_Stop();
\r
return(FALSE);
\r
}
\r
@@
-415,7
+430,7
@@
unsigned char JumperCheck(void)
return(FALSE);
\r
}
\r
\r
return(FALSE);
\r
}
\r
\r
- // Wait for ADC conversions to complete
\r
+
// Wait for ADC conversions to complete
\r
ADC_Wait();
\r
} while (Time_Left(TIMER_GEN));
\r
\r
ADC_Wait();
\r
} while (Time_Left(TIMER_GEN));
\r
\r