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$ */
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_AT90PWM161__)
00071 # define _EEPROM_SUFFIX _90pwm161
00072 #elif defined (__AVR_AT90PWM81__)
00073 # define _EEPROM_SUFFIX _90pwm81
00074 #elif defined (__AVR_ATmega16M1__)
00075 # define _EEPROM_SUFFIX  _m16m1
00076 #elif defined (__AVR_ATmega8U2__)
00077 # define _EEPROM_SUFFIX  _m8u2
00078 #elif defined (__AVR_ATmega16U2__)
00079 # define _EEPROM_SUFFIX  _m16u2
00080 #elif defined (__AVR_ATmega16U4__)
00081 # define _EEPROM_SUFFIX  _m16u4
00082 #elif defined (__AVR_ATmega32C1__)
00083 # define _EEPROM_SUFFIX  _m32c1
00084 #elif defined (__AVR_ATmega32M1__)
00085 # define _EEPROM_SUFFIX  _m32m1
00086 #elif defined (__AVR_ATmega32U2__)
00087 # define _EEPROM_SUFFIX  _m32u2
00088 #elif defined (__AVR_ATmega32U4__)
00089 # define _EEPROM_SUFFIX  _m32u4
00090 #elif defined (__AVR_ATmega32U6__)
00091 # define _EEPROM_SUFFIX  _m32u6
00092 #elif defined (__AVR_ATmega64C1__)
00093 # define _EEPROM_SUFFIX  _m64c1
00094 #elif defined (__AVR_ATmega64M1__)
00095 # define _EEPROM_SUFFIX  _m64m1
00096 #elif defined (__AVR_ATmega128__)
00097 # define _EEPROM_SUFFIX  _m128
00098 #elif defined (__AVR_ATmega128A__)
00099 # define _EEPROM_SUFFIX  _m128a
00100 #elif defined (__AVR_ATmega1280__)
00101 # define _EEPROM_SUFFIX  _m1280
00102 #elif defined (__AVR_ATmega1281__)
00103 # define _EEPROM_SUFFIX  _m1281
00104 #elif defined (__AVR_ATmega1284__)
00105 # define _EEPROM_SUFFIX  _m1284
00106 #elif defined (__AVR_ATmega1284P__)
00107 # define _EEPROM_SUFFIX  _m1284p
00108 #elif defined (__AVR_ATmega128RFA1__)
00109 # define _EEPROM_SUFFIX  _m128rfa1
00110 #elif defined (__AVR_ATmega128RFR2__)
00111 # define _EEPROM_SUFFIX  _m128rfr2
00112 #elif defined (__AVR_ATmega1284RFR2__)
00113 # define _EEPROM_SUFFIX  _m1284rfr2
00114 #elif defined (__AVR_ATmega256RFR2__)
00115 #elif defined (__AVR_ATmega2564RFR2__)
00116 # define _EEPROM_SUFFIX  _m2564rfr2
00117 # define _EEPROM_SUFFIX  _m256rfr2
00118 #elif defined (__AVR_ATmega2560__)
00119 # define _EEPROM_SUFFIX  _m2560
00120 #elif defined (__AVR_ATmega2561__)
00121 # define _EEPROM_SUFFIX  _m2561
00122 #elif defined (__AVR_AT90CAN32__)
00123 # define _EEPROM_SUFFIX _can32
00124 #elif defined (__AVR_AT90CAN64__)
00125 # define _EEPROM_SUFFIX _can64
00126 #elif defined (__AVR_AT90CAN128__)
00127 # define _EEPROM_SUFFIX _can128
00128 #elif defined (__AVR_AT90USB82__)
00129 # define _EEPROM_SUFFIX _usb82
00130 #elif defined (__AVR_AT90USB162__)
00131 # define _EEPROM_SUFFIX _usb162
00132 #elif defined (__AVR_AT90USB646__)
00133 # define _EEPROM_SUFFIX _usb646
00134 #elif defined (__AVR_AT90USB647__)
00135 # define _EEPROM_SUFFIX _usb647
00136 #elif defined (__AVR_AT90USB1286__)
00137 # define _EEPROM_SUFFIX _usb1286
00138 #elif defined (__AVR_AT90USB1287__)
00139 # define _EEPROM_SUFFIX _usb1287
00140 #elif defined (__AVR_ATmega64RFR2__)
00141 # define _EEPROM_SUFFIX  _m64rfr2
00142 #elif defined (__AVR_ATmega644RFR2__)
00143 # define _EEPROM_SUFFIX  _m644rfr2
00144 #elif defined (__AVR_ATmega64__)
00145 # define _EEPROM_SUFFIX  _m64
00146 #elif defined (__AVR_ATmega64A__)
00147 # define _EEPROM_SUFFIX  _m64a
00148 #elif defined (__AVR_ATmega640__)
00149 # define _EEPROM_SUFFIX  _m640
00150 #elif defined (__AVR_ATmega644__)
00151 # define _EEPROM_SUFFIX  _m644
00152 #elif defined (__AVR_ATmega644A__)
00153 # define _EEPROM_SUFFIX  _m644a
00154 #elif defined (__AVR_ATmega644P__)
00155 # define _EEPROM_SUFFIX  _m644p
00156 #elif defined (__AVR_ATmega644PA__)
00157 # define _EEPROM_SUFFIX  _m644pa
00158 #elif defined (__AVR_ATmega645__)
00159 # define _EEPROM_SUFFIX  _m645
00160 #elif defined (__AVR_ATmega645A__)
00161 # define _EEPROM_SUFFIX  _m645a
00162 #elif defined (__AVR_ATmega645P__)
00163 # define _EEPROM_SUFFIX  _m645p
00164 #elif defined (__AVR_ATmega6450__)
00165 # define _EEPROM_SUFFIX  _m6450
00166 #elif defined (__AVR_ATmega6450A__)
00167 # define _EEPROM_SUFFIX  _m6450a
00168 #elif defined (__AVR_ATmega6450P__)
00169 # define _EEPROM_SUFFIX  _m6450p
00170 #elif defined (__AVR_ATmega649__)
00171 # define _EEPROM_SUFFIX  _m649
00172 #elif defined (__AVR_ATmega649A__)
00173 # define _EEPROM_SUFFIX  _m649a
00174 #elif defined (__AVR_ATmega649P__)
00175 # define _EEPROM_SUFFIX  _m649p
00176 #elif defined (__AVR_ATmega6490__)
00177 # define _EEPROM_SUFFIX  _m6490
00178 #elif defined (__AVR_ATmega6490A__)
00179 # define _EEPROM_SUFFIX  _m6490a
00180 #elif defined (__AVR_ATmega6490P__)
00181 # define _EEPROM_SUFFIX  _m6490p
00182 #elif defined (__AVR_ATmega103__)
00183 # define _EEPROM_SUFFIX  _m103
00184 #elif defined (__AVR_ATmega32__)
00185 # define _EEPROM_SUFFIX  _m32
00186 #elif defined (__AVR_ATmega32A__)
00187 # define _EEPROM_SUFFIX  _m32a
00188 #elif defined (__AVR_ATmega323__)
00189 # define _EEPROM_SUFFIX  _m323
00190 #elif defined (__AVR_ATmega324A__)
00191 # define _EEPROM_SUFFIX  _m324a
00192 #elif defined (__AVR_ATmega324P__)
00193 # define _EEPROM_SUFFIX  _m324p
00194 #elif defined (__AVR_ATmega324PA__)
00195 # define _EEPROM_SUFFIX  _m324pa
00196 #elif defined (__AVR_ATmega325__)
00197 # define _EEPROM_SUFFIX  _m325
00198 #elif defined (__AVR_ATmega325A__)
00199 # define _EEPROM_SUFFIX  _m325a
00200 #elif defined (__AVR_ATmega325P__)
00201 # define _EEPROM_SUFFIX  _m325p
00202 #elif defined (__AVR_ATmega325PA__)
00203 # define _EEPROM_SUFFIX  _m325pa 
00204 #elif defined (__AVR_ATmega3250__)
00205 # define _EEPROM_SUFFIX  _m3250
00206 #elif defined (__AVR_ATmega3250A__)
00207 # define _EEPROM_SUFFIX  _m3250a
00208 #elif defined (__AVR_ATmega3250P__)
00209 # define _EEPROM_SUFFIX  _m3250p
00210 #elif defined (__AVR_ATmega3250PA__)
00211 # define _EEPROM_SUFFIX  _m3250pa
00212 #elif defined (__AVR_ATmega328__)
00213 # define _EEPROM_SUFFIX  _m328
00214 #elif defined (__AVR_ATmega328P__)
00215 # define _EEPROM_SUFFIX  _m328p
00216 #elif defined (__AVR_ATmega329__)
00217 # define _EEPROM_SUFFIX  _m329
00218 #elif defined (__AVR_ATmega329A__)
00219 # define _EEPROM_SUFFIX  _m329a
00220 #elif defined (__AVR_ATmega329P__)
00221 # define _EEPROM_SUFFIX  _m329p
00222 #elif defined (__AVR_ATmega329PA__)
00223 # define _EEPROM_SUFFIX  _m329pa
00224 #elif defined (__AVR_ATmega3290__)
00225 # define _EEPROM_SUFFIX  _m3290
00226 #elif defined (__AVR_ATmega3290A__)
00227 # define _EEPROM_SUFFIX  _m3290a
00228 #elif defined (__AVR_ATmega3290P__)
00229 # define _EEPROM_SUFFIX  _m3290p
00230 #elif defined (__AVR_ATmega3290PA__)
00231 # define _EEPROM_SUFFIX  _m3290pa
00232 #elif defined (__AVR_ATmega32HVB__)
00233 # define _EEPROM_SUFFIX  _m32hvb
00234 #elif defined (__AVR_ATmega32HVBrevB__)
00235 # define _EEPROM_SUFFIX  _m32hvbrevb
00236 #elif defined (__AVR_ATmega64HVE__)
00237 # define _EEPROM_SUFFIX  _m64hve
00238 #elif defined (__AVR_ATmega64HVE2__)
00239 # define _EEPROM_SUFFIX  _m64hve2
00240 #elif defined (__AVR_ATmega406__)
00241 # define _EEPROM_SUFFIX  _m406
00242 #elif defined (__AVR_ATmega16__)
00243 # define _EEPROM_SUFFIX  _m16
00244 #elif defined (__AVR_ATmega16A__)
00245 # define _EEPROM_SUFFIX  _m16a
00246 #elif defined (__AVR_ATmega161__)
00247 # define _EEPROM_SUFFIX  _m161
00248 #elif defined (__AVR_ATmega162__)
00249 # define _EEPROM_SUFFIX  _m162
00250 #elif defined (__AVR_ATmega163__)
00251 # define _EEPROM_SUFFIX  _m163
00252 #elif defined (__AVR_ATmega164__)
00253 # define _EEPROM_SUFFIX  _m164
00254 #elif defined (__AVR_ATmega164P__)
00255 # define _EEPROM_SUFFIX  _m164p
00256 #elif defined (__AVR_ATmega164PA__)
00257 # define _EEPROM_SUFFIX  _m164pa
00258 #elif defined (__AVR_ATmega165__)
00259 # define _EEPROM_SUFFIX  _m165
00260 #elif defined (__AVR_ATmega165A__)
00261 # define _EEPROM_SUFFIX  _m165a
00262 #elif defined (__AVR_ATmega165P__)
00263 # define _EEPROM_SUFFIX  _m165p
00264 #elif defined (__AVR_ATmega165PA__)
00265 # define _EEPROM_SUFFIX  _m165pa
00266 #elif defined (__AVR_ATmega168__)
00267 # define _EEPROM_SUFFIX  _m168
00268 #elif defined (__AVR_ATmega168A__)
00269 # define _EEPROM_SUFFIX  _m168a
00270 #elif defined (__AVR_ATmega168P__)
00271 # define _EEPROM_SUFFIX  _m168p
00272 #elif defined (__AVR_ATmega168PA__)
00273 # define _EEPROM_SUFFIX  _m168pa
00274 #elif defined (__AVR_ATmega169__)
00275 # define _EEPROM_SUFFIX  _m169
00276 #elif defined (__AVR_ATmega169A__)
00277 # define _EEPROM_SUFFIX  _m169a
00278 #elif defined (__AVR_ATmega169P__)
00279 # define _EEPROM_SUFFIX  _m169p
00280 #elif defined (__AVR_ATmega169PA__)
00281 # define _EEPROM_SUFFIX  _m169pa
00282 #elif defined (__AVR_ATmega8HVA__)
00283 # define _EEPROM_SUFFIX  _m8hva
00284 #elif defined (__AVR_ATmega16HVA__)
00285 # define _EEPROM_SUFFIX  _m16hva
00286 #elif defined (__AVR_ATmega16HVA2__)
00287 # define _EEPROM_SUFFIX  _m16hva2
00288 #elif defined (__AVR_ATmega16HVB__)
00289 # define _EEPROM_SUFFIX  _m16hvb
00290 #elif defined (__AVR_ATmega16HVBrevB__)
00291 # define _EEPROM_SUFFIX  _m16hvbrevb
00292 #elif defined (__AVR_ATmega8__)
00293 # define _EEPROM_SUFFIX  _m8
00294 #elif defined (__AVR_ATmega8A__)
00295 # define _EEPROM_SUFFIX  _m8a
00296 #elif defined (__AVR_ATmega48__)
00297 # define _EEPROM_SUFFIX  _m48
00298 #elif defined (__AVR_ATmega48A__)
00299 # define _EEPROM_SUFFIX  _m48a
00300 #elif defined (__AVR_ATmega48PA__)
00301 # define _EEPROM_SUFFIX  _m48pa
00302 #elif defined (__AVR_ATmega48P__)
00303 # define _EEPROM_SUFFIX  _m48p
00304 #elif defined (__AVR_ATmega88__)
00305 # define _EEPROM_SUFFIX  _m88
00306 #elif defined (__AVR_ATmega88A__)
00307 # define _EEPROM_SUFFIX  _m88a
00308 #elif defined (__AVR_ATmega88P__)
00309 # define _EEPROM_SUFFIX  _m88p
00310 #elif defined (__AVR_ATmega88PA__)
00311 # define _EEPROM_SUFFIX  _m88pa
00312 #elif defined (__AVR_ATmega8515__)
00313 # define _EEPROM_SUFFIX  _m8515
00314 #elif defined (__AVR_ATmega8535__)
00315 # define _EEPROM_SUFFIX  _m8535
00316 #elif defined (__AVR_AT90S8535__)
00317 # define _EEPROM_SUFFIX  _8535
00318 #elif defined (__AVR_AT90C8534__)
00319 # define _EEPROM_SUFFIX  _8534
00320 #elif defined (__AVR_AT90S8515__)
00321 # define _EEPROM_SUFFIX  _8515
00322 #elif defined (__AVR_AT90S4434__)
00323 # define _EEPROM_SUFFIX  _4434
00324 #elif defined (__AVR_AT90S4433__)
00325 # define _EEPROM_SUFFIX  _4433
00326 #elif defined (__AVR_AT90S4414__)
00327 # define _EEPROM_SUFFIX  _4414
00328 #elif defined (__AVR_ATtiny22__)
00329 # define _EEPROM_SUFFIX _tn22
00330 #elif defined (__AVR_ATtiny26__)
00331 # define _EEPROM_SUFFIX _tn26
00332 #elif defined (__AVR_AT90S2343__)
00333 # define _EEPROM_SUFFIX  _2343
00334 #elif defined (__AVR_AT90S2333__)
00335 # define _EEPROM_SUFFIX  _2333
00336 #elif defined (__AVR_AT90S2323__)
00337 # define _EEPROM_SUFFIX  _2323
00338 #elif defined (__AVR_AT90S2313__)
00339 # define _EEPROM_SUFFIX  _2313
00340 #elif defined (__AVR_ATtiny2313__)
00341 # define _EEPROM_SUFFIX _tn2313
00342 #elif defined (__AVR_ATtiny2313A__)
00343 # define _EEPROM_SUFFIX _tn2313a
00344 #elif defined (__AVR_ATtiny4313__)
00345 # define _EEPROM_SUFFIX _tn4313
00346 #elif defined (__AVR_ATtiny13__)
00347 # define _EEPROM_SUFFIX _tn13
00348 #elif defined (__AVR_ATtiny13A__)
00349 # define _EEPROM_SUFFIX _tn13a
00350 #elif defined (__AVR_ATtiny25__)
00351 # define _EEPROM_SUFFIX _tn25
00352 #elif defined (__AVR_ATtiny45__)
00353 # define _EEPROM_SUFFIX _tn45
00354 #elif defined (__AVR_ATtiny85__)
00355 # define _EEPROM_SUFFIX _tn85
00356 #elif defined (__AVR_ATtiny24__)
00357 # define _EEPROM_SUFFIX _tn24
00358 #elif defined (__AVR_ATtiny24A__)
00359 # define _EEPROM_SUFFIX _tn24a
00360 #elif defined (__AVR_ATtiny44__)
00361 # define _EEPROM_SUFFIX _tn44
00362 #elif defined (__AVR_ATtiny44A__)
00363 # define _EEPROM_SUFFIX _tn44a
00364 #elif defined (__AVR_ATtiny441__)
00365 # define _EEPROM_SUFFIX _tn441
00366 #elif defined (__AVR_ATtiny84__)
00367 # define _EEPROM_SUFFIX _tn84
00368 #elif defined (__AVR_ATtiny84A__)
00369 # define _EEPROM_SUFFIX _tn84a
00370 #elif defined (__AVR_ATtiny841__)
00371 # define _EEPROM_SUFFIX _tn841
00372 #elif defined (__AVR_ATtiny261__)
00373 # define _EEPROM_SUFFIX _tn261
00374 #elif defined (__AVR_ATtiny261A__)
00375 # define _EEPROM_SUFFIX _tn261a
00376 #elif defined (__AVR_ATtiny461__)
00377 # define _EEPROM_SUFFIX _tn461
00378 #elif defined (__AVR_ATtiny461A__)
00379 # define _EEPROM_SUFFIX _tn461a
00380 #elif defined (__AVR_ATtiny861__)
00381 # define _EEPROM_SUFFIX _tn861
00382 #elif defined (__AVR_ATtiny861A__)
00383 # define _EEPROM_SUFFIX _tn861a
00384 #elif defined (__AVR_ATtiny43U__)
00385 # define _EEPROM_SUFFIX _tn43u
00386 #elif defined (__AVR_ATtiny48__)
00387 # define _EEPROM_SUFFIX _tn48
00388 #elif defined (__AVR_ATtiny828__)
00389 # define _EEPROM_SUFFIX _tn828
00390 #elif defined (__AVR_ATtiny88__)
00391 # define _EEPROM_SUFFIX _tn88
00392 #elif defined (__AVR_ATtiny87__)
00393 # define _EEPROM_SUFFIX _tn87
00394 #elif defined (__AVR_ATtiny167__)
00395 # define _EEPROM_SUFFIX _tn167
00396 #elif defined (__AVR_ATtiny1634__)
00397 # define _EEPROM_SUFFIX _tn1634
00398 #elif defined (__AVR_AT90SCR100__)
00399 # define _EEPROM_SUFFIX _90scr100
00400 #elif defined (__AVR_ATxmega16A4__)
00401 # define _EEPROM_SUFFIX   _x16a4
00402 #elif defined (__AVR_ATxmega16A4U__)
00403 # define _EEPROM_SUFFIX   _x16a4u
00404 #elif defined (__AVR_ATxmega16C4__)
00405 # define _EEPROM_SUFFIX   _x16c4
00406 #elif defined (__AVR_ATxmega16D4__)
00407 # define _EEPROM_SUFFIX   _x16d4
00408 #elif defined (__AVR_ATxmega32A4__)
00409 # define _EEPROM_SUFFIX   _x32a4
00410 #elif defined (__AVR_ATxmega32A4U__)
00411 # define _EEPROM_SUFFIX   _x32a4u
00412 #elif defined (__AVR_ATxmega32C3__)
00413 # define _EEPROM_SUFFIX   _x32c3
00414 #elif defined (__AVR_ATxmega32C4__)
00415 # define _EEPROM_SUFFIX   _x32c4
00416 #elif defined (__AVR_ATxmega32D3__)
00417 # define _EEPROM_SUFFIX   _x32d3
00418 #elif defined (__AVR_ATxmega32D4__)
00419 # define _EEPROM_SUFFIX   _x32d4
00420 #elif defined (__AVR_ATxmega8E5__)
00421 #define _EEPROM_SUFFIX    _x8e5
00422 #elif defined (__AVR_ATxmega16E5__)
00423 #define _EEPROM_SUFFIX    _x16e5
00424 #elif defined (__AVR_ATxmega32E5__)
00425 # define _EEPROM_SUFFIX   _x32e5
00426 #elif defined (__AVR_ATxmega64A1__)
00427 # define _EEPROM_SUFFIX   _x64a1
00428 #elif defined (__AVR_ATxmega64A1U__)
00429 # define _EEPROM_SUFFIX   _x64a1u
00430 #elif defined (__AVR_ATxmega64A3__)
00431 # define _EEPROM_SUFFIX   _x64a3
00432 #elif defined (__AVR_ATxmega64A3U__)
00433 # define _EEPROM_SUFFIX   _x64a3u
00434 #elif defined (__AVR_ATxmega64A4U__)
00435 # define _EEPROM_SUFFIX   _x64a4u
00436 #elif defined (__AVR_ATxmega64B1__)
00437 # define _EEPROM_SUFFIX   _x64b1
00438 #elif defined (__AVR_ATxmega64B3__)
00439 # define _EEPROM_SUFFIX   _x64b3
00440 #elif defined (__AVR_ATxmega64C3__)
00441 # define _EEPROM_SUFFIX   _x64c3
00442 #elif defined (__AVR_ATxmega64D3__)
00443 # define _EEPROM_SUFFIX   _x64d3
00444 #elif defined (__AVR_ATxmega64D4__)
00445 # define _EEPROM_SUFFIX   _x64d4
00446 #elif defined (__AVR_ATxmega128A1__)
00447 # define _EEPROM_SUFFIX   _x128a1
00448 #elif defined (__AVR_ATxmega128A1U__)
00449 # define _EEPROM_SUFFIX   _x128a1u
00450 #elif defined (__AVR_ATxmega128A4U__)
00451 # define _EEPROM_SUFFIX   _x128a4u
00452 #elif defined (__AVR_ATxmega128A3__)
00453 # define _EEPROM_SUFFIX   _x128a3
00454 #elif defined (__AVR_ATxmega128A3U__)
00455 # define _EEPROM_SUFFIX   _x128a3u
00456 #elif defined (__AVR_ATxmega128B1__)
00457 # define _EEPROM_SUFFIX   _x128b1
00458 #elif defined (__AVR_ATxmega128B3__)
00459 # define _EEPROM_SUFFIX   _x128b3
00460 #elif defined (__AVR_ATxmega128C3__)
00461 # define _EEPROM_SUFFIX   _x128c3
00462 #elif defined (__AVR_ATxmega128D3__)
00463 # define _EEPROM_SUFFIX   _x128d3
00464 #elif defined (__AVR_ATxmega128D4__)
00465 # define _EEPROM_SUFFIX   _x128d4
00466 #elif defined (__AVR_ATxmega192A3__)
00467 # define _EEPROM_SUFFIX   _x192a3
00468 #elif defined (__AVR_ATxmega192A3U__)
00469 # define _EEPROM_SUFFIX   _x192a3u
00470 #elif defined (__AVR_ATxmega192C3__)
00471 # define _EEPROM_SUFFIX   _x192c3
00472 #elif defined (__AVR_ATxmega192D3__)
00473 # define _EEPROM_SUFFIX   _x192d3
00474 #elif defined (__AVR_ATxmega256A3__)
00475 # define _EEPROM_SUFFIX   _x256a3
00476 #elif defined (__AVR_ATxmega256A3U__)
00477 # define _EEPROM_SUFFIX   _x256a3u
00478 #elif defined (__AVR_ATxmega256A3B__)
00479 # define _EEPROM_SUFFIX   _x256a3b
00480 #elif defined (__AVR_ATxmega256A3BU__)
00481 # define _EEPROM_SUFFIX   _x256a3bu
00482 #elif defined (__AVR_ATxmega256C3__)
00483 # define _EEPROM_SUFFIX   _x256c3
00484 #elif defined (__AVR_ATxmega256D3__)
00485 # define _EEPROM_SUFFIX   _x256d3
00486 #elif defined (__AVR_ATxmega384C3__)
00487 # define _EEPROM_SUFFIX   _x384c3
00488 #elif defined (__AVR_ATxmega384D3__)
00489 # define _EEPROM_SUFFIX   _x384d3
00490 #elif defined (__AVR_ATA5505__)
00491 # define _EEPROM_SUFFIX _a5505
00492 #elif defined (__AVR_ATA5272__)
00493 # define _EEPROM_SUFFIX _a5272
00494 #elif defined (__AVR_ATA6285__)
00495 # define _EEPROM_SUFFIX _a6285
00496 #elif defined (__AVR_ATA6286__)
00497 # define _EEPROM_SUFFIX _a6286
00498 #elif defined (__AVR_ATA6289__)
00499 # define _EEPROM_SUFFIX _a6289
00500 #elif defined (__AVR_ATA5790__)
00501 # define _EEPROM_SUFFIX _a5790
00502 #elif defined (__AVR_ATA5790N__)
00503 # define _EEPROM_SUFFIX _a5790n
00504 #elif defined (__AVR_ATA5795__)
00505 # define _EEPROM_SUFFIX _a5795
00506 #elif defined (__AVR_ATA5702M322__)
00507 # define _EEPROM_SUFFIX _a5702m322
00508 #elif defined (__AVR_ATA5782__)
00509 # define _EEPROM_SUFFIX _a5782
00510 #elif defined (__AVR_ATA5831__)
00511 # define _EEPROM_SUFFIX _a5831
00512 #elif defined (__AVR_ATA6612C__)
00513 # define _EEPROM_SUFFIX _a6612c
00514 #elif defined (__AVR_ATA6613C__)
00515 # define _EEPROM_SUFFIX _a6613c
00516 #elif defined (__AVR_ATA6614Q__)
00517 # define _EEPROM_SUFFIX _a6614q
00518 #elif defined (__AVR_ATA6616C__)
00519 # define _EEPROM_SUFFIX _a6616c
00520 #elif defined (__AVR_ATA6617C__)
00521 # define _EEPROM_SUFFIX _a6617c
00522 #elif defined (__AVR_ATA664251__)
00523 # define _EEPROM_SUFFIX _a664251
00524 /* avr1: the following only supported for assembler programs */
00525 #elif defined (__AVR_ATtiny28__)
00526 # define _EEPROM_SUFFIX _tn28
00527 #elif defined (__AVR_AT90S1200__)
00528 # define _EEPROM_SUFFIX  _1200
00529 #elif defined (__AVR_ATtiny15__)
00530 # define _EEPROM_SUFFIX _tn15
00531 #elif defined (__AVR_ATtiny12__)
00532 # define _EEPROM_SUFFIX _tn12
00533 #elif defined (__AVR_ATtiny11__)
00534 # define _EEPROM_SUFFIX _tn11
00535 #else
00536 # define _EEPROM_SUFFIX         _UNKNOWN
00537 #endif
00538 
00539 #define _EEPROM_CONCAT1(s1, s2)     s1 ## s2
00540 #define _EEPROM_CONCAT2(s1, s2)     _EEPROM_CONCAT1 (s1, s2)
00541 
00542 #define eeprom_read_byte      _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX)
00543 #define eeprom_read_word      _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX)
00544 #define eeprom_read_dword     _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX)
00545 #define eeprom_read_float     _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX)
00546 #define eeprom_read_block     _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX)
00547 
00548 #define eeprom_write_byte     _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX)
00549 #define eeprom_write_word     _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX)
00550 #define eeprom_write_dword    _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX)
00551 #define eeprom_write_float    _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX)
00552 #define eeprom_write_block    _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX)
00553 
00554 #define eeprom_update_byte    _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX)
00555 #define eeprom_update_word    _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX)
00556 #define eeprom_update_dword   _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX)
00557 #define eeprom_update_float   _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX)
00558 #define eeprom_update_block   _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX)
00559 
00560 #endif  /* !__DOXYGEN__ */
00561 
00562 #ifndef __ASSEMBLER__
00563 
00564 #include <stddef.h>     /* size_t */
00565 #include <stdint.h>
00566 
00567 /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
00568     \code #include <avr/eeprom.h> \endcode
00569 
00570     This header file declares the interface to some simple library
00571     routines suitable for handling the data EEPROM contained in the
00572     AVR microcontrollers.  The implementation uses a simple polled
00573     mode interface.  Applications that require interrupt-controlled
00574     EEPROM access to ensure that no time will be wasted in spinloops
00575     will have to deploy their own implementation.
00576 
00577     \par Notes:
00578 
00579     - In addition to the write functions there is a set of update ones.
00580     This functions read each byte first and skip the burning if the
00581     old value is the same with new.  The scaning direction is from
00582     high address to low, to obtain quick return in common cases.
00583 
00584     - All of the read/write functions first make sure the EEPROM is
00585     ready to be accessed.  Since this may cause long delays if a
00586     write operation is still pending, time-critical applications
00587     should first poll the EEPROM e. g. using eeprom_is_ready() before
00588     attempting any actual I/O.  But this functions are not wait until
00589     SELFPRGEN in SPMCSR becomes zero.  Do this manually, if your
00590     softwate contains the Flash burning.
00591 
00592     - As these functions modify IO registers, they are known to be
00593     non-reentrant.  If any of these functions are used from both,
00594     standard and interrupt context, the applications must ensure
00595     proper protection (e.g. by disabling interrupts before accessing
00596     them).
00597 
00598     - All write functions force erase_and_write programming mode.
00599     
00600     - For Xmega the EEPROM start address is 0, like other architectures.
00601     The reading functions add the 0x2000 value to use EEPROM mapping into
00602     data space.
00603  */
00604 
00605 #ifdef __cplusplus
00606 extern "C" {
00607 #endif
00608 
00609 #ifndef __ATTR_PURE__
00610 # ifdef  __DOXYGEN__
00611 #  define __ATTR_PURE__
00612 # else
00613 #  define __ATTR_PURE__  __attribute__((__pure__))
00614 # endif
00615 #endif
00616 
00617 /** \def EEMEM
00618     \ingroup avr_eeprom
00619     Attribute expression causing a variable to be allocated within the
00620     .eeprom section.    */
00621 #define EEMEM __attribute__((section(".eeprom")))
00622 
00623 /** \def eeprom_is_ready
00624     \ingroup avr_eeprom
00625     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
00626  */
00627 #if     defined (__DOXYGEN__)
00628 # define eeprom_is_ready()
00629 #elif   defined (__AVR_XMEGA__) && __AVR_XMEGA__
00630 # define eeprom_is_ready()      bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp)
00631 #elif   defined (DEECR)
00632 # define eeprom_is_ready()      bit_is_clear (DEECR, BSY)
00633 #elif   defined (EEPE)
00634 # define eeprom_is_ready()      bit_is_clear (EECR, EEPE)
00635 #else
00636 # define eeprom_is_ready()      bit_is_clear (EECR, EEWE)
00637 #endif
00638 
00639 
00640 /** \def eeprom_busy_wait
00641     \ingroup avr_eeprom
00642     Loops until the eeprom is no longer busy.
00643     \returns Nothing.
00644  */      
00645 #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
00646 
00647 
00648 /** \ingroup avr_eeprom
00649     Read one byte from EEPROM address \a __p.
00650  */
00651 uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__;
00652 
00653 /** \ingroup avr_eeprom
00654     Read one 16-bit word (little endian) from EEPROM address \a __p.
00655  */
00656 uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__;
00657 
00658 /** \ingroup avr_eeprom
00659     Read one 32-bit double word (little endian) from EEPROM address \a __p.
00660  */
00661 uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__;
00662 
00663 /** \ingroup avr_eeprom
00664     Read one float value (little endian) from EEPROM address \a __p.
00665  */
00666 float eeprom_read_float (const float *__p) __ATTR_PURE__;
00667 
00668 /** \ingroup avr_eeprom
00669     Read a block of \a __n bytes from EEPROM address \a __src to SRAM
00670     \a __dst.
00671  */
00672 void eeprom_read_block (void *__dst, const void *__src, size_t __n);
00673 
00674 
00675 /** \ingroup avr_eeprom
00676     Write a byte \a __value to EEPROM address \a __p.
00677  */
00678 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
00679 
00680 /** \ingroup avr_eeprom
00681     Write a word \a __value to EEPROM address \a __p.
00682  */
00683 void eeprom_write_word (uint16_t *__p, uint16_t __value);
00684 
00685 /** \ingroup avr_eeprom
00686     Write a 32-bit double word \a __value to EEPROM address \a __p.
00687  */
00688 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
00689 
00690 /** \ingroup avr_eeprom
00691     Write a float \a __value to EEPROM address \a __p.
00692  */
00693 void eeprom_write_float (float *__p, float __value);
00694 
00695 /** \ingroup avr_eeprom
00696     Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00697     \note The argument order is mismatch with common functions like strcpy().
00698  */
00699 void eeprom_write_block (const void *__src, void *__dst, size_t __n);
00700 
00701 
00702 /** \ingroup avr_eeprom
00703     Update a byte \a __value to EEPROM address \a __p.
00704  */
00705 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
00706 
00707 /** \ingroup avr_eeprom
00708     Update a word \a __value to EEPROM address \a __p.
00709  */
00710 void eeprom_update_word (uint16_t *__p, uint16_t __value);
00711 
00712 /** \ingroup avr_eeprom
00713     Update a 32-bit double word \a __value to EEPROM address \a __p.
00714  */
00715 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
00716 
00717 /** \ingroup avr_eeprom
00718     Update a float \a __value to EEPROM address \a __p.
00719  */
00720 void eeprom_update_float (float *__p, float __value);
00721 
00722 /** \ingroup avr_eeprom
00723     Update a block of \a __n bytes to EEPROM address \a __dst from \a __src.
00724     \note The argument order is mismatch with common functions like strcpy().
00725  */
00726 void eeprom_update_block (const void *__src, void *__dst, size_t __n);
00727 
00728 
00729 /** \name IAR C compatibility defines   */
00730 /*@{*/
00731 
00732 /** \def _EEPUT
00733     \ingroup avr_eeprom
00734     Write a byte to EEPROM. Compatibility define for IAR C.     */
00735 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00736 
00737 /** \def __EEPUT
00738     \ingroup avr_eeprom
00739     Write a byte to EEPROM. Compatibility define for IAR C.     */
00740 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
00741 
00742 /** \def _EEGET
00743     \ingroup avr_eeprom
00744     Read a byte from EEPROM. Compatibility define for IAR C.    */
00745 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00746 
00747 /** \def __EEGET
00748     \ingroup avr_eeprom
00749     Read a byte from EEPROM. Compatibility define for IAR C.    */
00750 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
00751 
00752 /*@}*/
00753 
00754 #ifdef __cplusplus
00755 }
00756 #endif
00757 
00758 #endif  /* !__ASSEMBLER__ */
00759 #endif  /* E2END || defined(__DOXYGEN__) || defined(__COMPILING_AVR_LIBC__) */
00760 #endif  /* !_AVR_EEPROM_H_ */

Automatically generated by Doxygen 1.6.1 on 25 Apr 2014.