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

eeprom.h
1 /* Copyright (c) 2002, 2003, 2004, 2007 Marek Michalkiewicz
2  Copyright (c) 2005, 2006 Bjoern Haase
3  Copyright (c) 2008 Atmel Corporation
4  Copyright (c) 2008 Wouter van Gulik
5  Copyright (c) 2009 Dmitry Xmelkov
6  All rights reserved.
7 
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions are met:
10 
11  * Redistributions of source code must retain the above copyright
12  notice, this list of conditions and the following disclaimer.
13  * Redistributions in binary form must reproduce the above copyright
14  notice, this list of conditions and the following disclaimer in
15  the documentation and/or other materials provided with the
16  distribution.
17  * Neither the name of the copyright holders nor the names of
18  contributors may be used to endorse or promote products derived
19  from this software without specific prior written permission.
20 
21  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  POSSIBILITY OF SUCH DAMAGE. */
32 
33 /* $Id$ */
34 
35 #ifndef _AVR_EEPROM_H_
36 #define _AVR_EEPROM_H_ 1
37 
38 #include <avr/io.h>
39 
40 #if !E2END && !defined(__DOXYGEN__) && !defined(__COMPILING_AVR_LIBC__)
41 # warning "Device does not have EEPROM available."
42 #else
43 
44 #ifndef __DOXYGEN__
45 
46 #if defined (__AVR_AT94K__)
47 # define _EEPROM_SUFFIX _at94k
48 #elif defined (__AVR_AT43USB320__)
49 # define _EEPROM_SUFFIX _43u320
50 #elif defined (__AVR_AT43USB355__)
51 # define _EEPROM_SUFFIX _43u355
52 #elif defined (__AVR_AT76C711__)
53 # define _EEPROM_SUFFIX _76c711
54 #elif defined (__AVR_AT86RF401__)
55 # define _EEPROM_SUFFIX _86r401
56 #elif defined (__AVR_AT90PWM1__)
57 # define _EEPROM_SUFFIX _90pwm1
58 #elif defined (__AVR_AT90PWM2__)
59 # define _EEPROM_SUFFIX _90pwm2
60 #elif defined (__AVR_AT90PWM2B__)
61 # define _EEPROM_SUFFIX _90pwm2b
62 #elif defined (__AVR_AT90PWM3__)
63 # define _EEPROM_SUFFIX _90pwm3
64 #elif defined (__AVR_AT90PWM3B__)
65 # define _EEPROM_SUFFIX _90pwm3b
66 #elif defined (__AVR_AT90PWM216__)
67 # define _EEPROM_SUFFIX _90pwm216
68 #elif defined (__AVR_AT90PWM316__)
69 # define _EEPROM_SUFFIX _90pwm316
70 #elif defined (__AVR_AT90PWM161__)
71 # define _EEPROM_SUFFIX _90pwm161
72 #elif defined (__AVR_AT90PWM81__)
73 # define _EEPROM_SUFFIX _90pwm81
74 #elif defined (__AVR_ATmega16M1__)
75 # define _EEPROM_SUFFIX _m16m1
76 #elif defined (__AVR_ATmega8U2__)
77 # define _EEPROM_SUFFIX _m8u2
78 #elif defined (__AVR_ATmega16U2__)
79 # define _EEPROM_SUFFIX _m16u2
80 #elif defined (__AVR_ATmega16U4__)
81 # define _EEPROM_SUFFIX _m16u4
82 #elif defined (__AVR_ATmega32C1__)
83 # define _EEPROM_SUFFIX _m32c1
84 #elif defined (__AVR_ATmega32M1__)
85 # define _EEPROM_SUFFIX _m32m1
86 #elif defined (__AVR_ATmega32U2__)
87 # define _EEPROM_SUFFIX _m32u2
88 #elif defined (__AVR_ATmega32U4__)
89 # define _EEPROM_SUFFIX _m32u4
90 #elif defined (__AVR_ATmega32U6__)
91 # define _EEPROM_SUFFIX _m32u6
92 #elif defined (__AVR_ATmega64C1__)
93 # define _EEPROM_SUFFIX _m64c1
94 #elif defined (__AVR_ATmega64M1__)
95 # define _EEPROM_SUFFIX _m64m1
96 #elif defined (__AVR_ATmega128__)
97 # define _EEPROM_SUFFIX _m128
98 #elif defined (__AVR_ATmega128A__)
99 # define _EEPROM_SUFFIX _m128a
100 #elif defined (__AVR_ATmega1280__)
101 # define _EEPROM_SUFFIX _m1280
102 #elif defined (__AVR_ATmega1281__)
103 # define _EEPROM_SUFFIX _m1281
104 #elif defined (__AVR_ATmega1284__)
105 # define _EEPROM_SUFFIX _m1284
106 #elif defined (__AVR_ATmega1284P__)
107 # define _EEPROM_SUFFIX _m1284p
108 #elif defined (__AVR_ATmega128RFA1__)
109 # define _EEPROM_SUFFIX _m128rfa1
110 #elif defined (__AVR_ATmega128RFR2__)
111 # define _EEPROM_SUFFIX _m128rfr2
112 #elif defined (__AVR_ATmega1284RFR2__)
113 # define _EEPROM_SUFFIX _m1284rfr2
114 #elif defined (__AVR_ATmega256RFR2__)
115 #elif defined (__AVR_ATmega2564RFR2__)
116 # define _EEPROM_SUFFIX _m2564rfr2
117 # define _EEPROM_SUFFIX _m256rfr2
118 #elif defined (__AVR_ATmega2560__)
119 # define _EEPROM_SUFFIX _m2560
120 #elif defined (__AVR_ATmega2561__)
121 # define _EEPROM_SUFFIX _m2561
122 #elif defined (__AVR_AT90CAN32__)
123 # define _EEPROM_SUFFIX _can32
124 #elif defined (__AVR_AT90CAN64__)
125 # define _EEPROM_SUFFIX _can64
126 #elif defined (__AVR_AT90CAN128__)
127 # define _EEPROM_SUFFIX _can128
128 #elif defined (__AVR_AT90USB82__)
129 # define _EEPROM_SUFFIX _usb82
130 #elif defined (__AVR_AT90USB162__)
131 # define _EEPROM_SUFFIX _usb162
132 #elif defined (__AVR_AT90USB646__)
133 # define _EEPROM_SUFFIX _usb646
134 #elif defined (__AVR_AT90USB647__)
135 # define _EEPROM_SUFFIX _usb647
136 #elif defined (__AVR_AT90USB1286__)
137 # define _EEPROM_SUFFIX _usb1286
138 #elif defined (__AVR_AT90USB1287__)
139 # define _EEPROM_SUFFIX _usb1287
140 #elif defined (__AVR_ATmega64RFR2__)
141 # define _EEPROM_SUFFIX _m64rfr2
142 #elif defined (__AVR_ATmega644RFR2__)
143 # define _EEPROM_SUFFIX _m644rfr2
144 #elif defined (__AVR_ATmega64__)
145 # define _EEPROM_SUFFIX _m64
146 #elif defined (__AVR_ATmega64A__)
147 # define _EEPROM_SUFFIX _m64a
148 #elif defined (__AVR_ATmega640__)
149 # define _EEPROM_SUFFIX _m640
150 #elif defined (__AVR_ATmega644__)
151 # define _EEPROM_SUFFIX _m644
152 #elif defined (__AVR_ATmega644A__)
153 # define _EEPROM_SUFFIX _m644a
154 #elif defined (__AVR_ATmega644P__)
155 # define _EEPROM_SUFFIX _m644p
156 #elif defined (__AVR_ATmega644PA__)
157 # define _EEPROM_SUFFIX _m644pa
158 #elif defined (__AVR_ATmega645__)
159 # define _EEPROM_SUFFIX _m645
160 #elif defined (__AVR_ATmega645A__)
161 # define _EEPROM_SUFFIX _m645a
162 #elif defined (__AVR_ATmega645P__)
163 # define _EEPROM_SUFFIX _m645p
164 #elif defined (__AVR_ATmega6450__)
165 # define _EEPROM_SUFFIX _m6450
166 #elif defined (__AVR_ATmega6450A__)
167 # define _EEPROM_SUFFIX _m6450a
168 #elif defined (__AVR_ATmega6450P__)
169 # define _EEPROM_SUFFIX _m6450p
170 #elif defined (__AVR_ATmega649__)
171 # define _EEPROM_SUFFIX _m649
172 #elif defined (__AVR_ATmega649A__)
173 # define _EEPROM_SUFFIX _m649a
174 #elif defined (__AVR_ATmega649P__)
175 # define _EEPROM_SUFFIX _m649p
176 #elif defined (__AVR_ATmega6490__)
177 # define _EEPROM_SUFFIX _m6490
178 #elif defined (__AVR_ATmega6490A__)
179 # define _EEPROM_SUFFIX _m6490a
180 #elif defined (__AVR_ATmega6490P__)
181 # define _EEPROM_SUFFIX _m6490p
182 #elif defined (__AVR_ATmega103__)
183 # define _EEPROM_SUFFIX _m103
184 #elif defined (__AVR_ATmega32__)
185 # define _EEPROM_SUFFIX _m32
186 #elif defined (__AVR_ATmega32A__)
187 # define _EEPROM_SUFFIX _m32a
188 #elif defined (__AVR_ATmega323__)
189 # define _EEPROM_SUFFIX _m323
190 #elif defined (__AVR_ATmega324A__)
191 # define _EEPROM_SUFFIX _m324a
192 #elif defined (__AVR_ATmega324P__)
193 # define _EEPROM_SUFFIX _m324p
194 #elif defined (__AVR_ATmega324PA__)
195 # define _EEPROM_SUFFIX _m324pa
196 #elif defined (__AVR_ATmega325__)
197 # define _EEPROM_SUFFIX _m325
198 #elif defined (__AVR_ATmega325A__)
199 # define _EEPROM_SUFFIX _m325a
200 #elif defined (__AVR_ATmega325P__)
201 # define _EEPROM_SUFFIX _m325p
202 #elif defined (__AVR_ATmega325PA__)
203 # define _EEPROM_SUFFIX _m325pa
204 #elif defined (__AVR_ATmega3250__)
205 # define _EEPROM_SUFFIX _m3250
206 #elif defined (__AVR_ATmega3250A__)
207 # define _EEPROM_SUFFIX _m3250a
208 #elif defined (__AVR_ATmega3250P__)
209 # define _EEPROM_SUFFIX _m3250p
210 #elif defined (__AVR_ATmega3250PA__)
211 # define _EEPROM_SUFFIX _m3250pa
212 #elif defined (__AVR_ATmega328__)
213 # define _EEPROM_SUFFIX _m328
214 #elif defined (__AVR_ATmega328P__)
215 # define _EEPROM_SUFFIX _m328p
216 #elif defined (__AVR_ATmega329__)
217 # define _EEPROM_SUFFIX _m329
218 #elif defined (__AVR_ATmega329A__)
219 # define _EEPROM_SUFFIX _m329a
220 #elif defined (__AVR_ATmega329P__)
221 # define _EEPROM_SUFFIX _m329p
222 #elif defined (__AVR_ATmega329PA__)
223 # define _EEPROM_SUFFIX _m329pa
224 #elif defined (__AVR_ATmega3290__)
225 # define _EEPROM_SUFFIX _m3290
226 #elif defined (__AVR_ATmega3290A__)
227 # define _EEPROM_SUFFIX _m3290a
228 #elif defined (__AVR_ATmega3290P__)
229 # define _EEPROM_SUFFIX _m3290p
230 #elif defined (__AVR_ATmega3290PA__)
231 # define _EEPROM_SUFFIX _m3290pa
232 #elif defined (__AVR_ATmega32HVB__)
233 # define _EEPROM_SUFFIX _m32hvb
234 #elif defined (__AVR_ATmega32HVBREVB__)
235 # define _EEPROM_SUFFIX _m32hvbrevb
236 #elif defined (__AVR_ATmega64HVE__)
237 # define _EEPROM_SUFFIX _m64hve
238 #elif defined (__AVR_ATmega64HVE2__)
239 # define _EEPROM_SUFFIX _m64hve2
240 #elif defined (__AVR_ATmega406__)
241 # define _EEPROM_SUFFIX _m406
242 #elif defined (__AVR_ATmega16__)
243 # define _EEPROM_SUFFIX _m16
244 #elif defined (__AVR_ATmega16A__)
245 # define _EEPROM_SUFFIX _m16a
246 #elif defined (__AVR_ATmega161__)
247 # define _EEPROM_SUFFIX _m161
248 #elif defined (__AVR_ATmega162__)
249 # define _EEPROM_SUFFIX _m162
250 #elif defined (__AVR_ATmega163__)
251 # define _EEPROM_SUFFIX _m163
252 #elif defined (__AVR_ATmega164__)
253 # define _EEPROM_SUFFIX _m164
254 #elif defined (__AVR_ATmega164P__)
255 # define _EEPROM_SUFFIX _m164p
256 #elif defined (__AVR_ATmega164PA__)
257 # define _EEPROM_SUFFIX _m164pa
258 #elif defined (__AVR_ATmega165__)
259 # define _EEPROM_SUFFIX _m165
260 #elif defined (__AVR_ATmega165A__)
261 # define _EEPROM_SUFFIX _m165a
262 #elif defined (__AVR_ATmega165P__)
263 # define _EEPROM_SUFFIX _m165p
264 #elif defined (__AVR_ATmega165PA__)
265 # define _EEPROM_SUFFIX _m165pa
266 #elif defined (__AVR_ATmega168__)
267 # define _EEPROM_SUFFIX _m168
268 #elif defined (__AVR_ATmega168A__)
269 # define _EEPROM_SUFFIX _m168a
270 #elif defined (__AVR_ATmega168P__)
271 # define _EEPROM_SUFFIX _m168p
272 #elif defined (__AVR_ATmega168PA__)
273 # define _EEPROM_SUFFIX _m168pa
274 #elif defined (__AVR_ATmega168PB__)
275 # define _EEPROM_SUFFIX _m168pb
276 #elif defined (__AVR_ATmega169__)
277 # define _EEPROM_SUFFIX _m169
278 #elif defined (__AVR_ATmega169A__)
279 # define _EEPROM_SUFFIX _m169a
280 #elif defined (__AVR_ATmega169P__)
281 # define _EEPROM_SUFFIX _m169p
282 #elif defined (__AVR_ATmega169PA__)
283 # define _EEPROM_SUFFIX _m169pa
284 #elif defined (__AVR_ATmega8HVA__)
285 # define _EEPROM_SUFFIX _m8hva
286 #elif defined (__AVR_ATmega16HVA__)
287 # define _EEPROM_SUFFIX _m16hva
288 #elif defined (__AVR_ATmega16HVA2__)
289 # define _EEPROM_SUFFIX _m16hva2
290 #elif defined (__AVR_ATmega16HVB__)
291 # define _EEPROM_SUFFIX _m16hvb
292 #elif defined (__AVR_ATmega16HVBREVB__)
293 # define _EEPROM_SUFFIX _m16hvbrevb
294 #elif defined (__AVR_ATmega8__)
295 # define _EEPROM_SUFFIX _m8
296 #elif defined (__AVR_ATmega8A__)
297 # define _EEPROM_SUFFIX _m8a
298 #elif defined (__AVR_ATmega48__)
299 # define _EEPROM_SUFFIX _m48
300 #elif defined (__AVR_ATmega48A__)
301 # define _EEPROM_SUFFIX _m48a
302 #elif defined (__AVR_ATmega48PA__)
303 # define _EEPROM_SUFFIX _m48pa
304 #elif defined (__AVR_ATmega48PB__)
305 # define _EEPROM_SUFFIX _m48pb
306 #elif defined (__AVR_ATmega48P__)
307 # define _EEPROM_SUFFIX _m48p
308 #elif defined (__AVR_ATmega88__)
309 # define _EEPROM_SUFFIX _m88
310 #elif defined (__AVR_ATmega88A__)
311 # define _EEPROM_SUFFIX _m88a
312 #elif defined (__AVR_ATmega88P__)
313 # define _EEPROM_SUFFIX _m88p
314 #elif defined (__AVR_ATmega88PA__)
315 # define _EEPROM_SUFFIX _m88pa
316 #elif defined (__AVR_ATmega88PB__)
317 # define _EEPROM_SUFFIX _m88pb
318 #elif defined (__AVR_ATmega8515__)
319 # define _EEPROM_SUFFIX _m8515
320 #elif defined (__AVR_ATmega8535__)
321 # define _EEPROM_SUFFIX _m8535
322 #elif defined (__AVR_AT90S8535__)
323 # define _EEPROM_SUFFIX _8535
324 #elif defined (__AVR_AT90C8534__)
325 # define _EEPROM_SUFFIX _8534
326 #elif defined (__AVR_AT90S8515__)
327 # define _EEPROM_SUFFIX _8515
328 #elif defined (__AVR_AT90S4434__)
329 # define _EEPROM_SUFFIX _4434
330 #elif defined (__AVR_AT90S4433__)
331 # define _EEPROM_SUFFIX _4433
332 #elif defined (__AVR_AT90S4414__)
333 # define _EEPROM_SUFFIX _4414
334 #elif defined (__AVR_ATtiny22__)
335 # define _EEPROM_SUFFIX _tn22
336 #elif defined (__AVR_ATtiny26__)
337 # define _EEPROM_SUFFIX _tn26
338 #elif defined (__AVR_AT90S2343__)
339 # define _EEPROM_SUFFIX _2343
340 #elif defined (__AVR_AT90S2333__)
341 # define _EEPROM_SUFFIX _2333
342 #elif defined (__AVR_AT90S2323__)
343 # define _EEPROM_SUFFIX _2323
344 #elif defined (__AVR_AT90S2313__)
345 # define _EEPROM_SUFFIX _2313
346 #elif defined (__AVR_ATtiny2313__)
347 # define _EEPROM_SUFFIX _tn2313
348 #elif defined (__AVR_ATtiny2313A__)
349 # define _EEPROM_SUFFIX _tn2313a
350 #elif defined (__AVR_ATtiny4313__)
351 # define _EEPROM_SUFFIX _tn4313
352 #elif defined (__AVR_ATtiny13__)
353 # define _EEPROM_SUFFIX _tn13
354 #elif defined (__AVR_ATtiny13A__)
355 # define _EEPROM_SUFFIX _tn13a
356 #elif defined (__AVR_ATtiny25__)
357 # define _EEPROM_SUFFIX _tn25
358 #elif defined (__AVR_ATtiny45__)
359 # define _EEPROM_SUFFIX _tn45
360 #elif defined (__AVR_ATtiny85__)
361 # define _EEPROM_SUFFIX _tn85
362 #elif defined (__AVR_ATtiny24__)
363 # define _EEPROM_SUFFIX _tn24
364 #elif defined (__AVR_ATtiny24A__)
365 # define _EEPROM_SUFFIX _tn24a
366 #elif defined (__AVR_ATtiny44__)
367 # define _EEPROM_SUFFIX _tn44
368 #elif defined (__AVR_ATtiny44A__)
369 # define _EEPROM_SUFFIX _tn44a
370 #elif defined (__AVR_ATtiny441__)
371 # define _EEPROM_SUFFIX _tn441
372 #elif defined (__AVR_ATtiny84__)
373 # define _EEPROM_SUFFIX _tn84
374 #elif defined (__AVR_ATtiny84A__)
375 # define _EEPROM_SUFFIX _tn84a
376 #elif defined (__AVR_ATtiny841__)
377 # define _EEPROM_SUFFIX _tn841
378 #elif defined (__AVR_ATtiny261__)
379 # define _EEPROM_SUFFIX _tn261
380 #elif defined (__AVR_ATtiny261A__)
381 # define _EEPROM_SUFFIX _tn261a
382 #elif defined (__AVR_ATtiny461__)
383 # define _EEPROM_SUFFIX _tn461
384 #elif defined (__AVR_ATtiny461A__)
385 # define _EEPROM_SUFFIX _tn461a
386 #elif defined (__AVR_ATtiny861__)
387 # define _EEPROM_SUFFIX _tn861
388 #elif defined (__AVR_ATtiny861A__)
389 # define _EEPROM_SUFFIX _tn861a
390 #elif defined (__AVR_ATtiny43U__)
391 # define _EEPROM_SUFFIX _tn43u
392 #elif defined (__AVR_ATtiny48__)
393 # define _EEPROM_SUFFIX _tn48
394 #elif defined (__AVR_ATtiny828__)
395 # define _EEPROM_SUFFIX _tn828
396 #elif defined (__AVR_ATtiny88__)
397 # define _EEPROM_SUFFIX _tn88
398 #elif defined (__AVR_ATtiny87__)
399 # define _EEPROM_SUFFIX _tn87
400 #elif defined (__AVR_ATtiny167__)
401 # define _EEPROM_SUFFIX _tn167
402 #elif defined (__AVR_ATtiny1634__)
403 # define _EEPROM_SUFFIX _tn1634
404 #elif defined (__AVR_AT90SCR100__)
405 # define _EEPROM_SUFFIX _90scr100
406 #elif defined (__AVR_ATxmega16A4__)
407 # define _EEPROM_SUFFIX _x16a4
408 #elif defined (__AVR_ATxmega16A4U__)
409 # define _EEPROM_SUFFIX _x16a4u
410 #elif defined (__AVR_ATxmega16C4__)
411 # define _EEPROM_SUFFIX _x16c4
412 #elif defined (__AVR_ATxmega16D4__)
413 # define _EEPROM_SUFFIX _x16d4
414 #elif defined (__AVR_ATxmega32A4__)
415 # define _EEPROM_SUFFIX _x32a4
416 #elif defined (__AVR_ATxmega32A4U__)
417 # define _EEPROM_SUFFIX _x32a4u
418 #elif defined (__AVR_ATxmega32C3__)
419 # define _EEPROM_SUFFIX _x32c3
420 #elif defined (__AVR_ATxmega32C4__)
421 # define _EEPROM_SUFFIX _x32c4
422 #elif defined (__AVR_ATxmega32D3__)
423 # define _EEPROM_SUFFIX _x32d3
424 #elif defined (__AVR_ATxmega32D4__)
425 # define _EEPROM_SUFFIX _x32d4
426 #elif defined (__AVR_ATxmega8E5__)
427 #define _EEPROM_SUFFIX _x8e5
428 #elif defined (__AVR_ATxmega16E5__)
429 #define _EEPROM_SUFFIX _x16e5
430 #elif defined (__AVR_ATxmega32E5__)
431 # define _EEPROM_SUFFIX _x32e5
432 #elif defined (__AVR_ATxmega64A1__)
433 # define _EEPROM_SUFFIX _x64a1
434 #elif defined (__AVR_ATxmega64A1U__)
435 # define _EEPROM_SUFFIX _x64a1u
436 #elif defined (__AVR_ATxmega64A3__)
437 # define _EEPROM_SUFFIX _x64a3
438 #elif defined (__AVR_ATxmega64A3U__)
439 # define _EEPROM_SUFFIX _x64a3u
440 #elif defined (__AVR_ATxmega64A4U__)
441 # define _EEPROM_SUFFIX _x64a4u
442 #elif defined (__AVR_ATxmega64B1__)
443 # define _EEPROM_SUFFIX _x64b1
444 #elif defined (__AVR_ATxmega64B3__)
445 # define _EEPROM_SUFFIX _x64b3
446 #elif defined (__AVR_ATxmega64C3__)
447 # define _EEPROM_SUFFIX _x64c3
448 #elif defined (__AVR_ATxmega64D3__)
449 # define _EEPROM_SUFFIX _x64d3
450 #elif defined (__AVR_ATxmega64D4__)
451 # define _EEPROM_SUFFIX _x64d4
452 #elif defined (__AVR_ATxmega128A1__)
453 # define _EEPROM_SUFFIX _x128a1
454 #elif defined (__AVR_ATxmega128A1U__)
455 # define _EEPROM_SUFFIX _x128a1u
456 #elif defined (__AVR_ATxmega128A4U__)
457 # define _EEPROM_SUFFIX _x128a4u
458 #elif defined (__AVR_ATxmega128A3__)
459 # define _EEPROM_SUFFIX _x128a3
460 #elif defined (__AVR_ATxmega128A3U__)
461 # define _EEPROM_SUFFIX _x128a3u
462 #elif defined (__AVR_ATxmega128B1__)
463 # define _EEPROM_SUFFIX _x128b1
464 #elif defined (__AVR_ATxmega128B3__)
465 # define _EEPROM_SUFFIX _x128b3
466 #elif defined (__AVR_ATxmega128C3__)
467 # define _EEPROM_SUFFIX _x128c3
468 #elif defined (__AVR_ATxmega128D3__)
469 # define _EEPROM_SUFFIX _x128d3
470 #elif defined (__AVR_ATxmega128D4__)
471 # define _EEPROM_SUFFIX _x128d4
472 #elif defined (__AVR_ATxmega192A3__)
473 # define _EEPROM_SUFFIX _x192a3
474 #elif defined (__AVR_ATxmega192A3U__)
475 # define _EEPROM_SUFFIX _x192a3u
476 #elif defined (__AVR_ATxmega192C3__)
477 # define _EEPROM_SUFFIX _x192c3
478 #elif defined (__AVR_ATxmega192D3__)
479 # define _EEPROM_SUFFIX _x192d3
480 #elif defined (__AVR_ATxmega256A3__)
481 # define _EEPROM_SUFFIX _x256a3
482 #elif defined (__AVR_ATxmega256A3U__)
483 # define _EEPROM_SUFFIX _x256a3u
484 #elif defined (__AVR_ATxmega256A3B__)
485 # define _EEPROM_SUFFIX _x256a3b
486 #elif defined (__AVR_ATxmega256A3BU__)
487 # define _EEPROM_SUFFIX _x256a3bu
488 #elif defined (__AVR_ATxmega256C3__)
489 # define _EEPROM_SUFFIX _x256c3
490 #elif defined (__AVR_ATxmega256D3__)
491 # define _EEPROM_SUFFIX _x256d3
492 #elif defined (__AVR_ATxmega384C3__)
493 # define _EEPROM_SUFFIX _x384c3
494 #elif defined (__AVR_ATxmega384D3__)
495 # define _EEPROM_SUFFIX _x384d3
496 #elif defined (__AVR_ATA5505__)
497 # define _EEPROM_SUFFIX _a5505
498 #elif defined (__AVR_ATA5272__)
499 # define _EEPROM_SUFFIX _a5272
500 #elif defined (__AVR_ATA6285__)
501 # define _EEPROM_SUFFIX _a6285
502 #elif defined (__AVR_ATA6286__)
503 # define _EEPROM_SUFFIX _a6286
504 #elif defined (__AVR_ATA6289__)
505 # define _EEPROM_SUFFIX _a6289
506 #elif defined (__AVR_ATA5790__)
507 # define _EEPROM_SUFFIX _a5790
508 #elif defined (__AVR_ATA5790N__)
509 # define _EEPROM_SUFFIX _a5790n
510 #elif defined (__AVR_ATA5795__)
511 # define _EEPROM_SUFFIX _a5795
512 #elif defined (__AVR_ATA5702M322__)
513 # define _EEPROM_SUFFIX _a5702m322
514 #elif defined (__AVR_ATA5782__)
515 # define _EEPROM_SUFFIX _a5782
516 #elif defined (__AVR_ATA5831__)
517 # define _EEPROM_SUFFIX _a5831
518 #elif defined (__AVR_ATA6612C__)
519 # define _EEPROM_SUFFIX _a6612c
520 #elif defined (__AVR_ATA6613C__)
521 # define _EEPROM_SUFFIX _a6613c
522 #elif defined (__AVR_ATA6614Q__)
523 # define _EEPROM_SUFFIX _a6614q
524 #elif defined (__AVR_ATA6616C__)
525 # define _EEPROM_SUFFIX _a6616c
526 #elif defined (__AVR_ATA6617C__)
527 # define _EEPROM_SUFFIX _a6617c
528 #elif defined (__AVR_ATA664251__)
529 # define _EEPROM_SUFFIX _a664251
530 /* avr1: the following only supported for assembler programs */
531 #elif defined (__AVR_ATtiny28__)
532 # define _EEPROM_SUFFIX _tn28
533 #elif defined (__AVR_AT90S1200__)
534 # define _EEPROM_SUFFIX _1200
535 #elif defined (__AVR_ATtiny15__)
536 # define _EEPROM_SUFFIX _tn15
537 #elif defined (__AVR_ATtiny12__)
538 # define _EEPROM_SUFFIX _tn12
539 #elif defined (__AVR_ATtiny11__)
540 # define _EEPROM_SUFFIX _tn11
541 #else
542 # define _EEPROM_SUFFIX _UNKNOWN
543 #endif
544 
545 #define _EEPROM_CONCAT1(s1, s2) s1 ## s2
546 #define _EEPROM_CONCAT2(s1, s2) _EEPROM_CONCAT1 (s1, s2)
547 
548 #define eeprom_read_byte _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX)
549 #define eeprom_read_word _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX)
550 #define eeprom_read_dword _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX)
551 #define eeprom_read_float _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX)
552 #define eeprom_read_block _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX)
553 
554 #define eeprom_write_byte _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX)
555 #define eeprom_write_word _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX)
556 #define eeprom_write_dword _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX)
557 #define eeprom_write_float _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX)
558 #define eeprom_write_block _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX)
559 
560 #define eeprom_update_byte _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX)
561 #define eeprom_update_word _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX)
562 #define eeprom_update_dword _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX)
563 #define eeprom_update_float _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX)
564 #define eeprom_update_block _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX)
565 
566 #endif /* !__DOXYGEN__ */
567 
568 #ifndef __ASSEMBLER__
569 
570 #include <stddef.h> /* size_t */
571 #include <stdint.h>
572 
573 /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
574  \code #include <avr/eeprom.h> \endcode
575 
576  This header file declares the interface to some simple library
577  routines suitable for handling the data EEPROM contained in the
578  AVR microcontrollers. The implementation uses a simple polled
579  mode interface. Applications that require interrupt-controlled
580  EEPROM access to ensure that no time will be wasted in spinloops
581  will have to deploy their own implementation.
582 
583  \par Notes:
584 
585  - In addition to the write functions there is a set of update ones.
586  This functions read each byte first and skip the burning if the
587  old value is the same with new. The scaning direction is from
588  high address to low, to obtain quick return in common cases.
589 
590  - All of the read/write functions first make sure the EEPROM is
591  ready to be accessed. Since this may cause long delays if a
592  write operation is still pending, time-critical applications
593  should first poll the EEPROM e. g. using eeprom_is_ready() before
594  attempting any actual I/O. But this functions are not wait until
595  SELFPRGEN in SPMCSR becomes zero. Do this manually, if your
596  softwate contains the Flash burning.
597 
598  - As these functions modify IO registers, they are known to be
599  non-reentrant. If any of these functions are used from both,
600  standard and interrupt context, the applications must ensure
601  proper protection (e.g. by disabling interrupts before accessing
602  them).
603 
604  - All write functions force erase_and_write programming mode.
605 
606  - For Xmega the EEPROM start address is 0, like other architectures.
607  The reading functions add the 0x2000 value to use EEPROM mapping into
608  data space.
609  */
610 
611 #ifdef __cplusplus
612 extern "C" {
613 #endif
614 
615 #ifndef __ATTR_PURE__
616 # ifdef __DOXYGEN__
617 # define __ATTR_PURE__
618 # else
619 # define __ATTR_PURE__ __attribute__((__pure__))
620 # endif
621 #endif
622 
623 /** \def EEMEM
624  \ingroup avr_eeprom
625  Attribute expression causing a variable to be allocated within the
626  .eeprom section. */
627 #define EEMEM __attribute__((section(".eeprom")))
628 
629 /** \def eeprom_is_ready
630  \ingroup avr_eeprom
631  \returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
632  */
633 #if defined (__DOXYGEN__)
634 # define eeprom_is_ready()
635 #elif defined (__AVR_XMEGA__) && __AVR_XMEGA__
636 # define eeprom_is_ready() bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp)
637 #elif defined (DEECR)
638 # define eeprom_is_ready() bit_is_clear (DEECR, BSY)
639 #elif defined (EEPE)
640 # define eeprom_is_ready() bit_is_clear (EECR, EEPE)
641 #else
642 # define eeprom_is_ready() bit_is_clear (EECR, EEWE)
643 #endif
644 
645 
646 /** \def eeprom_busy_wait
647  \ingroup avr_eeprom
648  Loops until the eeprom is no longer busy.
649  \returns Nothing.
650  */
651 #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
652 
653 
654 /** \ingroup avr_eeprom
655  Read one byte from EEPROM address \a __p.
656  */
657 uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__;
658 
659 /** \ingroup avr_eeprom
660  Read one 16-bit word (little endian) from EEPROM address \a __p.
661  */
662 uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__;
663 
664 /** \ingroup avr_eeprom
665  Read one 32-bit double word (little endian) from EEPROM address \a __p.
666  */
667 uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__;
668 
669 /** \ingroup avr_eeprom
670  Read one float value (little endian) from EEPROM address \a __p.
671  */
672 float eeprom_read_float (const float *__p) __ATTR_PURE__;
673 
674 /** \ingroup avr_eeprom
675  Read a block of \a __n bytes from EEPROM address \a __src to SRAM
676  \a __dst.
677  */
678 void eeprom_read_block (void *__dst, const void *__src, size_t __n);
679 
680 
681 /** \ingroup avr_eeprom
682  Write a byte \a __value to EEPROM address \a __p.
683  */
684 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
685 
686 /** \ingroup avr_eeprom
687  Write a word \a __value to EEPROM address \a __p.
688  */
689 void eeprom_write_word (uint16_t *__p, uint16_t __value);
690 
691 /** \ingroup avr_eeprom
692  Write a 32-bit double word \a __value to EEPROM address \a __p.
693  */
694 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
695 
696 /** \ingroup avr_eeprom
697  Write a float \a __value to EEPROM address \a __p.
698  */
699 void eeprom_write_float (float *__p, float __value);
700 
701 /** \ingroup avr_eeprom
702  Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
703  \note The argument order is mismatch with common functions like strcpy().
704  */
705 void eeprom_write_block (const void *__src, void *__dst, size_t __n);
706 
707 
708 /** \ingroup avr_eeprom
709  Update a byte \a __value to EEPROM address \a __p.
710  */
711 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
712 
713 /** \ingroup avr_eeprom
714  Update a word \a __value to EEPROM address \a __p.
715  */
716 void eeprom_update_word (uint16_t *__p, uint16_t __value);
717 
718 /** \ingroup avr_eeprom
719  Update a 32-bit double word \a __value to EEPROM address \a __p.
720  */
721 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
722 
723 /** \ingroup avr_eeprom
724  Update a float \a __value to EEPROM address \a __p.
725  */
726 void eeprom_update_float (float *__p, float __value);
727 
728 /** \ingroup avr_eeprom
729  Update a block of \a __n bytes to EEPROM address \a __dst from \a __src.
730  \note The argument order is mismatch with common functions like strcpy().
731  */
732 void eeprom_update_block (const void *__src, void *__dst, size_t __n);
733 
734 
735 /** \name IAR C compatibility defines */
736 /*@{*/
737 
738 /** \def _EEPUT
739  \ingroup avr_eeprom
740  Write a byte to EEPROM. Compatibility define for IAR C. */
741 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
742 
743 /** \def __EEPUT
744  \ingroup avr_eeprom
745  Write a byte to EEPROM. Compatibility define for IAR C. */
746 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
747 
748 /** \def _EEGET
749  \ingroup avr_eeprom
750  Read a byte from EEPROM. Compatibility define for IAR C. */
751 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
752 
753 /** \def __EEGET
754  \ingroup avr_eeprom
755  Read a byte from EEPROM. Compatibility define for IAR C. */
756 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
757 
758 /*@}*/
759 
760 #ifdef __cplusplus
761 }
762 #endif
763 
764 #endif /* !__ASSEMBLER__ */
765 #endif /* E2END || defined(__DOXYGEN__) || defined(__COMPILING_AVR_LIBC__) */
766 #endif /* !_AVR_EEPROM_H_ */
void eeprom_update_block(const void *__src, void *__dst, size_t __n)
void eeprom_write_block(const void *__src, void *__dst, size_t __n)
void eeprom_update_word(uint16_t *__p, uint16_t __value)
void eeprom_write_byte(uint8_t *__p, uint8_t __value)
void eeprom_read_block(void *__dst, const void *__src, size_t __n)
void eeprom_write_dword(uint32_t *__p, uint32_t __value)
float eeprom_read_float(const float *__p) __ATTR_PURE__
void eeprom_update_dword(uint32_t *__p, uint32_t __value)
void eeprom_write_float(float *__p, float __value)
void eeprom_update_byte(uint8_t *__p, uint8_t __value)
unsigned char uint8_t
Definition: stdint.h:79
unsigned long int uint32_t
Definition: stdint.h:99
uint32_t eeprom_read_dword(const uint32_t *__p) __ATTR_PURE__
void eeprom_write_word(uint16_t *__p, uint16_t __value)
void eeprom_update_float(float *__p, float __value)
uint8_t eeprom_read_byte(const uint8_t *__p) __ATTR_PURE__
uint16_t eeprom_read_word(const uint16_t *__p) __ATTR_PURE__
unsigned int uint16_t
Definition: stdint.h:89

Automatically generated by Doxygen 1.8.9.1 on Thu May 7 2015.