Backup NV-RAM refactor (#518)
* Backup NV-RAM refactor * More comments on BACKUP_IGNITION_SWITCH_COUNTER
This commit is contained in:
parent
59d073ea42
commit
45d89fdba8
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* @file backup_ram.cpp
|
||||
*
|
||||
* @date Dec 19, 2017
|
||||
*/
|
||||
|
||||
#include "backup_ram.h"
|
||||
|
||||
uint32_t backupRamLoad(backup_ram_e idx) {
|
||||
switch (idx) {
|
||||
case BACKUP_STEPPER_POS:
|
||||
return RTCD1.rtc->BKP0R & 0xffff;
|
||||
case BACKUP_IGNITION_SWITCH_COUNTER:
|
||||
return (RTCD1.rtc->BKP0R >> 16) & 0xff;
|
||||
default:
|
||||
//scheduleMsg(logger, "Invalid backup ram idx %d", idx);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void backupRamSave(backup_ram_e idx, uint32_t value) {
|
||||
switch (idx) {
|
||||
case BACKUP_STEPPER_POS:
|
||||
RTCD1.rtc->BKP0R = (RTCD1.rtc->BKP0R & ~0x0000ffff) | (value & 0xffff);
|
||||
break;
|
||||
case BACKUP_IGNITION_SWITCH_COUNTER:
|
||||
RTCD1.rtc->BKP0R = (RTCD1.rtc->BKP0R & ~0x00ff0000) | ((value & 0xff) << 16);
|
||||
break;
|
||||
default:
|
||||
//scheduleMsg(logger, "Invalid backup ram idx %d, value 0x08x", idx, value);
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* @file backup_ram.cpp
|
||||
* @brief Non-volatile backup-RAM registers support
|
||||
*
|
||||
* @date Dec 19, 2017
|
||||
*/
|
||||
|
||||
#ifndef BACKUP_RAM_H_
|
||||
#define BACKUP_RAM_H_
|
||||
|
||||
#include "main.h"
|
||||
#include "efiGpio.h"
|
||||
|
||||
typedef enum {
|
||||
/**
|
||||
* IAC Stepper motor position, 16-bit (stored in BKP0R 0..15)
|
||||
* Used in stepper.cpp
|
||||
*/
|
||||
BACKUP_STEPPER_POS,
|
||||
/**
|
||||
* Ignition switch counter, 8-bit (stored in BKP0R 16..23)
|
||||
* The counter stores the number of times the ignition switch is turned on. Used for prime injection pulse.
|
||||
* We need a protection against 'fake' ignition switch on and off (i.e. no engine started), to avoid repeated prime pulses.
|
||||
* So we check and update the ignition switch counter in non-volatile backup-RAM.
|
||||
* See startPrimeInjectionPulse() in controllers/trigger/main_trigger_callback.cpp
|
||||
*/
|
||||
BACKUP_IGNITION_SWITCH_COUNTER,
|
||||
} backup_ram_e;
|
||||
|
||||
|
||||
// load data from backup-power RTC registers (non-volatile memory)
|
||||
uint32_t backupRamLoad(backup_ram_e idx);
|
||||
// use backup-power RTC registers (non-volatile memory) to store the data
|
||||
void backupRamSave(backup_ram_e idx, uint32_t value);
|
||||
|
||||
#endif /* BACKUP_RAM_H_ */
|
|
@ -30,5 +30,6 @@ HW_LAYER_EMS_CPP = $(HW_LAYER_EGT_CPP) \
|
|||
$(PROJECT_DIR)/hw_layer/servo.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/io_pins.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/stm32f4/mpu_util.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/rtc_helper.cpp
|
||||
$(PROJECT_DIR)/hw_layer/rtc_helper.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/backup_ram.cpp
|
||||
|
|
@ -20,11 +20,11 @@ static Logging *logger;
|
|||
|
||||
static void saveStepperPos(int pos) {
|
||||
// use backup-power RTC registers to store the data
|
||||
RTCD1.rtc->BKP0R = (pos + 1);
|
||||
backupRamSave(BACKUP_STEPPER_POS, pos + 1);
|
||||
}
|
||||
|
||||
static int loadStepperPos() {
|
||||
return (int)RTCD1.rtc->BKP0R - 1;
|
||||
return (int)backupRamLoad(BACKUP_STEPPER_POS) - 1;
|
||||
}
|
||||
|
||||
static msg_t stThread(StepperMotor *motor) {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include "main.h"
|
||||
#include "efiGpio.h"
|
||||
#include "backup_ram.h"
|
||||
|
||||
class StepperMotor {
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue