AVR Libc Home Page | ![]() |
AVR Libc Development Pages | ||
Main Page | FAQ | Library Reference | Additional Documentation | Example Projects |
#include <avr/eeprom.h>
このヘッダファイルはAVRのデータEEPROMを扱うための簡単なライブラリルーチンのための宣言を行うものです。単純なポーリングモードで実装されています。ウェイトループで無駄に時間を消費しない割り込み制御でEEPROMを扱う必要のあるアプリケーションには、自分でルーチンを作成する必要があります。
このヘッダファイルはアセンブラを直接呼び出すインライン関数を使っています。これによりコンパイラはcallに伴うレジスタ退避のオーバーヘッドから逃れられます。また、これにより
__tmp_reg__
レジスタ、EEPROMアドレスを指定するXレジスタ、メモリアドレスを指定するZレジスタ間のデータのやりとりがスムーズになります。これらの手続きはコードサイズを最小にするよう最適化されています。
現在のところEEPROM関連レジスタセットとしてサポートされているのは以下の2カ所です。
0x1F,0x20,0x21
、0x1C,0x1D,0x1E
( __EEPROM_REG_LOCATIONS__ もご覧ください。).
これらの関数はIOレジスタを変更するので、リエントラント不能な関数となります。もしこれらの関数がメイン側と割り込み側双方で使われる場合は、アプリケーションは適切な保護対策を必要とします(たとえば、これらをアクセスする前に割り込みを禁止するなど).
avr-libc declarations | |
#define | EEMEM __attribute__((section(".eeprom"))) |
#define | eeprom_is_ready() |
#define | eeprom_busy_wait() do {} while (!eeprom_is_ready()) |
uint8_t | eeprom_read_byte (const uint8_t *addr) |
uint16_t | 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) |
IAR C compatibility defines | |
#define | _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) |
#define | _EEGET(var, addr) (var) = eeprom_read_byte ((uint8_t *)(addr)) |
Defines | |
#define | __EEPROM_REG_LOCATIONS__ 1C1D1E |
|
EEPROM関連IOレジスタの位置が異なった場所にあっても、各々にライブラリを用意する必要がないようにるすため、このマクロが設けるられました。デバイスIOヘッダには6桁の英大文字16進数文字列からなるマクロ
|
|
EEPROMから1バイト読み込み。IAR-Cとの互換のため。 |
|
EEPROMへ1バイト書き込み。IAR-Cとの互換のため。 |
|
|
|
EEPROMがbusyでなくなるまでloopして待ちます.
|
|
|
|
EEPROMのアドレス addr から n バイトを、SRAMのbufで示されたアドレスへ読み出す。 |
|
EEPROMのアドレス addr から1バイトを読み出す |
|
EEPROMのアドレス addr から2バイトを読み出す(下位バイトが先). |
|
SRAMのbufで示されたアドレスから n バイトを、EEPROMのアドレス addr へ書き込む. |
|
1バイトの値 val をEEPROMのアドレス addr に書き込む. |
|
2 バイトの値 val をEEPROMのアドレス addr に書き込む. |