78 #ifndef _AVR_EEPROM_H_ 79 #define _AVR_EEPROM_H_ 1 83 #if !E2END && !defined(__DOXYGEN__) && !defined(__COMPILING_AVR_LIBC__) 84 # warning "Device does not have EEPROM available." 89 #if defined (__AVR_AT94K__) 90 # define _EEPROM_SUFFIX _at94k 91 #elif defined (__AVR_AT43USB320__) 92 # define _EEPROM_SUFFIX _43u320 93 #elif defined (__AVR_AT43USB355__) 94 # define _EEPROM_SUFFIX _43u355 95 #elif defined (__AVR_AT76C711__) 96 # define _EEPROM_SUFFIX _76c711 97 #elif defined (__AVR_AT86RF401__) 98 # define _EEPROM_SUFFIX _86r401 99 #elif defined (__AVR_AT90PWM1__) 100 # define _EEPROM_SUFFIX _90pwm1 101 #elif defined (__AVR_AT90PWM2__) 102 # define _EEPROM_SUFFIX _90pwm2 103 #elif defined (__AVR_AT90PWM2B__) 104 # define _EEPROM_SUFFIX _90pwm2b 105 #elif defined (__AVR_AT90PWM3__) 106 # define _EEPROM_SUFFIX _90pwm3 107 #elif defined (__AVR_AT90PWM3B__) 108 # define _EEPROM_SUFFIX _90pwm3b 109 #elif defined (__AVR_AT90PWM216__) 110 # define _EEPROM_SUFFIX _90pwm216 111 #elif defined (__AVR_AT90PWM316__) 112 # define _EEPROM_SUFFIX _90pwm316 113 #elif defined (__AVR_AT90PWM81__) 114 # define _EEPROM_SUFFIX _90pwm81 115 #elif defined (__AVR_ATmega16M1__) 116 # define _EEPROM_SUFFIX _m16m1 117 #elif defined (__AVR_ATmega8U2__) 118 # define _EEPROM_SUFFIX _m8u2 119 #elif defined (__AVR_ATmega16U2__) 120 # define _EEPROM_SUFFIX _m16u2 121 #elif defined (__AVR_ATmega16U4__) 122 # define _EEPROM_SUFFIX _m16u4 123 #elif defined (__AVR_ATmega32C1__) 124 # define _EEPROM_SUFFIX _m32c1 125 #elif defined (__AVR_ATmega32M1__) 126 # define _EEPROM_SUFFIX _m32m1 127 #elif defined (__AVR_ATmega32U2__) 128 # define _EEPROM_SUFFIX _m32u2 129 #elif defined (__AVR_ATmega32U4__) 130 # define _EEPROM_SUFFIX _m32u4 131 #elif defined (__AVR_ATmega32U6__) 132 # define _EEPROM_SUFFIX _m32u6 133 #elif defined (__AVR_ATmega64C1__) 134 # define _EEPROM_SUFFIX _m64c1 135 #elif defined (__AVR_ATmega64M1__) 136 # define _EEPROM_SUFFIX _m64m1 137 #elif defined (__AVR_ATmega128__) 138 # define _EEPROM_SUFFIX _m128 139 #elif defined (__AVR_ATmega1280__) 140 # define _EEPROM_SUFFIX _m1280 141 #elif defined (__AVR_ATmega1281__) 142 # define _EEPROM_SUFFIX _m1281 143 #elif defined (__AVR_ATmega1284P__) 144 # define _EEPROM_SUFFIX _m1284p 145 #elif defined (__AVR_ATmega128RFA1__) 146 # define _EEPROM_SUFFIX _m128rfa1 147 #elif defined (__AVR_ATmega2560__) 148 # define _EEPROM_SUFFIX _m2560 149 #elif defined (__AVR_ATmega2561__) 150 # define _EEPROM_SUFFIX _m2561 151 #elif defined (__AVR_AT90CAN32__) 152 # define _EEPROM_SUFFIX _can32 153 #elif defined (__AVR_AT90CAN64__) 154 # define _EEPROM_SUFFIX _can64 155 #elif defined (__AVR_AT90CAN128__) 156 # define _EEPROM_SUFFIX _can128 157 #elif defined (__AVR_AT90USB82__) 158 # define _EEPROM_SUFFIX _usb82 159 #elif defined (__AVR_AT90USB162__) 160 # define _EEPROM_SUFFIX _usb162 161 #elif defined (__AVR_AT90USB646__) 162 # define _EEPROM_SUFFIX _usb646 163 #elif defined (__AVR_AT90USB647__) 164 # define _EEPROM_SUFFIX _usb647 165 #elif defined (__AVR_AT90USB1286__) 166 # define _EEPROM_SUFFIX _usb1286 167 #elif defined (__AVR_AT90USB1287__) 168 # define _EEPROM_SUFFIX _usb1287 169 #elif defined (__AVR_ATmega64__) 170 # define _EEPROM_SUFFIX _m64 171 #elif defined (__AVR_ATmega640__) 172 # define _EEPROM_SUFFIX _m640 173 #elif defined (__AVR_ATmega644__) 174 # define _EEPROM_SUFFIX _m644 175 #elif defined (__AVR_ATmega644A__) 176 # define _EEPROM_SUFFIX _m644a 177 #elif defined (__AVR_ATmega644P__) 178 # define _EEPROM_SUFFIX _m644p 179 #elif defined (__AVR_ATmega644PA__) 180 # define _EEPROM_SUFFIX _m644pa 181 #elif defined (__AVR_ATmega645__) 182 # define _EEPROM_SUFFIX _m645 183 #elif defined (__AVR_ATmega645A__) 184 # define _EEPROM_SUFFIX _m645a 185 #elif defined (__AVR_ATmega645P__) 186 # define _EEPROM_SUFFIX _m645p 187 #elif defined (__AVR_ATmega6450__) 188 # define _EEPROM_SUFFIX _m6450 189 #elif defined (__AVR_ATmega6450A__) 190 # define _EEPROM_SUFFIX _m6450a 191 #elif defined (__AVR_ATmega6450P__) 192 # define _EEPROM_SUFFIX _m6450p 193 #elif defined (__AVR_ATmega649__) 194 # define _EEPROM_SUFFIX _m649 195 #elif defined (__AVR_ATmega649A__) 196 # define _EEPROM_SUFFIX _m649a 197 #elif defined (__AVR_ATmega649P__) 198 # define _EEPROM_SUFFIX _m649p 199 #elif defined (__AVR_ATmega6490__) 200 # define _EEPROM_SUFFIX _m6490 201 #elif defined (__AVR_ATmega6490A__) 202 # define _EEPROM_SUFFIX _m6490a 203 #elif defined (__AVR_ATmega6490P__) 204 # define _EEPROM_SUFFIX _m6490p 205 #elif defined (__AVR_ATmega103__) 206 # define _EEPROM_SUFFIX _m103 207 #elif defined (__AVR_ATmega32__) 208 # define _EEPROM_SUFFIX _m32 209 #elif defined (__AVR_ATmega323__) 210 # define _EEPROM_SUFFIX _m323 211 #elif defined (__AVR_ATmega324A__) 212 # define _EEPROM_SUFFIX _m324a 213 #elif defined (__AVR_ATmega324P__) 214 # define _EEPROM_SUFFIX _m324p 215 #elif defined (__AVR_ATmega324PA__) 216 # define _EEPROM_SUFFIX _m324pa 217 #elif defined (__AVR_ATmega325__) 218 # define _EEPROM_SUFFIX _m325 219 #elif defined (__AVR_ATmega325P__) 220 # define _EEPROM_SUFFIX _m325p 221 #elif defined (__AVR_ATmega3250__) 222 # define _EEPROM_SUFFIX _m3250 223 #elif defined (__AVR_ATmega3250P__) 224 # define _EEPROM_SUFFIX _m3250p 225 #elif defined (__AVR_ATmega328__) 226 # define _EEPROM_SUFFIX _m328 227 #elif defined (__AVR_ATmega328P__) 228 # define _EEPROM_SUFFIX _m328p 229 #elif defined (__AVR_ATmega329__) 230 # define _EEPROM_SUFFIX _m329 231 #elif defined (__AVR_ATmega329P__) 232 # define _EEPROM_SUFFIX _m329p 233 #elif defined (__AVR_ATmega329PA__) 234 # define _EEPROM_SUFFIX _m329pa 235 #elif defined (__AVR_ATmega3290__) 236 # define _EEPROM_SUFFIX _m3290 237 #elif defined (__AVR_ATmega3290P__) 238 # define _EEPROM_SUFFIX _m3290p 239 #elif defined (__AVR_ATmega32HVB__) 240 # define _EEPROM_SUFFIX _m32hvb 241 #elif defined (__AVR_ATmega64HVE__) 242 # define _EEPROM_SUFFIX _m64hve 243 #elif defined (__AVR_ATmega406__) 244 # define _EEPROM_SUFFIX _m406 245 #elif defined (__AVR_ATmega16__) 246 # define _EEPROM_SUFFIX _m16 247 #elif defined (__AVR_ATmega16A__) 248 # define _EEPROM_SUFFIX _m16a 249 #elif defined (__AVR_ATmega161__) 250 # define _EEPROM_SUFFIX _m161 251 #elif defined (__AVR_ATmega162__) 252 # define _EEPROM_SUFFIX _m162 253 #elif defined (__AVR_ATmega163__) 254 # define _EEPROM_SUFFIX _m163 255 #elif defined (__AVR_ATmega164__) 256 # define _EEPROM_SUFFIX _m164 257 #elif defined (__AVR_ATmega164P__) 258 # define _EEPROM_SUFFIX _m164p 259 #elif defined (__AVR_ATmega165__) 260 # define _EEPROM_SUFFIX _m165 261 #elif defined (__AVR_ATmega165A__) 262 # define _EEPROM_SUFFIX _m165a 263 #elif defined (__AVR_ATmega165P__) 264 # define _EEPROM_SUFFIX _m165p 265 #elif defined (__AVR_ATmega168__) 266 # define _EEPROM_SUFFIX _m168 267 #elif defined (__AVR_ATmega168A__) 268 # define _EEPROM_SUFFIX _m168a 269 #elif defined (__AVR_ATmega168P__) 270 # define _EEPROM_SUFFIX _m168p 271 #elif defined (__AVR_ATmega169__) 272 # define _EEPROM_SUFFIX _m169 273 #elif defined (__AVR_ATmega169A__) 274 # define _EEPROM_SUFFIX _m169a 275 #elif defined (__AVR_ATmega169P__) 276 # define _EEPROM_SUFFIX _m169p 277 #elif defined (__AVR_ATmega169PA__) 278 # define _EEPROM_SUFFIX _m169pa 279 #elif defined (__AVR_ATmega8HVA__) 280 # define _EEPROM_SUFFIX _m8hva 281 #elif defined (__AVR_ATmega16HVA__) 282 # define _EEPROM_SUFFIX _m16hva 283 #elif defined (__AVR_ATmega16HVA2__) 284 # define _EEPROM_SUFFIX _m16hva2 285 #elif defined (__AVR_ATmega16HVB__) 286 # define _EEPROM_SUFFIX _m16hvb 287 #elif defined (__AVR_ATmega8__) 288 # define _EEPROM_SUFFIX _m8 289 #elif defined (__AVR_ATmega48__) 290 # define _EEPROM_SUFFIX _m48 291 #elif defined (__AVR_ATmega48A__) 292 # define _EEPROM_SUFFIX _m48a 293 #elif defined (__AVR_ATmega48P__) 294 # define _EEPROM_SUFFIX _m48p 295 #elif defined (__AVR_ATmega88__) 296 # define _EEPROM_SUFFIX _m88 297 #elif defined (__AVR_ATmega88A__) 298 # define _EEPROM_SUFFIX _m88a 299 #elif defined (__AVR_ATmega88P__) 300 # define _EEPROM_SUFFIX _m88p 301 #elif defined (__AVR_ATmega88PA__) 302 # define _EEPROM_SUFFIX _m88pa 303 #elif defined (__AVR_ATmega8515__) 304 # define _EEPROM_SUFFIX _m8515 305 #elif defined (__AVR_ATmega8535__) 306 # define _EEPROM_SUFFIX _m8535 307 #elif defined (__AVR_AT90S8535__) 308 # define _EEPROM_SUFFIX _8535 309 #elif defined (__AVR_AT90C8534__) 310 # define _EEPROM_SUFFIX _8534 311 #elif defined (__AVR_AT90S8515__) 312 # define _EEPROM_SUFFIX _8515 313 #elif defined (__AVR_AT90S4434__) 314 # define _EEPROM_SUFFIX _4434 315 #elif defined (__AVR_AT90S4433__) 316 # define _EEPROM_SUFFIX _4433 317 #elif defined (__AVR_AT90S4414__) 318 # define _EEPROM_SUFFIX _4414 319 #elif defined (__AVR_ATtiny22__) 320 # define _EEPROM_SUFFIX _tn22 321 #elif defined (__AVR_ATtiny26__) 322 # define _EEPROM_SUFFIX _tn26 323 #elif defined (__AVR_AT90S2343__) 324 # define _EEPROM_SUFFIX _2343 325 #elif defined (__AVR_AT90S2333__) 326 # define _EEPROM_SUFFIX _2333 327 #elif defined (__AVR_AT90S2323__) 328 # define _EEPROM_SUFFIX _2323 329 #elif defined (__AVR_AT90S2313__) 330 # define _EEPROM_SUFFIX _2313 331 #elif defined (__AVR_ATtiny2313__) 332 # define _EEPROM_SUFFIX _tn2313 333 #elif defined (__AVR_ATtiny2313A__) 334 # define _EEPROM_SUFFIX _tn2313a 335 #elif defined (__AVR_ATtiny4313__) 336 # define _EEPROM_SUFFIX _tn4313 337 #elif defined (__AVR_ATtiny13__) 338 # define _EEPROM_SUFFIX _tn13 339 #elif defined (__AVR_ATtiny13A__) 340 # define _EEPROM_SUFFIX _tn13a 341 #elif defined (__AVR_ATtiny25__) 342 # define _EEPROM_SUFFIX _tn25 343 #elif defined (__AVR_ATtiny45__) 344 # define _EEPROM_SUFFIX _tn45 345 #elif defined (__AVR_ATtiny85__) 346 # define _EEPROM_SUFFIX _tn85 347 #elif defined (__AVR_ATtiny24__) 348 # define _EEPROM_SUFFIX _tn24 349 #elif defined (__AVR_ATtiny24A__) 350 # define _EEPROM_SUFFIX _tn24a 351 #elif defined (__AVR_ATtiny44__) 352 # define _EEPROM_SUFFIX _tn44 353 #elif defined (__AVR_ATtiny44A__) 354 # define _EEPROM_SUFFIX _tn44a 355 #elif defined (__AVR_ATtiny84__) 356 # define _EEPROM_SUFFIX _tn84 357 #elif defined (__AVR_ATtiny261__) 358 # define _EEPROM_SUFFIX _tn261 359 #elif defined (__AVR_ATtiny261A__) 360 # define _EEPROM_SUFFIX _tn261a 361 #elif defined (__AVR_ATtiny461__) 362 # define _EEPROM_SUFFIX _tn461 363 #elif defined (__AVR_ATtiny461A__) 364 # define _EEPROM_SUFFIX _tn461a 365 #elif defined (__AVR_ATtiny861__) 366 # define _EEPROM_SUFFIX _tn861 367 #elif defined (__AVR_ATtiny861A__) 368 # define _EEPROM_SUFFIX _tn861a 369 #elif defined (__AVR_ATtiny43U__) 370 # define _EEPROM_SUFFIX _tn43u 371 #elif defined (__AVR_ATtiny48__) 372 # define _EEPROM_SUFFIX _tn48 373 #elif defined (__AVR_ATtiny88__) 374 # define _EEPROM_SUFFIX _tn88 375 #elif defined (__AVR_ATtiny87__) 376 # define _EEPROM_SUFFIX _tn87 377 #elif defined (__AVR_ATtiny167__) 378 # define _EEPROM_SUFFIX _tn167 379 #elif defined (__AVR_AT90SCR100__) 380 # define _EEPROM_SUFFIX _90scr100 381 #elif defined (__AVR_ATxmega16A4__) 382 # define _EEPROM_SUFFIX _x16a4 383 #elif defined (__AVR_ATxmega16D4__) 384 # define _EEPROM_SUFFIX _x16d4 385 #elif defined (__AVR_ATxmega32A4__) 386 # define _EEPROM_SUFFIX _x32a4 387 #elif defined (__AVR_ATxmega32D4__) 388 # define _EEPROM_SUFFIX _x32d4 389 #elif defined (__AVR_ATxmega64A1__) 390 # define _EEPROM_SUFFIX _x64a1 391 #elif defined (__AVR_ATxmega64A3__) 392 # define _EEPROM_SUFFIX _x64a3 393 #elif defined (__AVR_ATxmega64D3__) 394 # define _EEPROM_SUFFIX _x64d3 395 #elif defined (__AVR_ATxmega128A1__) 396 # define _EEPROM_SUFFIX _x128a1 397 #elif defined (__AVR_ATxmega128A3__) 398 # define _EEPROM_SUFFIX _x128a3 399 #elif defined (__AVR_ATxmega128D3__) 400 # define _EEPROM_SUFFIX _x128d3 401 #elif defined (__AVR_ATxmega192A3__) 402 # define _EEPROM_SUFFIX _x192a3 403 #elif defined (__AVR_ATxmega192D3__) 404 # define _EEPROM_SUFFIX _x192d3 405 #elif defined (__AVR_ATxmega256A3__) 406 # define _EEPROM_SUFFIX _x256a3 407 #elif defined (__AVR_ATxmega256A3B__) 408 # define _EEPROM_SUFFIX _x256a3b 409 #elif defined (__AVR_ATxmega256D3__) 410 # define _EEPROM_SUFFIX _x256d3 411 #elif defined (__AVR_ATA6289__) 412 # define _EEPROM_SUFFIX _a6289 414 #elif defined (__AVR_ATtiny28__) 415 # define _EEPROM_SUFFIX _tn28 416 #elif defined (__AVR_AT90S1200__) 417 # define _EEPROM_SUFFIX _1200 418 #elif defined (__AVR_ATtiny15__) 419 # define _EEPROM_SUFFIX _tn15 420 #elif defined (__AVR_ATtiny12__) 421 # define _EEPROM_SUFFIX _tn12 422 #elif defined (__AVR_ATtiny11__) 423 # define _EEPROM_SUFFIX _tn11 425 # define _EEPROM_SUFFIX _UNKNOWN 428 #define _EEPROM_CONCAT1(s1, s2) s1 ## s2 429 #define _EEPROM_CONCAT2(s1, s2) _EEPROM_CONCAT1 (s1, s2) 431 #define eeprom_read_byte _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX) 432 #define eeprom_read_word _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX) 433 #define eeprom_read_dword _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX) 434 #define eeprom_read_float _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX) 435 #define eeprom_read_block _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX) 437 #define eeprom_write_byte _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX) 438 #define eeprom_write_word _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX) 439 #define eeprom_write_dword _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX) 440 #define eeprom_write_float _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX) 441 #define eeprom_write_block _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX) 443 #define eeprom_update_byte _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX) 444 #define eeprom_update_word _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX) 445 #define eeprom_update_dword _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX) 446 #define eeprom_update_float _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX) 447 #define eeprom_update_block _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX) 451 #ifndef __ASSEMBLER__ 467 #ifndef __ATTR_PURE__ 469 # define __ATTR_PURE__ 471 # define __ATTR_PURE__ __attribute__((__pure__)) 479 #define EEMEM __attribute__((section(".eeprom"))) 485 #if defined (__DOXYGEN__) 486 # define eeprom_is_ready() 487 #elif defined (__AVR_XMEGA__) && __AVR_XMEGA__ 488 # define eeprom_is_ready() bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp) 489 #elif defined (DEECR) 490 # define eeprom_is_ready() bit_is_clear (DEECR, BSY) 492 # define eeprom_is_ready() bit_is_clear (EECR, EEPE) 494 # define eeprom_is_ready() bit_is_clear (EECR, EEWE) 503 #define eeprom_busy_wait() do {} while (!eeprom_is_ready()) 509 uint8_t eeprom_read_byte (
const uint8_t *__p) __ATTR_PURE__;
514 uint16_t eeprom_read_word (
const uint16_t *__p) __ATTR_PURE__;
519 uint32_t eeprom_read_dword (
const uint32_t *__p) __ATTR_PURE__;
524 float eeprom_read_float (
const float *__p) __ATTR_PURE__;
530 void eeprom_read_block (
void *__dst,
const void *__src,
size_t __n);
536 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
541 void eeprom_write_word (uint16_t *__p, uint16_t __value);
546 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
551 void eeprom_write_float (
float *__p,
float __value);
557 void eeprom_write_block (
const void *__src,
void *__dst,
size_t __n);
563 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
568 void eeprom_update_word (uint16_t *__p, uint16_t __value);
573 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
578 void eeprom_update_float (
float *__p,
float __value);
584 void eeprom_update_block (
const void *__src,
void *__dst,
size_t __n);
593 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) 598 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) 603 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr)) 608 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr)) AVR device-specific IO Definitions.