#include <avr/eeprom.h>
Этот header файл объявляет интерфейс к некоторым простым библиотечным подпрограммам, подходящим чтобы обращаться с данными EEPROM содержавшийся в микроконтроллерах AVR. Выполнение использует простой опрашиваемый режим интерфейса. Приложения, которые требуют управляемый прерыванием EEPROM доступ, чтобы гарантировать, что никакое время не будет потрачено впустую в spinloops, должен будет развернуть их собственное выполнение.
Примечание:
Все функции для чтения/записи сначала удостоверяются готов ли к обращению EEPROM. Так как это может вызвать длинные задержки, если операция записи все еще ожидает, критические ко времени приложения должны сначала опросить EEPROM т. о. использование eeprom_is_ready() перед попыткой любого фактического ввода - вывода.
Этот header файл объявляет встроенные функции тот запрос подпрограммы ассемблера непосредственно. Это предотвращает это, компилятор генерирует, помещают/выталкивают для затертых запросом регистраторов. Этот путь также определенное соглашение о вызовах мог использоваться для eeprom подпрограмм например, передавая значения в __ tmp_reg __, eeprom адреса в X и адресах памяти в регистраторах Z. Метод оптимизирован для размера кода.
Теперь поддержаны два местоположения набора регистров EEPROM: 0x1F,0x20,0x21 и 0x1C,0x1D,0x1E (see __EEPROM_REG_LOCATIONS__).
Поскольку эти функции изменяют регистраторы IO, они, как известно, являются не повторно используемыми. Если любая из этих функций используется от обоих, стандарта и прерывает контекст, приложения должны гарантировать надлежащую защиту (например, отключая прерывания перед доступом к ним).
|
|
avr-libc объявления |
|
|
|
eeprom_read_byte (const uint8_t
*addr) |
|
eeprom_read_word (const uint16_t
*addr) |
|
void |
eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n) |
void |
eeprom_write_byte (uint8_t
*addr, uint8_t
value) |
void |
eeprom_write_word (uint16_t
*addr, uint16_t
value) |
void |
eeprom_write_block (const void *pointer_ram, void *pointer_eeprom, size_t n) |
#define |
EEMEM __attribute__((section(".eeprom"))) |
#define |
|
#define |
eeprom_busy_wait() do {} while (!eeprom_is_ready()) |
IAR C совместимые определения |
|
|
|
#define |
_EEPUT(addr,
val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) |
#define |
_EEGET(var,
addr) (var) = eeprom_read_byte ((uint8_t
*)(addr)) |
Макроопределения |
|
#define |
__EEPROM_REG_LOCATIONS__ 1C1D1E |
Чтобы
быть
способным
работать без
требования,
приближается
мульти-lib для того,
чтобы иметь
дело с
контроллерами,
имеющими
регистраторы
EEPROM в
различных
позициях в
пространстве
памяти,
функции eeprom оценивают
__EEPROM_REG_LOCATIONS__:
Принято быть
определено
устройством io заголовок
и содержит 6
шестнадцатеричных
цифр
верхнего
регистра,
кодирующих
адреса EECR,EEDR и
EEAR.
Первые два
символа: EECR адрес.
Вторые два
символа: EEDR адрес.
Следующие
два символа: EEAR адрес.
Значение по
умолчанию 1C1D1E соответствует
местоположению
регистра, которое
является
правильным
для большинства
контроллеров.
Значение
этого определяет
символ,
используется
для того,
чтобы добавить
его в конец к
основному
имени
функций
ассемблера.
( |
var, |
|
|||
|
|
addr |
|
) |
(var)
= eeprom_read_byte ((uint8_t
*)(addr)) |
Чтение
байта из EEPROM.
Совместимость
определения
для IAR C.
( |
addr, |
|
|||
|
|
val |
|
) |
Запись
байта в EEPROM.
Совместимость
определения
для IAR C.
Выражение
атрибута,
заставляющее
переменную
быть
распределеной
в пределах
раздела.eeprom.
( |
|
) |
do
{} while (!eeprom_is_ready()) |
Организовывает бесконечный цикл до тех пор, пока память EEPROM не освободится.
Возвращения: отсутствуют.
( |
|
) |
|
Возвращается 1, если память EEPROM готова к новой операции чтения/записи. В противном случае — 0.
( |
void * |
pointer_ram, |
|
|
|
|
const void * |
pointer_eeprom, |
|
|
|
size_t |
n |
|
|
) |
|
|
|
Считывает блок из n байт по адресу EEPROM pointer_eeprom в буфер pointer_ram. Для константы n <= 256 байт библиотечная функция используется. Для неизвестного размеров блока во времени компиляции или размерах блока > 256 встроенный цикл расширен.
Пример использования: #include <stdio.h>
#include
<avr/eeprom.h>
char
pointer_ram [20];
void
main(void)
{
eeprom_read_block(pointer_ram, 0x01, 10);
}
uint8_t eeprom_read_byte |
( |
const uint8_t * |
addr |
) |
|
Считывает один байт по адресу EEPROM addr
Пример использования: #include <stdio.h>
#include
<avr/eeprom.h>
unsigned
char b;
void
main(void)
{
b
= eeprom_read_byte(0x01);
}
uint16_t eeprom_read_word |
( |
const uint16_t * |
addr |
) |
|
Считывает 16-тиразрядное слово по адресу EEPROM addr.
Пример использования: #include <stdio.h>
#include <avr/eeprom.h>
unsigned int
w;
void
main(void)
{
w
= eeprom_read_word(0x01);
}
( |
const void * |
pointer_ram, |
|
|
|
|
void * |
pointer_eeprom, |
|
|
|
size_t |
n |
|
|
) |
|
|
|
Записывает блок из n байт из буфера pointer_ram по адресу EEPROM pointer_eeprom.
Пример использования: #include <stdio.h>
#include <avr/eeprom.h>
char pointer_ram [20] =
"0123456789";
void
main(void)
{
eeprom_write_block(pointer_ram, 0x01,
5);
}
( |
uint8_t * |
addr, |
|
|
|
|
value |
|
|
|
) |
|
|
|
Записывает
байт value по
адресу EEPROM addr.
Пример
использования: #include <stdio.h>
#include <avr/eeprom.h>
unsigned char
b=10;
void
main(void)
{
eeprom_write_byte(0x01, b);
}
( |
uint16_t * |
addr, |
|
|
|
|
value |
|
|
|
) |
|
|
|
Записывает 16-тиразрядное слово value по адресу EEPROM addr.
Пример использования: #include <stdio.h>
#include
<avr/eeprom.h>
unsigned
int w=60000;
void
main(void)
{
eeprom_write_word(0x01,
w) ;
}
Automatically generated by Doxygen 1.5.2 on 21
Dec 2007.