Blame |
Last modification |
View Log
| Download
| RSS feed
/**************************************************************************//**
* \brief EEPROM library
* \author Copyright (C) 2011 Julien Le Sech - www.idreammicro.com
* \version 1.0
* \date 20111017
*
* This file is part of the iDreamMicro library.
*
* This library is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
******************************************************************************/
/**************************************************************************//**
* \file eeprom.c
******************************************************************************/
/******************************************************************************
* Header file inclusions.
******************************************************************************/
#include <eeprom/eeprom.h>
#include <avr/io.h>
#include <assert.h>
#include <stdint.h>
#include <stdlib.h>
/******************************************************************************
* Public function definitions.
******************************************************************************/
/**************************************************************************//**
* \fn void eeprom__write_byte(
* uint16_t address,
* uint8_t data)
*
* \brief Write a byte in EEPROM.
*
* \param address Address.
* \param data Data to write.
******************************************************************************/
void
eeprom__write_byte
(
uint16_t address
,
uint8_t data
){
// Wait for completion of previous write.
while (EECR
& (1 << EEPE
));
// Set up address.
EEAR
= address
;
// Set up data.
EEDR
= data
;
// Write logical one to EEMPE.
EECR
|= (1 << EEMPE
);
// Start EEPROM write.
EECR
|= (1 << EEPE
);
}
/**************************************************************************//**
* \fn void eeprom__write_bytes(
* uint16_t address,
* uint16_t size,
* uint8_t* p_data)
*
* \brief Write bytes into EEPOM.
*
* \param address Address.
* \param size Data size.
* \param[in] p_data Data to write.
******************************************************************************/
void
eeprom__write_bytes
(
uint16_t address
,
uint16_t size
,
uint8_t* p_data
){
// Check the preconditions.
assert(NULL
!= p_data
);
for (uint16_t i
= 0; i
< size
; i
++)
{
eeprom__write_byte
(address
+ i
, p_data
[i
]);
}
}
/**************************************************************************//**
* \fn uint8_t eeprom__read_byte(
* uint16_t address)
*
* \brief Read data into EEPROM.
*
* \param address Address of data to read.
*
* \return Read data.
******************************************************************************/
uint8_t
eeprom__read_byte
(
uint16_t address
){
// Wait for completion of previous write.
while (EECR
& (1 << EEPE
));
// Set up address.
EEAR
= address
;
// Start EEPROM read.
EECR
|= (1 << EERE
);
// Read data register.
uint8_t data
= EEDR
;
return data
;
}
/**************************************************************************//**
* \fn void eeprom__read_bytes(
* uint16_t address,
* uint16_t size,
* uint8_t* p_data)
*
* \brief Read bytes from EEPROM.
*
* \param address Address to read.
* \param size Data size to read.
* \param[in] p_data Data buffer.
******************************************************************************/
void
eeprom__read_bytes
(
uint16_t address
,
uint16_t size
,
uint8_t* p_data
){
// Check the preconditions.
assert(NULL
!= p_data
);
for (uint16_t i
= 0; i
< size
; i
++)
{
p_data
[i
] = eeprom__read_byte
(address
+ i
);
}
}