52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
void EEPROM_write_char(uint16_t address, unsigned char data)
|
|
{
|
|
//Wait for completion of previous write
|
|
while(EECR & (1<<EEPE));
|
|
//Set up address and Data Registers
|
|
EEAR = address;
|
|
EEDR = data;
|
|
//Write logical one to EEMPE
|
|
EECR |= (1<<EEMPE);
|
|
//Start eeprom write by setting EEPE
|
|
EECR |= (1<<EEPE);
|
|
}
|
|
|
|
unsigned char EEPROM_read_char(uint16_t uiAddress)
|
|
{
|
|
// Wait for completion of previous write
|
|
while(EECR & (1<<EEPE));
|
|
//Set up address register
|
|
EEAR = uiAddress;
|
|
//Start eeprom read by writing EERE
|
|
EECR |= (1<<EERE);
|
|
//Return data from Data Register
|
|
return EEDR;
|
|
}
|
|
|
|
void EEPROM_write_string(uint16_t address, char* buffer, uint16_t length)
|
|
{
|
|
for(uint16_t i = 0; i < length; i++) EEPROM_write_char( address+i, buffer[i] );
|
|
}
|
|
|
|
void EEPROM_read_string(uint16_t address, char* buffer, uint16_t length)
|
|
{
|
|
for(uint16_t i = 0; i < length; i++) buffer[i] = EEPROM_read_char( address+i);
|
|
}
|
|
|
|
template <class T> void EEPROM_write_class(uint16_t address, T& in)
|
|
{
|
|
EEPROM_write_string( address, reinterpret_cast<char*>(&in), sizeof(in));
|
|
}
|
|
|
|
template <class T> T EEPROM_read_class(uint16_t address)
|
|
{
|
|
char data[sizeof(T)];
|
|
EEPROM_read_string( address, data, sizeof(T) );
|
|
return *reinterpret_cast<T*>(data);
|
|
}
|
|
|
|
template <class T> void EEPROM_read_class(uint16_t address, T* in)
|
|
{
|
|
EEPROM_read_string( address, reinterpret_cast<char*>(&in), sizeof(T) );
|
|
}
|