rusEFI
An attempt to build an Engine Control Unit
backup_ram.cpp
Go to the documentation of this file.
1 /**
2  * @file backup_ram.cpp
3  *
4  * @date Dec 19, 2017
5  */
6 
7 #include "backup_ram.h"
8 
9 uint32_t backupRamLoad(backup_ram_e idx) {
10 #if HAL_USE_RTC
11  switch (idx) {
12  case BACKUP_STEPPER_POS:
13  return RTCD1.rtc->BKP0R & 0xffff;
15  return (RTCD1.rtc->BKP0R >> 16) & 0xff;
17  return RTCD1.rtc->BKP1R & 0xffff;
19  return (RTCD1.rtc->BKP1R >> 16) & 0xffff;
20 // it is assembly code which reads this value
21 // case DFU_JUMP_REQUESTED:
22 // return RTCD1.rtc->BKP4R;
23  default:
24  firmwareError(OBD_PCM_Processor_Fault, "Invalid backup ram idx %d", idx);
25  return 0;
26  }
27 #else
28  return 0;
29 #endif /* HAL_USE_RTC */
30 }
31 
32 void backupRamSave(backup_ram_e idx, uint32_t value) {
33 #if HAL_USE_RTC
34  switch (idx) {
35  case BACKUP_STEPPER_POS:
36  RTCD1.rtc->BKP0R = (RTCD1.rtc->BKP0R & ~0x0000ffff) | (value & 0xffff);
37  break;
39  RTCD1.rtc->BKP0R = (RTCD1.rtc->BKP0R & ~0x00ff0000) | ((value & 0xff) << 16);
40  break;
42  RTCD1.rtc->BKP1R = (RTCD1.rtc->BKP1R & ~0x0000ffff) | (value & 0xffff);
43  break;
45  RTCD1.rtc->BKP1R = (RTCD1.rtc->BKP1R & ~0xffff0000) | ((value & 0xffff) << 16);
46  break;
47 // todo: start using this code
48  case DFU_JUMP_REQUESTED:
49  RTCD1.rtc->BKP4R = value;
50  break;
51  default:
52  firmwareError(OBD_PCM_Processor_Fault, "Invalid backup ram idx %d, value 0x08x", idx, value);
53  break;
54  }
55 #endif /* HAL_USE_RTC */
56 }
void firmwareError(obd_code_e, const char *,...)
backup_ram_e
Definition: backup_ram.h:13
void backupRamSave(backup_ram_e idx, uint32_t value)
Definition: backup_ram.cpp:32
uint32_t backupRamLoad(backup_ram_e idx)
Definition: backup_ram.cpp:9