AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page User Manual Library Reference FAQ Alphabetical Index Example Projects

eeprom.h

00001 /* Copyright (c) 2002, 2003, 2004, 2007 Marek Michalkiewicz
00002    Copyright (c) 2005, 2006 Bjoern Haase
00003    Copyright (c) 2008 Atmel Corporation
00004    Copyright (c) 2008 Wouter van Gulik
00005    Copyright (c) 2009 Dmitry Xmelkov
00006    All rights reserved.
00007 
00008    Redistribution and use in source and binary forms, with or without
00009    modification, are permitted provided that the following conditions are met:
00010 
00011    * Redistributions of source code must retain the above copyright
00012      notice, this list of conditions and the following disclaimer.
00013    * Redistributions in binary form must reproduce the above copyright
00014      notice, this list of conditions and the following disclaimer in
00015      the documentation and/or other materials provided with the
00016      distribution.
00017    * Neither the name of the copyright holders nor the names of
00018      contributors may be used to endorse or promote products derived
00019      from this software without specific prior written permission.
00020 
00021   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00022   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00023   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00024   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00025   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00026   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00027   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00028   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00029   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00030   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00031   POSSIBILITY OF SUCH DAMAGE. */
00032 
00033 /* $Id: eeprom.h 2111 2010-03-28 22:36:13Z arcanum $ */
00034 
00035 #ifndef _AVR_EEPROM_H_
00036 #define _AVR_EEPROM_H_ 1
00037 
00038 #include <avr/io.h>
00039 
00040 #if !E2END && !defined(__DOXYGEN__) && !defined(__COMPILING_AVR_LIBC__)
00041 # warning "Device does not have EEPROM available."
00042 #else
00043 
00044 #ifndef __DOXYGEN__
00045 
00046 #if defined (__AVR_AT94K__)
00047 # define _EEPROM_SUFFIX _at94k
00048 #elif defined (__AVR_AT43USB320__)
00049 # define _EEPROM_SUFFIX _43u320
00050 #elif defined (__AVR_AT43USB355__)
00051 # define _EEPROM_SUFFIX _43u355
00052 #elif defined (__AVR_AT76C711__)
00053 # define _EEPROM_SUFFIX _76c711
00054 #elif defined (__AVR_AT86RF401__)
00055 # define _EEPROM_SUFFIX _86r401
00056 #elif defined (__AVR_AT90PWM1__)
00057 # define _EEPROM_SUFFIX _90pwm1
00058 #elif defined (__AVR_AT90PWM2__)
00059 # define _EEPROM_SUFFIX _90pwm2
00060 #elif defined (__AVR_AT90PWM2B__)
00061 # define _EEPROM_SUFFIX _90pwm2b
00062 #elif defined (__AVR_AT90PWM3__)
00063 # define _EEPROM_SUFFIX _90pwm3
00064 #elif defined (__AVR_AT90PWM3B__)
00065 # define _EEPROM_SUFFIX _90pwm3b
00066 #elif defined (__AVR_AT90PWM216__)
00067 # define _EEPROM_SUFFIX _90pwm216
00068 #elif defined (__AVR_AT90PWM316__)
00069 # define _EEPROM_SUFFIX _90pwm316
00070 #elif defined (__AVR_AT90PWM81__)
00071 # define _EEPROM_SUFFIX _90pwm81
00072 #elif defined (__AVR_ATmega16M1__)
00073 # define _EEPROM_SUFFIX  _m16m1
00074 #elif defined (__AVR_ATmega8U2__)
00075 # define _EEPROM_SUFFIX  _m8u2
00076 #elif defined (__AVR_ATmega16U2__)
00077 # define _EEPROM_SUFFIX  _m16u2
00078 #elif defined (__AVR_ATmega16U4__)
00079 # define _EEPROM_SUFFIX  _m16u4
00080 #elif defined (__AVR_ATmega32C1__)
00081 # define _EEPROM_SUFFIX  _m32c1
00082 #elif defined (__AVR_ATmega32M1__)
00083 # define _EEPROM_SUFFIX  _m32m1
00084 #elif defined (__AVR_ATmega32U2__)
00085 # define _EEPROM_SUFFIX  _m32u2
00086 #elif defined (__AVR_ATmega32U4__)
00087 # define _EEPROM_SUFFIX  _m32u4
00088 #elif defined (__AVR_ATmega32U6__)
00089 # define _EEPROM_SUFFIX  _m32u6
00090 #elif defined (__AVR_ATmega64C1__)
00091 # define _EEPROM_SUFFIX  _m64c1
00092 #elif defined (__AVR_ATmega64M1__)
00093 # define _EEPROM_SUFFIX  _m64m1
00094 #elif defined (__AVR_ATmega128__)
00095 # define _EEPROM_SUFFIX  _m128
00096 #elif defined (__AVR_ATmega1280__)
00097 # define _EEPROM_SUFFIX  _m1280
00098 #elif defined (__AVR_ATmega1281__)
00099 # define _EEPROM_SUFFIX  _m1281
00100 #elif defined (__AVR_ATmega1284P__)
00101 # define _EEPROM_SUFFIX  _m1284p
00102 #elif defined (__AVR_ATmega128RFA1__)
00103 # define _EEPROM_SUFFIX  _m128rfa1
00104 #elif defined (__AVR_ATmega2560__)
00105 # define _EEPROM_SUFFIX  _m2560
00106 #elif defined (__AVR_ATmega2561__)
00107 # define _EEPROM_SUFFIX  _m2561
00108 #elif defined (__AVR_AT90CAN32__)
00109 # define _EEPROM_SUFFIX _can32
00110 #elif defined (__AVR_AT90CAN64__)
00111 # define _EEPROM_SUFFIX _can64
00112 #elif defined (__AVR_AT90CAN128__)
00113 # define _EEPROM_SUFFIX _can128
00114 #elif defined (__AVR_AT90USB82__)
00115 # define _EEPROM_SUFFIX _usb82
00116 #elif defined (__AVR_AT90USB162__)
00117 # define _EEPROM_SUFFIX _usb162
00118 #elif defined (__AVR_AT90USB646__)
00119 # define _EEPROM_SUFFIX _usb646
00120 #elif defined (__AVR_AT90USB647__)
00121 # define _EEPROM_SUFFIX _usb647
00122 #elif defined (__AVR_AT90USB1286__)
00123 # define _EEPROM_SUFFIX _usb1286
00124 #elif defined (__AVR_AT90USB1287__)
00125 # define _EEPROM_SUFFIX _usb1287
00126 #elif defined (__AVR_ATmega64__)
00127 # define _EEPROM_SUFFIX  _m64
00128 #elif defined (__AVR_ATmega640__)
00129 # define _EEPROM_SUFFIX  _m640
00130 #elif defined (__AVR_ATmega644__)
00131 # define _EEPROM_SUFFIX  _m644
00132 #elif defined (__AVR_ATmega644A__)
00133 # define _EEPROM_SUFFIX  _m644a
00134 #elif defined (__AVR_ATmega644P__)
00135 # define _EEPROM_SUFFIX  _m644p
00136 #elif defined (__AVR_ATmega644PA__)
00137 # define _EEPROM_SUFFIX  _m644pa
00138 #elif defined (__AVR_ATmega645__)
00139 # define _EEPROM_SUFFIX  _m645
00140 #elif defined (__AVR_ATmega645A__)
00141 # define _EEPROM_SUFFIX  _m645a
00142 #elif defined (__AVR_ATmega645P__)
00143 # define _EEPROM_SUFFIX  _m645p
00144 #elif defined (__AVR_ATmega6450__)
00145 # define _EEPROM_SUFFIX  _m6450
00146 #elif defined (__AVR_ATmega6450A__)
00147 # define _EEPROM_SUFFIX  _m6450a
00148 #elif defined (__AVR_ATmega6450P__)
00149 # define _EEPROM_SUFFIX  _m6450p
00150 #elif defined (__AVR_ATmega649__)
00151 # define _EEPROM_SUFFIX  _m649
00152 #elif defined (__AVR_ATmega649A__)
00153 # define _EEPROM_SUFFIX  _m649a
00154 #elif defined (__AVR_ATmega649P__)
00155 # define _EEPROM_SUFFIX  _m649p
00156 #elif defined (__AVR_ATmega6490__)
00157 # define _EEPROM_SUFFIX  _m6490
00158 #elif defined (__AVR_ATmega6490A__)
00159 # define _EEPROM_SUFFIX  _m6490a
00160 #elif defined (__AVR_ATmega6490P__)
00161 # define _EEPROM_SUFFIX  _m6490p
00162 #elif defined (__AVR_ATmega103__)
00163 # define _EEPROM_SUFFIX  _m103
00164 #elif defined (__AVR_ATmega32__)
00165 # define _EEPROM_SUFFIX  _m32
00166 #elif defined (__AVR_ATmega323__)
00167 # define _EEPROM_SUFFIX  _m323
00168 #elif defined (__AVR_ATmega324A__)
00169 # define _EEPROM_SUFFIX  _m324a
00170 #elif defined (__AVR_ATmega324P__)
00171 # define _EEPROM_SUFFIX  _m324p
00172 #elif defined (__AVR_ATmega324PA__)
00173 # define _EEPROM_SUFFIX  _m324pa
00174 #elif defined (__AVR_ATmega325__)
00175 # define _EEPROM_SUFFIX  _m325
00176 #elif defined (__AVR_ATmega325A__)
00177 # define _EEPROM_SUFFIX  _m325a
00178 #elif defined (__AVR_ATmega325P__)
00179 # define _EEPROM_SUFFIX  _m325p
00180 #elif defined (__AVR_ATmega3250__)
00181 # define _EEPROM_SUFFIX  _m3250
00182 #elif defined (__AVR_ATmega3250A__)
00183 # define _EEPROM_SUFFIX  _m3250a
00184 #elif defined (__AVR_ATmega3250P__)
00185 # define _EEPROM_SUFFIX  _m3250p
00186 #elif defined (__AVR_ATmega328__)
00187 # define _EEPROM_SUFFIX  _m328
00188 #elif defined (__AVR_ATmega328P__)
00189 # define _EEPROM_SUFFIX  _m328p
00190 #elif defined (__AVR_ATmega329__)
00191 # define _EEPROM_SUFFIX  _m329
00192 #elif defined (__AVR_ATmega329A__)
00193 # define _EEPROM_SUFFIX  _m329a
00194 #elif defined (__AVR_ATmega329P__)
00195 # define _EEPROM_SUFFIX  _m329p
00196 #elif defined (__AVR_ATmega329PA__)
00197 # define _EEPROM_SUFFIX  _m329pa
00198 #elif defined (__AVR_ATmega3290__)
00199 # define _EEPROM_SUFFIX  _m3290
00200 #elif defined (__AVR_ATmega3290A__)
00201 # define _EEPROM_SUFFIX  _m3290a
00202 #elif defined (__AVR_ATmega3290P__)
00203 # define _EEPROM_SUFFIX  _m3290p
00204 #elif defined (__AVR_ATmega32HVB__)
00205 # define _EEPROM_SUFFIX  _m32hvb
00206 #elif defined (__AVR_ATmega64HVE__)
00207 # define _EEPROM_SUFFIX  _m64hve
00208 #elif defined (__AVR_ATmega406__)
00209 # define _EEPROM_SUFFIX  _m406
00210 #elif defined (__AVR_ATmega16__)
00211 # define _EEPROM_SUFFIX  _m16
00212 #elif defined (__AVR_ATmega16A__)
00213 # define _EEPROM_SUFFIX  _m16a
00214 #elif defined (__AVR_ATmega161__)
00215 # define _EEPROM_SUFFIX  _m161
00216 #elif defined (__AVR_ATmega162__)
00217 # define _EEPROM_SUFFIX  _m162
00218 #elif defined (__AVR_ATmega163__)
00219 # define _EEPROM_SUFFIX  _m163
00220 #elif defined (__AVR_ATmega164__)
00221 # define _EEPROM_SUFFIX  _m164
00222 #elif defined (__AVR_ATmega164P__)
00223 # define _EEPROM_SUFFIX  _m164p
00224 #elif defined (__AVR_ATmega165__)
00225 # define _EEPROM_SUFFIX  _m165
00226 #elif defined (__AVR_ATmega165A__)
00227 # define _EEPROM_SUFFIX  _m165a
00228 #elif defined (__AVR_ATmega165P__)
00229 # define _EEPROM_SUFFIX  _m165p
00230 #elif defined (__AVR_ATmega168__)
00231 # define _EEPROM_SUFFIX  _m168
00232 #elif defined (__AVR_ATmega168A__)
00233 # define _EEPROM_SUFFIX  _m168a
00234 #elif defined (__AVR_ATmega168P__)
00235 # define _EEPROM_SUFFIX  _m168p
00236 #elif defined (__AVR_ATmega169__)
00237 # define _EEPROM_SUFFIX  _m169
00238 #elif defined (__AVR_ATmega169A__)
00239 # define _EEPROM_SUFFIX  _m169a
00240 #elif defined (__AVR_ATmega169P__)
00241 # define _EEPROM_SUFFIX  _m169p
00242 #elif defined (__AVR_ATmega169PA__)
00243 # define _EEPROM_SUFFIX  _m169pa
00244 #elif defined (__AVR_ATmega8HVA__)
00245 # define _EEPROM_SUFFIX  _m8hva
00246 #elif defined (__AVR_ATmega16HVA__)
00247 # define _EEPROM_SUFFIX  _m16hva
00248 #elif defined (__AVR_ATmega16HVA2__)
00249 # define _EEPROM_SUFFIX  _m16hva2
00250 #elif defined (__AVR_ATmega16HVB__)
00251 # define _EEPROM_SUFFIX  _m16hvb
00252 #elif defined (__AVR_ATmega8__)
00253 # define _EEPROM_SUFFIX  _m8
00254 #elif defined (__AVR_ATmega48__)
00255 # define _EEPROM_SUFFIX  _m48
00256 #elif defined (__AVR_ATmega48A__)
00257 # define _EEPROM_SUFFIX  _m48a
00258 #elif defined (__AVR_ATmega48P__)
00259 # define _EEPROM_SUFFIX  _m48p
00260 #elif defined (__AVR_ATmega88__)
00261 # define _EEPROM_SUFFIX  _m88
00262 #elif defined (__AVR_ATmega88A__)
00263 # define _EEPROM_SUFFIX  _m88a
00264 #elif defined (__AVR_ATmega88P__)
00265 # define _EEPROM_SUFFIX  _m88p
00266 #elif defined (__AVR_ATmega88PA__)
00267 # define _EEPROM_SUFFIX  _m88pa
00268 #elif defined (__AVR_ATmega8515__)
00269 # define _EEPROM_SUFFIX  _m8515
00270 #elif defined (__AVR_ATmega8535__)
00271 # define _EEPROM_SUFFIX  _m8535
00272 #elif defined (__AVR_AT90S8535__)
00273 # define _EEPROM_SUFFIX  _8535
00274 #elif defined (__AVR_AT90C8534__)
00275 # define _EEPROM_SUFFIX  _8534
00276 #elif defined (__AVR_AT90S8515__)
00277 # define _EEPROM_SUFFIX  _8515
00278 #elif defined (__AVR_AT90S4434__)
00279 # define _EEPROM_SUFFIX  _4434
00280 #elif defined (__AVR_AT90S4433__)
00281 # define _EEPROM_SUFFIX  _4433
00282 #elif defined (__AVR_AT90S4414__)
00283 # define _EEPROM_SUFFIX  _4414
00284 #elif defined (__AVR_ATtiny22__)
00285 # define _EEPROM_SUFFIX _tn22
00286 #elif defined (__AVR_ATtiny26__)
00287 # define _EEPROM_SUFFIX _tn26
00288 #elif defined (__AVR_AT90S2343__)
00289 # define _EEPROM_SUFFIX  _2343
00290 #elif defined (__AVR_AT90S2333__)
00291 # define _EEPROM_SUFFIX  _2333
00292 #elif defined (__AVR_AT90S2323__)
00293 # define _EEPROM_SUFFIX  _2323
00294 #elif defined (__AVR_AT90S2313__)
00295 # define _EEPROM_SUFFIX  _2313
00296 #elif defined (__AVR_ATtiny2313__)
00297 # define _EEPROM_SUFFIX _tn2313
00298 #elif defined (__AVR_ATtiny2313A__)
00299 # define _EEPROM_SUFFIX _tn2313a
00300 #elif defined (__AVR_ATtiny4313__)
00301 # define _EEPROM_SUFFIX _tn4313
00302 #elif defined (__AVR_ATtiny13__)
00303 # define _EEPROM_SUFFIX _tn13
00304 #elif defined (__AVR_ATtiny13A__)
00305 # define _EEPROM_SUFFIX _tn13a
00306 #elif defined (__AVR_ATtiny25__)
00307 # define _EEPROM_SUFFIX _tn25
00308 #elif defined (__AVR_ATtiny45__)
00309 # define _EEPROM_SUFFIX _tn45
00310 #elif defined (__AVR_ATtiny85__)
00311 # define _EEPROM_SUFFIX _tn85
00312 #elif defined (__AVR_ATtiny24__)
00313 # define _EEPROM_SUFFIX _tn24
00314 #elif defined (__AVR_ATtiny24A__)
00315 # define _EEPROM_SUFFIX _tn24a
00316 #elif defined (__AVR_ATtiny44__)
00317 # define _EEPROM_SUFFIX _tn44
00318 #elif defined (__AVR_ATtiny44A__)
00319 # define _EEPROM_SUFFIX _tn44a
00320 #elif defined (__AVR_ATtiny84__)
00321 # define _EEPROM_SUFFIX _tn84
00322 #elif defined (__AVR_ATtiny84A__)
00323 # define _EEPROM_SUFFIX _tn84a
00324 #elif defined (__AVR_ATtiny261__)
00325 # define _EEPROM_SUFFIX _tn261
00326 #elif defined (__AVR_ATtiny261A__)
00327 # define _EEPROM_SUFFIX _tn261a
00328 #elif defined (__AVR_ATtiny461__)
00329 # define _EEPROM_SUFFIX _tn461
00330 #elif defined (__AVR_ATtiny461A__)
00331 # define _EEPROM_SUFFIX _tn461a
00332 #elif defined (__AVR_ATtiny861__)
00333 # define _EEPROM_SUFFIX _tn861
00334 #elif defined (__AVR_ATtiny861A__)
00335 # define _EEPROM_SUFFIX _tn861a
00336 #elif defined (__AVR_ATtiny43U__)
00337 # define _EEPROM_SUFFIX _tn43u
00338 #elif defined (__AVR_ATtiny48__)
00339 # define _EEPROM_SUFFIX _tn48
00340 #elif defined (__AVR_ATtiny88__)
00341 # define _EEPROM_SUFFIX _tn88
00342 #elif defined (__AVR_ATtiny87__)
00343 # define _EEPROM_SUFFIX _tn87
00344 #elif defined (__AVR_ATtiny167__)
00345 # define _EEPROM_SUFFIX _tn167
00346 #elif defined (__AVR_AT90SCR100__)
00347 # define _EEPROM_SUFFIX _90scr100
00348 #elif defined (__AVR_ATxmega16A4__)
00349 # define _EEPROM_SUFFIX   _x16a4
00350 #elif defined (__AVR_ATxmega16D4__)
00351 # define _EEPROM_SUFFIX   _x16d4
00352 #elif defined (__AVR_ATxmega32A4__)
00353 # define _EEPROM_SUFFIX   _x32a4
00354 #elif defined (__AVR_ATxmega32D4__)
00355 # define _EEPROM_SUFFIX   _x32d4
00356 #elif defined (__AVR_ATxmega64A1__)
00357 # define _EEPROM_SUFFIX   _x64a1
00358 #elif defined (__AVR_ATxmega64A1U__)
00359 # define _EEPROM_SUFFIX   _x64a1u
00360 #elif defined (__AVR_ATxmega64A3__)
00361 # define _EEPROM_SUFFIX   _x64a3
00362 #elif defined (__AVR_ATxmega64D3__)
00363 # define _EEPROM_SUFFIX   _x64d3
00364 #elif defined (__AVR_ATxmega128A1__)
00365 # define _EEPROM_SUFFIX   _x128a1
00366 #elif defined (__AVR_ATxmega128A1U__)
00367 # define _EEPROM_SUFFIX   _x128a1u
00368 #elif defined (__AVR_ATxmega128A3__)
00369 # define _EEPROM_SUFFIX   _x128a3
00370 #elif defined (__AVR_ATxmega128D3__)
00371 # define _EEPROM_SUFFIX   _x128d3
00372 #elif defined (__AVR_ATxmega192A3__)
00373 # define _EEPROM_SUFFIX   _x192a3
00374 #elif defined (__AVR_ATxmega192D3__)
00375 # define _EEPROM_SUFFIX   _x192d3
00376 #elif defined (__AVR_ATxmega256A3__)
00377 # define _EEPROM_SUFFIX   _x256a3
00378 #elif defined (__AVR_ATxmega256A3B__)
00379 # define _EEPROM_SUFFIX   _x256a3b
00380 #elif defined (__AVR_ATxmega256D3__)
00381 # define _EEPROM_SUFFIX   _x256d3
00382 #elif defined (__AVR_ATA6289__)
00383 # define _EEPROM_SUFFIX _a6289
00384 /* avr1: the following only supported for assembler programs */
00385 #elif defined (__AVR_ATtiny28__)
00386 # define _EEPROM_SUFFIX _tn28
00387 #elif defined (__AVR_AT90S1200__)
00388 # define _EEPROM_SUFFIX  _1200
00389 #elif defined (__AVR_ATtiny15__)
00390 # define _EEPROM_SUFFIX _tn15
00391 #elif defined (__AVR_ATtiny12__)
00392 # define _EEPROM_SUFFIX _tn12
00393 #elif defined (__AVR_ATtiny11__)
00394 # define _EEPROM_SUFFIX _tn11
00395 #else
00396 # define _EEPROM_SUFFIX         _UNKNOWN
00397 #endif
00398 
00399 #define _EEPROM_CONCAT1(s1, s2)     s1 ## s2
00400 #define _EEPROM_CONCAT2(s1, s2)     _EEPROM_CONCAT1 (s1, s2)
00401 
00402 #define eeprom_read_byte      _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX)
00403 #define eeprom_read_word      _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX)
00404 #define eeprom_read_dword     _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX)
00405 #define eeprom_read_float     _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX)
00406 #define eeprom_read_block     _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX)
00407 
00408 #define eeprom_write_byte     _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX)
00409 #define eeprom_write_word     _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX)
00410 #define eeprom_write_dword    _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX)
00411 #define eeprom_write_float    _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX)
00412 #define eeprom_write_block    _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX)
00413 
00414 #define eeprom_update_byte    _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX)
00415 #define eeprom_update_word    _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX)
00416 #define eeprom_update_dword   _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX)
00417 #define eeprom_update_float   _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX)
00418 #define eeprom_update_block   _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX)
00419 
00420 #endif  /* !__DOXYGEN__ */
00421 
00422 #ifndef __ASSEMBLER__
00423 
00424 #include <stddef.h>     /* size_t */
00425 #include <stdint.h>
00426 
00427 /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
00428     \code #include <avr/eeprom.h> \endcode
00429 
00430     This header file declares the interface to some simple library
00431     routines suitable for handling the data EEPROM contained in the
00432     AVR microcontrollers.  The implementation uses a simple polled
00433     mode interface.  Applications that require interrupt-controlled
00434     EEPROM access to ensure that no time will be wasted in spinloops
00435     will have to deploy their own implementation.
00436 
00437     \par Notes:
00438 
00439     - In addition to the write functions there is a set of update ones.
00440     This functions read each byte first and skip the burning if the
00441     old value is the same with new.  The scaning direction is from
00442     high address to low, to obtain quick return in common cases.
00443 
00444     - All of the read/write functions first make sure the EEPROM is
00445     ready to be accessed.  Since this may cause long delays if a
00446     write operation is still pending, time-critical applications
00447     should first poll the EEPROM e. g. using eeprom_is_ready() before
00448     attempting any actual I/O.  But this functions are not wait until
00449     SELFPRGEN in SPMCSR becomes zero.  Do this manually, if your
00450     softwate contains the Flash burning.
00451 
00452     - As these functions modify IO registers, they are known to be
00453     non-reentrant.  If any of these functions are used from both,
00454     standard and interrupt context, the applications must ensure
00455     proper protection (e.g. by disabling interrupts before accessing
00456     them).
00457 
00458     - All write functions force erase_and_write programming mode.
00459     
00460     - For Xmega the EEPROM start address is 0, like other architectures.
00461     The reading functions add the 0x2000 value to use EEPROM mapping into
00462     data space.
00463  */
00464 
00465 #ifdef __cplusplus
00466 extern "C" {
00467 #endif
00468 
00469 #ifndef __ATTR_PURE__
00470 # ifdef  __DOXYGEN__
00471 #  define __ATTR_PURE__
00472 # else
00473 #  define __ATTR_PURE__  __attribute__((__pure__))
00474 # endif
00475 #endif
00476 
00477 /** \def EEMEM
00478     \ingroup avr_eeprom
00479     Attribute expression causing a variable to be allocated within the
00480     .eeprom section.    */
00481 #define EEMEM __attribute__((section(".eeprom")))
00482 
00483 /** \def eeprom_is_ready
00484     \ingroup avr_eeprom
00485     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
00486  */
00487 #if     defined (__DOXYGEN__)
00488 # define eeprom_is_ready()
00489 #elif   defined (__AVR_XMEGA__) && __AVR_XMEGA__
00490 # define eeprom_is_ready()      bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp)
00491 #elif   defined (DEECR)
00492 # define eeprom_is_ready()      bit_is_clear (DEECR, BSY)
00493 #elif   defined (EEPE)
00494 # define eeprom_is_ready()      bit_is_clear (EECR, EEPE)
00495 #else
00496 # define eeprom_is_ready()      bit_is_clear (EECR, EEWE)
00497 #endif
00498 
00499 
00500 /** \def eeprom_busy_wait
00501     \ingroup avr_eeprom
00502     Loops until the eeprom is no longer busy.
00503     \returns Nothing.
00504  */      
00505 #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
00506 
00507 
00508 /** \ingroup avr_eeprom
00509     Read one byte from EEPROM address \a __p.
00510  */
00511 uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__;
00512 
00513 /** \ingroup avr_eeprom
00514     Read one 16-bit word (little endian) from EEPROM address \a __p.
00515  */
00516 uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__;
00517 
00518 /** \ingroup avr_eeprom
00519     Read one 32-bit double word (little endian) from EEPROM address \a __p.
00520  */
00521 uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__;
00522 
00523 /** \ingroup avr_eeprom
00524     Read one float value (little endian) from EEPROM address \a __p.
00525  */
00526 float eeprom_read_float (const float *__p) __ATTR_PURE__;
00527 
00528 /** \ingroup avr_eeprom
00529     Read a block of \a __n bytes from EEPROM address \a __src to SRAM
00530     \a __dst.
00531  */
00532 void eeprom_read_block (void *__dst, const void *__src, size_t __n);
00533 
00534 
00535 /** \ingroup avr_eeprom
00536     Write a byte \a __value to EEPROM address \a __p.
00537  */
00538 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
00539 
00540 /** \ingroup avr_eeprom
00541     Write a word \a __value to EEPROM address \a __p.
00542  */
00543 void eeprom_write_word (uint16_t *__p, uint16_t __value);
00544 
00545 /** \ingroup avr_eeprom
00546     Write a 32-bit double word \a __value to EEPROM address \a __p.
00547  */
00548 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
00549 
00550 /** \ingroup avr_eeprom
00551     Write a float \a __value to EEPROM address \a __p.
00552  */
00553 void eeprom_write_float (float *__p, float __value);
00554 
00555 /** \ingroup avr_eeprom
00556     Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00557     \note The argument order is mismatch with common functions like strcpy().
00558  */
00559 void eeprom_write_block (const void *__src, void *__dst, size_t __n);
00560 
00561 
00562 /** \ingroup avr_eeprom
00563     Update a byte \a __value to EEPROM address \a __p.
00564  */
00565 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
00566 
00567 /** \ingroup avr_eeprom
00568     Update a word \a __value to EEPROM address \a __p.
00569  */
00570 void eeprom_update_word (uint16_t *__p, uint16_t __value);
00571 
00572 /** \ingroup avr_eeprom
00573     Update a 32-bit double word \a __value to EEPROM address \a __p.
00574  */
00575 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
00576 
00577 /** \ingroup avr_eeprom
00578     Update a float \a __value to EEPROM address \a __p.
00579  */
00580 void eeprom_update_float (float *__p, float __value);
00581 
00582 /** \ingroup avr_eeprom
00583     Update a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00584     \note The argument order is mismatch with common functions like strcpy().
00585  */
00586 void eeprom_update_block (const void *__src, void *__dst, size_t __n);
00587 
00588 
00589 /** \name IAR C compatibility defines   */
00590 /*@{*/
00591 
00592 /** \def _EEPUT
00593     \ingroup avr_eeprom
00594     Write a byte to EEPROM. Compatibility define for IAR C.     */
00595 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00596 
00597 /** \def __EEPUT
00598     \ingroup avr_eeprom
00599     Write a byte to EEPROM. Compatibility define for IAR C.     */
00600 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00601 
00602 /** \def _EEGET
00603     \ingroup avr_eeprom
00604     Read a byte from EEPROM. Compatibility define for IAR C.    */
00605 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00606 
00607 /** \def __EEGET
00608     \ingroup avr_eeprom
00609     Read a byte from EEPROM. Compatibility define for IAR C.    */
00610 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00611 
00612 /*@}*/
00613 
00614 #ifdef __cplusplus
00615 }
00616 #endif
00617 
00618 #endif  /* !__ASSEMBLER__ */
00619 #endif  /* E2END || defined(__DOXYGEN__) || defined(__COMPILING_AVR_LIBC__) */
00620 #endif  /* !_AVR_EEPROM_H_ */

Automatically generated by Doxygen 1.6.2-20100208 on 11 Jul 2010.