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 2211 2011-02-14 14:04:25Z aboyapati $ */
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_ATmega32HVBREVB__)
00207 # define _EEPROM_SUFFIX  _m32hvbrevb
00208 #elif defined (__AVR_ATmega64HVE__)
00209 # define _EEPROM_SUFFIX  _m64hve
00210 #elif defined (__AVR_ATmega406__)
00211 # define _EEPROM_SUFFIX  _m406
00212 #elif defined (__AVR_ATmega16__)
00213 # define _EEPROM_SUFFIX  _m16
00214 #elif defined (__AVR_ATmega16A__)
00215 # define _EEPROM_SUFFIX  _m16a
00216 #elif defined (__AVR_ATmega161__)
00217 # define _EEPROM_SUFFIX  _m161
00218 #elif defined (__AVR_ATmega162__)
00219 # define _EEPROM_SUFFIX  _m162
00220 #elif defined (__AVR_ATmega163__)
00221 # define _EEPROM_SUFFIX  _m163
00222 #elif defined (__AVR_ATmega164__)
00223 # define _EEPROM_SUFFIX  _m164
00224 #elif defined (__AVR_ATmega164P__)
00225 # define _EEPROM_SUFFIX  _m164p
00226 #elif defined (__AVR_ATmega165__)
00227 # define _EEPROM_SUFFIX  _m165
00228 #elif defined (__AVR_ATmega165A__)
00229 # define _EEPROM_SUFFIX  _m165a
00230 #elif defined (__AVR_ATmega165P__)
00231 # define _EEPROM_SUFFIX  _m165p
00232 #elif defined (__AVR_ATmega168__)
00233 # define _EEPROM_SUFFIX  _m168
00234 #elif defined (__AVR_ATmega168A__)
00235 # define _EEPROM_SUFFIX  _m168a
00236 #elif defined (__AVR_ATmega168P__)
00237 # define _EEPROM_SUFFIX  _m168p
00238 #elif defined (__AVR_ATmega169__)
00239 # define _EEPROM_SUFFIX  _m169
00240 #elif defined (__AVR_ATmega169A__)
00241 # define _EEPROM_SUFFIX  _m169a
00242 #elif defined (__AVR_ATmega169P__)
00243 # define _EEPROM_SUFFIX  _m169p
00244 #elif defined (__AVR_ATmega169PA__)
00245 # define _EEPROM_SUFFIX  _m169pa
00246 #elif defined (__AVR_ATmega8HVA__)
00247 # define _EEPROM_SUFFIX  _m8hva
00248 #elif defined (__AVR_ATmega16HVA__)
00249 # define _EEPROM_SUFFIX  _m16hva
00250 #elif defined (__AVR_ATmega16HVA2__)
00251 # define _EEPROM_SUFFIX  _m16hva2
00252 #elif defined (__AVR_ATmega16HVB__)
00253 # define _EEPROM_SUFFIX  _m16hvb
00254 #elif defined (__AVR_ATmega16HVBREVB__)
00255 # define _EEPROM_SUFFIX  _m16hvbrevb
00256 #elif defined (__AVR_ATmega8__)
00257 # define _EEPROM_SUFFIX  _m8
00258 #elif defined (__AVR_ATmega48__)
00259 # define _EEPROM_SUFFIX  _m48
00260 #elif defined (__AVR_ATmega48A__)
00261 # define _EEPROM_SUFFIX  _m48a
00262 #elif defined (__AVR_ATmega48P__)
00263 # define _EEPROM_SUFFIX  _m48p
00264 #elif defined (__AVR_ATmega88__)
00265 # define _EEPROM_SUFFIX  _m88
00266 #elif defined (__AVR_ATmega88A__)
00267 # define _EEPROM_SUFFIX  _m88a
00268 #elif defined (__AVR_ATmega88P__)
00269 # define _EEPROM_SUFFIX  _m88p
00270 #elif defined (__AVR_ATmega88PA__)
00271 # define _EEPROM_SUFFIX  _m88pa
00272 #elif defined (__AVR_ATmega8515__)
00273 # define _EEPROM_SUFFIX  _m8515
00274 #elif defined (__AVR_ATmega8535__)
00275 # define _EEPROM_SUFFIX  _m8535
00276 #elif defined (__AVR_AT90S8535__)
00277 # define _EEPROM_SUFFIX  _8535
00278 #elif defined (__AVR_AT90C8534__)
00279 # define _EEPROM_SUFFIX  _8534
00280 #elif defined (__AVR_AT90S8515__)
00281 # define _EEPROM_SUFFIX  _8515
00282 #elif defined (__AVR_AT90S4434__)
00283 # define _EEPROM_SUFFIX  _4434
00284 #elif defined (__AVR_AT90S4433__)
00285 # define _EEPROM_SUFFIX  _4433
00286 #elif defined (__AVR_AT90S4414__)
00287 # define _EEPROM_SUFFIX  _4414
00288 #elif defined (__AVR_ATtiny22__)
00289 # define _EEPROM_SUFFIX _tn22
00290 #elif defined (__AVR_ATtiny26__)
00291 # define _EEPROM_SUFFIX _tn26
00292 #elif defined (__AVR_AT90S2343__)
00293 # define _EEPROM_SUFFIX  _2343
00294 #elif defined (__AVR_AT90S2333__)
00295 # define _EEPROM_SUFFIX  _2333
00296 #elif defined (__AVR_AT90S2323__)
00297 # define _EEPROM_SUFFIX  _2323
00298 #elif defined (__AVR_AT90S2313__)
00299 # define _EEPROM_SUFFIX  _2313
00300 #elif defined (__AVR_ATtiny2313__)
00301 # define _EEPROM_SUFFIX _tn2313
00302 #elif defined (__AVR_ATtiny2313A__)
00303 # define _EEPROM_SUFFIX _tn2313a
00304 #elif defined (__AVR_ATtiny4313__)
00305 # define _EEPROM_SUFFIX _tn4313
00306 #elif defined (__AVR_ATtiny13__)
00307 # define _EEPROM_SUFFIX _tn13
00308 #elif defined (__AVR_ATtiny13A__)
00309 # define _EEPROM_SUFFIX _tn13a
00310 #elif defined (__AVR_ATtiny25__)
00311 # define _EEPROM_SUFFIX _tn25
00312 #elif defined (__AVR_ATtiny45__)
00313 # define _EEPROM_SUFFIX _tn45
00314 #elif defined (__AVR_ATtiny85__)
00315 # define _EEPROM_SUFFIX _tn85
00316 #elif defined (__AVR_ATtiny24__)
00317 # define _EEPROM_SUFFIX _tn24
00318 #elif defined (__AVR_ATtiny24A__)
00319 # define _EEPROM_SUFFIX _tn24a
00320 #elif defined (__AVR_ATtiny44__)
00321 # define _EEPROM_SUFFIX _tn44
00322 #elif defined (__AVR_ATtiny44A__)
00323 # define _EEPROM_SUFFIX _tn44a
00324 #elif defined (__AVR_ATtiny84__)
00325 # define _EEPROM_SUFFIX _tn84
00326 #elif defined (__AVR_ATtiny84A__)
00327 # define _EEPROM_SUFFIX _tn84a
00328 #elif defined (__AVR_ATtiny261__)
00329 # define _EEPROM_SUFFIX _tn261
00330 #elif defined (__AVR_ATtiny261A__)
00331 # define _EEPROM_SUFFIX _tn261a
00332 #elif defined (__AVR_ATtiny461__)
00333 # define _EEPROM_SUFFIX _tn461
00334 #elif defined (__AVR_ATtiny461A__)
00335 # define _EEPROM_SUFFIX _tn461a
00336 #elif defined (__AVR_ATtiny861__)
00337 # define _EEPROM_SUFFIX _tn861
00338 #elif defined (__AVR_ATtiny861A__)
00339 # define _EEPROM_SUFFIX _tn861a
00340 #elif defined (__AVR_ATtiny43U__)
00341 # define _EEPROM_SUFFIX _tn43u
00342 #elif defined (__AVR_ATtiny48__)
00343 # define _EEPROM_SUFFIX _tn48
00344 #elif defined (__AVR_ATtiny88__)
00345 # define _EEPROM_SUFFIX _tn88
00346 #elif defined (__AVR_ATtiny87__)
00347 # define _EEPROM_SUFFIX _tn87
00348 #elif defined (__AVR_ATtiny167__)
00349 # define _EEPROM_SUFFIX _tn167
00350 #elif defined (__AVR_AT90SCR100__)
00351 # define _EEPROM_SUFFIX _90scr100
00352 #elif defined (__AVR_ATxmega16A4__)
00353 # define _EEPROM_SUFFIX   _x16a4
00354 #elif defined (__AVR_ATxmega16D4__)
00355 # define _EEPROM_SUFFIX   _x16d4
00356 #elif defined (__AVR_ATxmega32A4__)
00357 # define _EEPROM_SUFFIX   _x32a4
00358 #elif defined (__AVR_ATxmega32D4__)
00359 # define _EEPROM_SUFFIX   _x32d4
00360 #elif defined (__AVR_ATxmega64A1__)
00361 # define _EEPROM_SUFFIX   _x64a1
00362 #elif defined (__AVR_ATxmega64A1U__)
00363 # define _EEPROM_SUFFIX   _x64a1u
00364 #elif defined (__AVR_ATxmega64A3__)
00365 # define _EEPROM_SUFFIX   _x64a3
00366 #elif defined (__AVR_ATxmega64D3__)
00367 # define _EEPROM_SUFFIX   _x64d3
00368 #elif defined (__AVR_ATxmega128A1__)
00369 # define _EEPROM_SUFFIX   _x128a1
00370 #elif defined (__AVR_ATxmega128A1U__)
00371 # define _EEPROM_SUFFIX   _x128a1u
00372 #elif defined (__AVR_ATxmega128A3__)
00373 # define _EEPROM_SUFFIX   _x128a3
00374 #elif defined (__AVR_ATxmega128D3__)
00375 # define _EEPROM_SUFFIX   _x128d3
00376 #elif defined (__AVR_ATxmega192A3__)
00377 # define _EEPROM_SUFFIX   _x192a3
00378 #elif defined (__AVR_ATxmega192D3__)
00379 # define _EEPROM_SUFFIX   _x192d3
00380 #elif defined (__AVR_ATxmega256A3__)
00381 # define _EEPROM_SUFFIX   _x256a3
00382 #elif defined (__AVR_ATxmega256A3B__)
00383 # define _EEPROM_SUFFIX   _x256a3b
00384 #elif defined (__AVR_ATxmega256D3__)
00385 # define _EEPROM_SUFFIX   _x256d3
00386 #elif defined (__AVR_ATA6289__)
00387 # define _EEPROM_SUFFIX _a6289
00388 /* avr1: the following only supported for assembler programs */
00389 #elif defined (__AVR_ATtiny28__)
00390 # define _EEPROM_SUFFIX _tn28
00391 #elif defined (__AVR_AT90S1200__)
00392 # define _EEPROM_SUFFIX  _1200
00393 #elif defined (__AVR_ATtiny15__)
00394 # define _EEPROM_SUFFIX _tn15
00395 #elif defined (__AVR_ATtiny12__)
00396 # define _EEPROM_SUFFIX _tn12
00397 #elif defined (__AVR_ATtiny11__)
00398 # define _EEPROM_SUFFIX _tn11
00399 #else
00400 # define _EEPROM_SUFFIX         _UNKNOWN
00401 #endif
00402 
00403 #define _EEPROM_CONCAT1(s1, s2)     s1 ## s2
00404 #define _EEPROM_CONCAT2(s1, s2)     _EEPROM_CONCAT1 (s1, s2)
00405 
00406 #define eeprom_read_byte      _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX)
00407 #define eeprom_read_word      _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX)
00408 #define eeprom_read_dword     _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX)
00409 #define eeprom_read_float     _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX)
00410 #define eeprom_read_block     _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX)
00411 
00412 #define eeprom_write_byte     _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX)
00413 #define eeprom_write_word     _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX)
00414 #define eeprom_write_dword    _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX)
00415 #define eeprom_write_float    _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX)
00416 #define eeprom_write_block    _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX)
00417 
00418 #define eeprom_update_byte    _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX)
00419 #define eeprom_update_word    _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX)
00420 #define eeprom_update_dword   _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX)
00421 #define eeprom_update_float   _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX)
00422 #define eeprom_update_block   _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX)
00423 
00424 #endif  /* !__DOXYGEN__ */
00425 
00426 #ifndef __ASSEMBLER__
00427 
00428 #include <stddef.h>     /* size_t */
00429 #include <stdint.h>
00430 
00431 /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
00432     \code #include <avr/eeprom.h> \endcode
00433 
00434     This header file declares the interface to some simple library
00435     routines suitable for handling the data EEPROM contained in the
00436     AVR microcontrollers.  The implementation uses a simple polled
00437     mode interface.  Applications that require interrupt-controlled
00438     EEPROM access to ensure that no time will be wasted in spinloops
00439     will have to deploy their own implementation.
00440 
00441     \par Notes:
00442 
00443     - In addition to the write functions there is a set of update ones.
00444     This functions read each byte first and skip the burning if the
00445     old value is the same with new.  The scaning direction is from
00446     high address to low, to obtain quick return in common cases.
00447 
00448     - All of the read/write functions first make sure the EEPROM is
00449     ready to be accessed.  Since this may cause long delays if a
00450     write operation is still pending, time-critical applications
00451     should first poll the EEPROM e. g. using eeprom_is_ready() before
00452     attempting any actual I/O.  But this functions are not wait until
00453     SELFPRGEN in SPMCSR becomes zero.  Do this manually, if your
00454     softwate contains the Flash burning.
00455 
00456     - As these functions modify IO registers, they are known to be
00457     non-reentrant.  If any of these functions are used from both,
00458     standard and interrupt context, the applications must ensure
00459     proper protection (e.g. by disabling interrupts before accessing
00460     them).
00461 
00462     - All write functions force erase_and_write programming mode.
00463     
00464     - For Xmega the EEPROM start address is 0, like other architectures.
00465     The reading functions add the 0x2000 value to use EEPROM mapping into
00466     data space.
00467  */
00468 
00469 #ifdef __cplusplus
00470 extern "C" {
00471 #endif
00472 
00473 #ifndef __ATTR_PURE__
00474 # ifdef  __DOXYGEN__
00475 #  define __ATTR_PURE__
00476 # else
00477 #  define __ATTR_PURE__  __attribute__((__pure__))
00478 # endif
00479 #endif
00480 
00481 /** \def EEMEM
00482     \ingroup avr_eeprom
00483     Attribute expression causing a variable to be allocated within the
00484     .eeprom section.    */
00485 #define EEMEM __attribute__((section(".eeprom")))
00486 
00487 /** \def eeprom_is_ready
00488     \ingroup avr_eeprom
00489     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
00490  */
00491 #if     defined (__DOXYGEN__)
00492 # define eeprom_is_ready()
00493 #elif   defined (__AVR_XMEGA__) && __AVR_XMEGA__
00494 # define eeprom_is_ready()      bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp)
00495 #elif   defined (DEECR)
00496 # define eeprom_is_ready()      bit_is_clear (DEECR, BSY)
00497 #elif   defined (EEPE)
00498 # define eeprom_is_ready()      bit_is_clear (EECR, EEPE)
00499 #else
00500 # define eeprom_is_ready()      bit_is_clear (EECR, EEWE)
00501 #endif
00502 
00503 
00504 /** \def eeprom_busy_wait
00505     \ingroup avr_eeprom
00506     Loops until the eeprom is no longer busy.
00507     \returns Nothing.
00508  */      
00509 #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
00510 
00511 
00512 /** \ingroup avr_eeprom
00513     Read one byte from EEPROM address \a __p.
00514  */
00515 uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__;
00516 
00517 /** \ingroup avr_eeprom
00518     Read one 16-bit word (little endian) from EEPROM address \a __p.
00519  */
00520 uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__;
00521 
00522 /** \ingroup avr_eeprom
00523     Read one 32-bit double word (little endian) from EEPROM address \a __p.
00524  */
00525 uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__;
00526 
00527 /** \ingroup avr_eeprom
00528     Read one float value (little endian) from EEPROM address \a __p.
00529  */
00530 float eeprom_read_float (const float *__p) __ATTR_PURE__;
00531 
00532 /** \ingroup avr_eeprom
00533     Read a block of \a __n bytes from EEPROM address \a __src to SRAM
00534     \a __dst.
00535  */
00536 void eeprom_read_block (void *__dst, const void *__src, size_t __n);
00537 
00538 
00539 /** \ingroup avr_eeprom
00540     Write a byte \a __value to EEPROM address \a __p.
00541  */
00542 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
00543 
00544 /** \ingroup avr_eeprom
00545     Write a word \a __value to EEPROM address \a __p.
00546  */
00547 void eeprom_write_word (uint16_t *__p, uint16_t __value);
00548 
00549 /** \ingroup avr_eeprom
00550     Write a 32-bit double word \a __value to EEPROM address \a __p.
00551  */
00552 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
00553 
00554 /** \ingroup avr_eeprom
00555     Write a float \a __value to EEPROM address \a __p.
00556  */
00557 void eeprom_write_float (float *__p, float __value);
00558 
00559 /** \ingroup avr_eeprom
00560     Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00561     \note The argument order is mismatch with common functions like strcpy().
00562  */
00563 void eeprom_write_block (const void *__src, void *__dst, size_t __n);
00564 
00565 
00566 /** \ingroup avr_eeprom
00567     Update a byte \a __value to EEPROM address \a __p.
00568  */
00569 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
00570 
00571 /** \ingroup avr_eeprom
00572     Update a word \a __value to EEPROM address \a __p.
00573  */
00574 void eeprom_update_word (uint16_t *__p, uint16_t __value);
00575 
00576 /** \ingroup avr_eeprom
00577     Update a 32-bit double word \a __value to EEPROM address \a __p.
00578  */
00579 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
00580 
00581 /** \ingroup avr_eeprom
00582     Update a float \a __value to EEPROM address \a __p.
00583  */
00584 void eeprom_update_float (float *__p, float __value);
00585 
00586 /** \ingroup avr_eeprom
00587     Update a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00588     \note The argument order is mismatch with common functions like strcpy().
00589  */
00590 void eeprom_update_block (const void *__src, void *__dst, size_t __n);
00591 
00592 
00593 /** \name IAR C compatibility defines   */
00594 /*@{*/
00595 
00596 /** \def _EEPUT
00597     \ingroup avr_eeprom
00598     Write a byte to EEPROM. Compatibility define for IAR C.     */
00599 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00600 
00601 /** \def __EEPUT
00602     \ingroup avr_eeprom
00603     Write a byte to EEPROM. Compatibility define for IAR C.     */
00604 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00605 
00606 /** \def _EEGET
00607     \ingroup avr_eeprom
00608     Read a byte from EEPROM. Compatibility define for IAR C.    */
00609 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00610 
00611 /** \def __EEGET
00612     \ingroup avr_eeprom
00613     Read a byte from EEPROM. Compatibility define for IAR C.    */
00614 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00615 
00616 /*@}*/
00617 
00618 #ifdef __cplusplus
00619 }
00620 #endif
00621 
00622 #endif  /* !__ASSEMBLER__ */
00623 #endif  /* E2END || defined(__DOXYGEN__) || defined(__COMPILING_AVR_LIBC__) */
00624 #endif  /* !_AVR_EEPROM_H_ */

Automatically generated by Doxygen 1.7.2 on Wed Feb 16 2011.