/*
* eeprom.c
*
* Created: 21.01.2019 16:07:49
* Author: WFr
*/
#include "eeprom.h"
//======================================================================
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<EEWE)) // 誅粳 褓隆菔誅粵�� 縱琶� 蝌衝闐璃� 頡縛窟獗� 複綑皖態 � 鋒��靦�
{}
EEAR = uiAddress; //頑瘟縊� 琴擇� � 擇媲羲�
EEDR = ucData; // 頑瘟縊� 滓瘩灘 � 擇媲羲� 滓瘩贖
EECR |= (1<<EEMWE); // 擋鼓義琯� 頑震艘
EECR |= (1<<EEWE); // 震羅�
}
//======================================================================
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EEWE))
{}
EEAR = uiAddress; //頑瘟縊� 琴擇� � 擇媲羲�
EECR |= (1<<EERE); // 鞣錶粳
return EEDR; // 隆頊擋麴粳 擇僮鼻錶�
}
//======================================================================
void EEPROM_write_word(unsigned int uiAddress, uint16_t ucData)
{
EEPROM_write(uiAddress, (unsigned char) ucData);
unsigned char dt = ucData>>8;
EEPROM_write(uiAddress+1, dt);
}
//======================================================================
uint16_t EEPROM_read_word(unsigned int uiAddress)
{
uint16_t dt = EEPROM_read(uiAddress+1)*256;
asm("nop");
dt += EEPROM_read(uiAddress);
return dt;
}
//======================================================================
void EEPROM_write_dword(unsigned int uiAddress, uint32_t ucData)
{
EEPROM_write_word(uiAddress, (uint16_t) ucData);
uint16_t dt = ucData>>16;
EEPROM_write_word(uiAddress+2, dt);
}
//======================================================================
uint32_t EEPROM_read_dword(unsigned int uiAddress)
{
uint32_t dt = EEPROM_read_word(uiAddress+2)*65536;
asm("nop");
dt += EEPROM_read_word(uiAddress);
return dt;
}
//======================================================================
void EEPROM_write_string(unsigned int uiAddress, char str1[])
{
wchar_t n;
for (n=0;str1[n]!='\0';n++)
{
EEPROM_write(uiAddress+n, str1[n]);
}
}
//======================================================================
const char* EEPROM_read_string(unsigned int uiAddress, unsigned int sz)
{
unsigned int i;
char* str1;
str1 = (char *) realloc(NULL, sz);
for (i=0;i<sz;i++)
{
str1[i] = EEPROM_read(uiAddress+i);
}
asm("nop");
return str1;
}
//======================================================================