implement memory init for EEPROM

This commit is contained in:
2023-08-28 12:57:16 +02:00
parent 9bd3e9b4da
commit f60b9166ca
6 changed files with 232 additions and 66 deletions

View File

@ -6,6 +6,7 @@
*/
#include "eeprom_interface.h"
#include "../app/car.h"
typedef union {
struct {
@ -14,23 +15,121 @@ typedef union {
uint8_t byte2;
uint8_t byte3;
} separate;
struct {
uint32_t bytes;
} full;
uint32_t full;
uint8_t array[4];
} BYTES_4;
void MEM_write_one_byte(uint8_t addresse, uint8_t data) {
DATAEE_WriteByte(addresse, data);
void MEM_init(){
uint8_t check = MEM_read_1_byte(0x0);
if(check != 0x42){
CAR_CST.CONTROL_STEERING_MODE = 0;
CAR_CST.CONTROL_ALIVE_TIME = 50;
CAR_CST.CONTROL_SPEED_FACTOR = 0;
CAR_CST.CONTROL_POWER_FACTOR = 0;
CAR_CST.CONTROL_STEERING_FACTOR = 0;
CAR_CST.CONTROL_MAX_SPEED_FW = 0;
CAR_CST.CONTROL_MAX_SPEED_BW = 0;
CAR_CST.JOYSTICK_MODE = 0;
CAR_CST.JOYSTICK_PARAM1 = 100;
CAR_CST.JOYSTICK_PARAM2 = 1;
CAR_CST.JOYSTICK_ALIVE_TIME = 50;
CAR_CST.DISPLAY_ALIVE_TIME = 0;
CAR_CST.DRIVE_SPEED_TIME = 0;
CAR_CST.DRIVE_STOP_TIME = 0;
CAR_CST.DRIVE_ALIVE_TIME = 0;
CAR_CST.STEERING_ALIVE_TIME = 0;
CAR_CST.BATTERY_VOLT_TIME = 0;
CAR_CST.BATTERY_CURRENT_TIME = 0;
CAR_CST.BATTERY_ENERGY_TIME = 0;
CAR_CST.BATTERY_ALIVE_TIME = 0;
MEM_write_1_byte(MEMADD_CONTROL_STEERING_MODE, CAR_CST.CONTROL_STEERING_MODE);
MEM_write_1_byte(MEMADD_CONTROL_ALIVE_TIME, CAR_CST.CONTROL_ALIVE_TIME);
MEM_write_4_byte(MEMADD_CONTROL_SPEED_FACTOR, CAR_CST.CONTROL_SPEED_FACTOR);
MEM_write_4_byte(MEMADD_CONTROL_POWER_FACTOR, CAR_CST.CONTROL_POWER_FACTOR);
MEM_write_4_byte(MEMADD_CONTROL_STEERING_FACTOR, CAR_CST.CONTROL_STEERING_FACTOR);
MEM_write_1_byte(MEMADD_CONTROL_MAX_SPEED_FW, CAR_CST.CONTROL_MAX_SPEED_FW);
MEM_write_1_byte(MEMADD_CONTROL_MAX_SPEED_BW, CAR_CST.CONTROL_MAX_SPEED_BW);
MEM_write_1_byte(MEMADD_JOYSTICK_MODE, CAR_CST.JOYSTICK_MODE);
MEM_write_1_byte(MEMADD_JOYSTICK_PARAM1, CAR_CST.JOYSTICK_PARAM1);
MEM_write_1_byte(MEMADD_JOYSTICK_PARAM2, CAR_CST.JOYSTICK_PARAM2);
MEM_write_1_byte(MEMADD_JOYSTICK_ALIVE_TIME, CAR_CST.JOYSTICK_ALIVE_TIME);
MEM_write_1_byte(MEMADD_DISPLAY_ALIVE_TIME, CAR_CST.DISPLAY_ALIVE_TIME);
MEM_write_1_byte(MEMADD_DRIVE_SPEED_TIME, CAR_CST.DRIVE_SPEED_TIME);
MEM_write_1_byte(MEMADD_DRIVE_STOP_TIME, CAR_CST.DRIVE_STOP_TIME);
MEM_write_1_byte(MEMADD_DRIVE_ALIVE_TIME, CAR_CST.DRIVE_ALIVE_TIME);
MEM_write_1_byte(MEMADD_STEERING_ALIVE_TIME, CAR_CST.STEERING_ALIVE_TIME);
MEM_write_1_byte(MEMADD_BATTERY_VOLT_TIME, CAR_CST.BATTERY_VOLT_TIME);
MEM_write_1_byte(MEMADD_BATTERY_CURRENT_TIME, CAR_CST.BATTERY_CURRENT_TIME);
MEM_write_1_byte(MEMADD_BATTERY_ENERGY_TIME, CAR_CST.BATTERY_ENERGY_TIME);
MEM_write_1_byte(MEMADD_BATTERY_ALIVE_TIME, CAR_CST.BATTERY_ALIVE_TIME);
MEM_write_1_byte(0x0, 0x42);
} else {
CAR_CST.CONTROL_STEERING_MODE = MEM_read_1_byte(MEMADD_CONTROL_STEERING_MODE);
CAR_CST.CONTROL_ALIVE_TIME = MEM_read_1_byte(MEMADD_CONTROL_ALIVE_TIME);
CAR_CST.CONTROL_SPEED_FACTOR = MEM_read_1_byte(MEMADD_CONTROL_SPEED_FACTOR);
CAR_CST.CONTROL_POWER_FACTOR = MEM_read_1_byte(MEMADD_CONTROL_POWER_FACTOR);
CAR_CST.CONTROL_STEERING_FACTOR = MEM_read_1_byte(MEMADD_CONTROL_STEERING_FACTOR);
CAR_CST.CONTROL_MAX_SPEED_FW = MEM_read_1_byte(MEMADD_CONTROL_MAX_SPEED_FW);
CAR_CST.CONTROL_MAX_SPEED_BW = MEM_read_1_byte(MEMADD_CONTROL_MAX_SPEED_BW);
CAR_CST.JOYSTICK_MODE = MEM_read_1_byte(MEMADD_JOYSTICK_MODE);
CAR_CST.JOYSTICK_PARAM1 = MEM_read_1_byte(MEMADD_JOYSTICK_PARAM1);
CAR_CST.JOYSTICK_PARAM2 = MEM_read_1_byte(MEMADD_JOYSTICK_PARAM2);
CAR_CST.JOYSTICK_ALIVE_TIME = MEM_read_1_byte(MEMADD_JOYSTICK_ALIVE_TIME);
CAR_CST.DISPLAY_ALIVE_TIME = MEM_read_1_byte(MEMADD_DISPLAY_ALIVE_TIME);
CAR_CST.DRIVE_SPEED_TIME = MEM_read_1_byte(MEMADD_DRIVE_SPEED_TIME);
CAR_CST.DRIVE_STOP_TIME = MEM_read_1_byte(MEMADD_DRIVE_STOP_TIME);
CAR_CST.DRIVE_ALIVE_TIME = MEM_read_1_byte(MEMADD_DRIVE_ALIVE_TIME);
CAR_CST.STEERING_ALIVE_TIME = MEM_read_1_byte(MEMADD_STEERING_ALIVE_TIME);
CAR_CST.BATTERY_VOLT_TIME = MEM_read_1_byte(MEMADD_BATTERY_VOLT_TIME);
CAR_CST.BATTERY_CURRENT_TIME = MEM_read_1_byte(MEMADD_BATTERY_CURRENT_TIME);
CAR_CST.BATTERY_ENERGY_TIME = MEM_read_1_byte(MEMADD_BATTERY_ENERGY_TIME);
CAR_CST.BATTERY_ALIVE_TIME = MEM_read_1_byte(MEMADD_BATTERY_ALIVE_TIME);
}
}
void MEM_write_four_byte(uint8_t addresse, uint32_t data) {
void MEM_write_1_byte(uint8_t address, uint8_t data) {
DATAEE_WriteByte(address, data);
}
void MEM_write_4_byte(uint8_t address, uint32_t data) {
BYTES_4 tmpData;
tmpData.full = data;
for(uint8_t i = 0; i<4;i++) {
uint8_t add = address;
add += i;
MEM_write_1_byte(add, tmpData.array[i]);
}
}
uint8_t MEM_read_one_byte(uint8_t adresse) {
return DATAEE_ReadByte(adresse);
uint8_t MEM_read_1_byte(uint8_t address) {
return DATAEE_ReadByte(address);
}
uint32_t MEM_read_four_byte(uint8_t adresse) {
uint32_t MEM_read_4_byte(uint8_t address) {
BYTES_4 tmpData;
for(uint8_t i = 0; i<4;i++) {
uint8_t add = address;
add += i;
tmpData.array[i] = MEM_read_1_byte(add);
}
return tmpData.full;
}

View File

@ -11,10 +11,11 @@
#include <stdbool.h> // usage of boolean types
#include "../mcc_generated_files/mcc.h"
void MEM_write_one_byte(uint8_t addresse, uint8_t data);
void MEM_write_four_byte(uint8_t adresse, uint32_t data);
uint8_t MEM_read_one_byte(uint8_t adresse);
uint32_t MEM_read_four_byte(uint8_t adresse);
void MEM_init();
void MEM_write_1_byte(uint8_t address, uint8_t data);
void MEM_write_4_byte(uint8_t address, uint32_t data);
uint8_t MEM_read_1_byte(uint8_t address);
uint32_t MEM_read_4_byte(uint8_t address);
// void MEM_write_CONTROL_STEERING_MODE(uint8_t data);
#endif /* EEPROM_INTERFACE_H */