C Code for Interfacing EEPROM in AVR MCU

Microcontroller Topics
Post Reply
User avatar
Magneto
Major
Major
Posts: 430
Joined: Wed Jul 15, 2009 1:52 pm
Location: London

C Code for Interfacing EEPROM in AVR MCU

Post by Magneto » Sat Oct 24, 2009 11:30 pm

#include "defs.h"
#include <avr/eeprom.h>

//------Fucntions for NMR Area in eeprom
static volatile unsigned int read_address=2048;
static volatile unsigned int write_address=2048;

void init_eeprom(void) {
read_address = 2048;
write_address = 2048;
}

void init_eeprom_read(void) {
read_address = 2048;
}

void init_eeprom_write(void) {
write_address = 2048;
}

int get_eeprom_write_address(void) {
return write_address;
}

int eeprom_getc(void) {
if(read_address<4096) {
loop_until_bit_is_clear(EECR, EEWE);
EEAR = read_address;
EECR |= _BV(EERE);
read_address++;
return EEDR;
} else {
return -1;
}
}

int eeprom_putc(char store_byte) {
if (write_address<4096) {
loop_until_bit_is_clear(EECR, EEWE);
EEAR = write_address;
EEDR = store_byte;
EECR |= _BV(EEMWE);
EECR |= _BV(EEWE);
write_address++;
return 1;
} else {
return -1;
}
}

void eeprom_puts(const char *s) {
while (*s)
eeprom_putc(*s++);
}

//------Fucntions for Parameter Area in eeprom
int eeprom_read(int address) {
if(address<2047) {
loop_until_bit_is_clear(EECR, EEWE);
EEAR = address;
EECR |= _BV(EERE);
return EEDR;
} else {
return -1;
}
}

int eeprom_write(int address, char store_byte) {
if (address<2047) {
loop_until_bit_is_clear(EECR, EEWE);
EEAR = address;
EEDR = store_byte;
EECR |= _BV(EEMWE);
EECR |= _BV(EEWE);
return 1;
} else {
return -1;
}
}
Post Reply

Return to “Microcontrollers”