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: eeprom.h 2211 2011-02-14 14:04:25Z aboyapati $ */
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_AT90PWM81__)
71 # define _EEPROM_SUFFIX _90pwm81
72 #elif defined (__AVR_ATmega16M1__)
73 # define _EEPROM_SUFFIX _m16m1
74 #elif defined (__AVR_ATmega8U2__)
75 # define _EEPROM_SUFFIX _m8u2
76 #elif defined (__AVR_ATmega16U2__)
77 # define _EEPROM_SUFFIX _m16u2
78 #elif defined (__AVR_ATmega16U4__)
79 # define _EEPROM_SUFFIX _m16u4
80 #elif defined (__AVR_ATmega32C1__)
81 # define _EEPROM_SUFFIX _m32c1
82 #elif defined (__AVR_ATmega32M1__)
83 # define _EEPROM_SUFFIX _m32m1
84 #elif defined (__AVR_ATmega32U2__)
85 # define _EEPROM_SUFFIX _m32u2
86 #elif defined (__AVR_ATmega32U4__)
87 # define _EEPROM_SUFFIX _m32u4
88 #elif defined (__AVR_ATmega32U6__)
89 # define _EEPROM_SUFFIX _m32u6
90 #elif defined (__AVR_ATmega64C1__)
91 # define _EEPROM_SUFFIX _m64c1
92 #elif defined (__AVR_ATmega64M1__)
93 # define _EEPROM_SUFFIX _m64m1
94 #elif defined (__AVR_ATmega128__)
95 # define _EEPROM_SUFFIX _m128
96 #elif defined (__AVR_ATmega1280__)
97 # define _EEPROM_SUFFIX _m1280
98 #elif defined (__AVR_ATmega1281__)
99 # define _EEPROM_SUFFIX _m1281
100 #elif defined (__AVR_ATmega1284P__)
101 # define _EEPROM_SUFFIX _m1284p
102 #elif defined (__AVR_ATmega128RFA1__)
103 # define _EEPROM_SUFFIX _m128rfa1
104 #elif defined (__AVR_ATmega1284RFR2__)
105 # define _EEPROM_SUFFIX _m1284rfr2
106 #elif defined (__AVR_ATmega128RFR2__)
107 # define _EEPROM_SUFFIX _m128rfr2
108 #elif defined (__AVR_ATmega2564RFR2__)
109 # define _EEPROM_SUFFIX _m2564rfr2
110 #elif defined (__AVR_ATmega256RFR2__)
111 # define _EEPROM_SUFFIX _m256rfr2
112 #elif defined (__AVR_ATmega2560__)
113 # define _EEPROM_SUFFIX _m2560
114 #elif defined (__AVR_ATmega2561__)
115 # define _EEPROM_SUFFIX _m2561
116 #elif defined (__AVR_AT90CAN32__)
117 # define _EEPROM_SUFFIX _can32
118 #elif defined (__AVR_AT90CAN64__)
119 # define _EEPROM_SUFFIX _can64
120 #elif defined (__AVR_AT90CAN128__)
121 # define _EEPROM_SUFFIX _can128
122 #elif defined (__AVR_AT90USB82__)
123 # define _EEPROM_SUFFIX _usb82
124 #elif defined (__AVR_AT90USB162__)
125 # define _EEPROM_SUFFIX _usb162
126 #elif defined (__AVR_AT90USB646__)
127 # define _EEPROM_SUFFIX _usb646
128 #elif defined (__AVR_AT90USB647__)
129 # define _EEPROM_SUFFIX _usb647
130 #elif defined (__AVR_AT90USB1286__)
131 # define _EEPROM_SUFFIX _usb1286
132 #elif defined (__AVR_AT90USB1287__)
133 # define _EEPROM_SUFFIX _usb1287
134 #elif defined (__AVR_ATmega644RFR2__)
135 # define _EEPROM_SUFFIX _m644rfr2
136 #elif defined (__AVR_ATmega64RFR2__)
137 # define _EEPROM_SUFFIX _m64rfr2
138 #elif defined (__AVR_ATmega64__)
139 # define _EEPROM_SUFFIX _m64
140 #elif defined (__AVR_ATmega640__)
141 # define _EEPROM_SUFFIX _m640
142 #elif defined (__AVR_ATmega644__)
143 # define _EEPROM_SUFFIX _m644
144 #elif defined (__AVR_ATmega644A__)
145 # define _EEPROM_SUFFIX _m644a
146 #elif defined (__AVR_ATmega644P__)
147 # define _EEPROM_SUFFIX _m644p
148 #elif defined (__AVR_ATmega644PA__)
149 # define _EEPROM_SUFFIX _m644pa
150 #elif defined (__AVR_ATmega645__)
151 # define _EEPROM_SUFFIX _m645
152 #elif defined (__AVR_ATmega645A__)
153 # define _EEPROM_SUFFIX _m645a
154 #elif defined (__AVR_ATmega645P__)
155 # define _EEPROM_SUFFIX _m645p
156 #elif defined (__AVR_ATmega6450__)
157 # define _EEPROM_SUFFIX _m6450
158 #elif defined (__AVR_ATmega6450A__)
159 # define _EEPROM_SUFFIX _m6450a
160 #elif defined (__AVR_ATmega6450P__)
161 # define _EEPROM_SUFFIX _m6450p
162 #elif defined (__AVR_ATmega649__)
163 # define _EEPROM_SUFFIX _m649
164 #elif defined (__AVR_ATmega649A__)
165 # define _EEPROM_SUFFIX _m649a
166 #elif defined (__AVR_ATmega649P__)
167 # define _EEPROM_SUFFIX _m649p
168 #elif defined (__AVR_ATmega6490__)
169 # define _EEPROM_SUFFIX _m6490
170 #elif defined (__AVR_ATmega6490A__)
171 # define _EEPROM_SUFFIX _m6490a
172 #elif defined (__AVR_ATmega6490P__)
173 # define _EEPROM_SUFFIX _m6490p
174 #elif defined (__AVR_ATmega103__)
175 # define _EEPROM_SUFFIX _m103
176 #elif defined (__AVR_ATmega32__)
177 # define _EEPROM_SUFFIX _m32
178 #elif defined (__AVR_ATmega323__)
179 # define _EEPROM_SUFFIX _m323
180 #elif defined (__AVR_ATmega324A__)
181 # define _EEPROM_SUFFIX _m324a
182 #elif defined (__AVR_ATmega324P__)
183 # define _EEPROM_SUFFIX _m324p
184 #elif defined (__AVR_ATmega324PA__)
185 # define _EEPROM_SUFFIX _m324pa
186 #elif defined (__AVR_ATmega325__)
187 # define _EEPROM_SUFFIX _m325
188 #elif defined (__AVR_ATmega325A__)
189 # define _EEPROM_SUFFIX _m325a
190 #elif defined (__AVR_ATmega325P__)
191 # define _EEPROM_SUFFIX _m325p
192 #elif defined (__AVR_ATmega3250__)
193 # define _EEPROM_SUFFIX _m3250
194 #elif defined (__AVR_ATmega3250A__)
195 # define _EEPROM_SUFFIX _m3250a
196 #elif defined (__AVR_ATmega3250P__)
197 # define _EEPROM_SUFFIX _m3250p
198 #elif defined (__AVR_ATmega328__)
199 # define _EEPROM_SUFFIX _m328
200 #elif defined (__AVR_ATmega328P__)
201 # define _EEPROM_SUFFIX _m328p
202 #elif defined (__AVR_ATmega329__)
203 # define _EEPROM_SUFFIX _m329
204 #elif defined (__AVR_ATmega329A__)
205 # define _EEPROM_SUFFIX _m329a
206 #elif defined (__AVR_ATmega329P__)
207 # define _EEPROM_SUFFIX _m329p
208 #elif defined (__AVR_ATmega329PA__)
209 # define _EEPROM_SUFFIX _m329pa
210 #elif defined (__AVR_ATmega3290__)
211 # define _EEPROM_SUFFIX _m3290
212 #elif defined (__AVR_ATmega3290A__)
213 # define _EEPROM_SUFFIX _m3290a
214 #elif defined (__AVR_ATmega3290P__)
215 # define _EEPROM_SUFFIX _m3290p
216 #elif defined (__AVR_ATmega32HVB__)
217 # define _EEPROM_SUFFIX _m32hvb
218 #elif defined (__AVR_ATmega32HVBREVB__)
219 # define _EEPROM_SUFFIX _m32hvbrevb
220 #elif defined (__AVR_ATmega64HVE__)
221 # define _EEPROM_SUFFIX _m64hve
222 #elif defined (__AVR_ATmega406__)
223 # define _EEPROM_SUFFIX _m406
224 #elif defined (__AVR_ATmega16__)
225 # define _EEPROM_SUFFIX _m16
226 #elif defined (__AVR_ATmega16A__)
227 # define _EEPROM_SUFFIX _m16a
228 #elif defined (__AVR_ATmega161__)
229 # define _EEPROM_SUFFIX _m161
230 #elif defined (__AVR_ATmega162__)
231 # define _EEPROM_SUFFIX _m162
232 #elif defined (__AVR_ATmega163__)
233 # define _EEPROM_SUFFIX _m163
234 #elif defined (__AVR_ATmega164__)
235 # define _EEPROM_SUFFIX _m164
236 #elif defined (__AVR_ATmega164P__)
237 # define _EEPROM_SUFFIX _m164p
238 #elif defined (__AVR_ATmega165__)
239 # define _EEPROM_SUFFIX _m165
240 #elif defined (__AVR_ATmega165A__)
241 # define _EEPROM_SUFFIX _m165a
242 #elif defined (__AVR_ATmega165P__)
243 # define _EEPROM_SUFFIX _m165p
244 #elif defined (__AVR_ATmega168__)
245 # define _EEPROM_SUFFIX _m168
246 #elif defined (__AVR_ATmega168A__)
247 # define _EEPROM_SUFFIX _m168a
248 #elif defined (__AVR_ATmega168P__)
249 # define _EEPROM_SUFFIX _m168p
250 #elif defined (__AVR_ATmega169__)
251 # define _EEPROM_SUFFIX _m169
252 #elif defined (__AVR_ATmega169A__)
253 # define _EEPROM_SUFFIX _m169a
254 #elif defined (__AVR_ATmega169P__)
255 # define _EEPROM_SUFFIX _m169p
256 #elif defined (__AVR_ATmega169PA__)
257 # define _EEPROM_SUFFIX _m169pa
258 #elif defined (__AVR_ATmega8HVA__)
259 # define _EEPROM_SUFFIX _m8hva
260 #elif defined (__AVR_ATmega16HVA__)
261 # define _EEPROM_SUFFIX _m16hva
262 #elif defined (__AVR_ATmega16HVA2__)
263 # define _EEPROM_SUFFIX _m16hva2
264 #elif defined (__AVR_ATmega16HVB__)
265 # define _EEPROM_SUFFIX _m16hvb
266 #elif defined (__AVR_ATmega16HVBREVB__)
267 # define _EEPROM_SUFFIX _m16hvbrevb
268 #elif defined (__AVR_ATmega8__)
269 # define _EEPROM_SUFFIX _m8
270 #elif defined (__AVR_ATmega48__)
271 # define _EEPROM_SUFFIX _m48
272 #elif defined (__AVR_ATmega48A__)
273 # define _EEPROM_SUFFIX _m48a
274 #elif defined (__AVR_ATmega48P__)
275 # define _EEPROM_SUFFIX _m48p
276 #elif defined (__AVR_ATmega88__)
277 # define _EEPROM_SUFFIX _m88
278 #elif defined (__AVR_ATmega88A__)
279 # define _EEPROM_SUFFIX _m88a
280 #elif defined (__AVR_ATmega88P__)
281 # define _EEPROM_SUFFIX _m88p
282 #elif defined (__AVR_ATmega88PA__)
283 # define _EEPROM_SUFFIX _m88pa
284 #elif defined (__AVR_ATmega8515__)
285 # define _EEPROM_SUFFIX _m8515
286 #elif defined (__AVR_ATmega8535__)
287 # define _EEPROM_SUFFIX _m8535
288 #elif defined (__AVR_AT90S8535__)
289 # define _EEPROM_SUFFIX _8535
290 #elif defined (__AVR_AT90C8534__)
291 # define _EEPROM_SUFFIX _8534
292 #elif defined (__AVR_AT90S8515__)
293 # define _EEPROM_SUFFIX _8515
294 #elif defined (__AVR_AT90S4434__)
295 # define _EEPROM_SUFFIX _4434
296 #elif defined (__AVR_AT90S4433__)
297 # define _EEPROM_SUFFIX _4433
298 #elif defined (__AVR_AT90S4414__)
299 # define _EEPROM_SUFFIX _4414
300 #elif defined (__AVR_ATtiny22__)
301 # define _EEPROM_SUFFIX _tn22
302 #elif defined (__AVR_ATtiny26__)
303 # define _EEPROM_SUFFIX _tn26
304 #elif defined (__AVR_AT90S2343__)
305 # define _EEPROM_SUFFIX _2343
306 #elif defined (__AVR_AT90S2333__)
307 # define _EEPROM_SUFFIX _2333
308 #elif defined (__AVR_AT90S2323__)
309 # define _EEPROM_SUFFIX _2323
310 #elif defined (__AVR_AT90S2313__)
311 # define _EEPROM_SUFFIX _2313
312 #elif defined (__AVR_ATtiny2313__)
313 # define _EEPROM_SUFFIX _tn2313
314 #elif defined (__AVR_ATtiny2313A__)
315 # define _EEPROM_SUFFIX _tn2313a
316 #elif defined (__AVR_ATtiny4313__)
317 # define _EEPROM_SUFFIX _tn4313
318 #elif defined (__AVR_ATtiny13__)
319 # define _EEPROM_SUFFIX _tn13
320 #elif defined (__AVR_ATtiny13A__)
321 # define _EEPROM_SUFFIX _tn13a
322 #elif defined (__AVR_ATtiny25__)
323 # define _EEPROM_SUFFIX _tn25
324 #elif defined (__AVR_ATtiny45__)
325 # define _EEPROM_SUFFIX _tn45
326 #elif defined (__AVR_ATtiny85__)
327 # define _EEPROM_SUFFIX _tn85
328 #elif defined (__AVR_ATtiny24__)
329 # define _EEPROM_SUFFIX _tn24
330 #elif defined (__AVR_ATtiny24A__)
331 # define _EEPROM_SUFFIX _tn24a
332 #elif defined (__AVR_ATtiny44__)
333 # define _EEPROM_SUFFIX _tn44
334 #elif defined (__AVR_ATtiny44A__)
335 # define _EEPROM_SUFFIX _tn44a
336 #elif defined (__AVR_ATtiny84__)
337 # define _EEPROM_SUFFIX _tn84
338 #elif defined (__AVR_ATtiny84A__)
339 # define _EEPROM_SUFFIX _tn84a
340 #elif defined (__AVR_ATtiny261__)
341 # define _EEPROM_SUFFIX _tn261
342 #elif defined (__AVR_ATtiny261A__)
343 # define _EEPROM_SUFFIX _tn261a
344 #elif defined (__AVR_ATtiny461__)
345 # define _EEPROM_SUFFIX _tn461
346 #elif defined (__AVR_ATtiny461A__)
347 # define _EEPROM_SUFFIX _tn461a
348 #elif defined (__AVR_ATtiny861__)
349 # define _EEPROM_SUFFIX _tn861
350 #elif defined (__AVR_ATtiny861A__)
351 # define _EEPROM_SUFFIX _tn861a
352 #elif defined (__AVR_ATtiny43U__)
353 # define _EEPROM_SUFFIX _tn43u
354 #elif defined (__AVR_ATtiny48__)
355 # define _EEPROM_SUFFIX _tn48
356 #elif defined (__AVR_ATtiny88__)
357 # define _EEPROM_SUFFIX _tn88
358 #elif defined (__AVR_ATtiny87__)
359 # define _EEPROM_SUFFIX _tn87
360 #elif defined (__AVR_ATtiny167__)
361 # define _EEPROM_SUFFIX _tn167
362 #elif defined (__AVR_AT90SCR100__)
363 # define _EEPROM_SUFFIX _90scr100
364 #elif defined (__AVR_ATxmega16A4__)
365 # define _EEPROM_SUFFIX _x16a4
366 #elif defined (__AVR_ATxmega16D4__)
367 # define _EEPROM_SUFFIX _x16d4
368 #elif defined (__AVR_ATxmega32A4__)
369 # define _EEPROM_SUFFIX _x32a4
370 #elif defined (__AVR_ATxmega32D4__)
371 # define _EEPROM_SUFFIX _x32d4
372 #elif defined (__AVR_ATxmega64A1__)
373 # define _EEPROM_SUFFIX _x64a1
374 #elif defined (__AVR_ATxmega64A1U__)
375 # define _EEPROM_SUFFIX _x64a1u
376 #elif defined (__AVR_ATxmega64A3__)
377 # define _EEPROM_SUFFIX _x64a3
378 #elif defined (__AVR_ATxmega64D3__)
379 # define _EEPROM_SUFFIX _x64d3
380 #elif defined (__AVR_ATxmega128A1__)
381 # define _EEPROM_SUFFIX _x128a1
382 #elif defined (__AVR_ATxmega128A1U__)
383 # define _EEPROM_SUFFIX _x128a1u
384 #elif defined (__AVR_ATxmega128A3__)
385 # define _EEPROM_SUFFIX _x128a3
386 #elif defined (__AVR_ATxmega128D3__)
387 # define _EEPROM_SUFFIX _x128d3
388 #elif defined (__AVR_ATxmega192A3__)
389 # define _EEPROM_SUFFIX _x192a3
390 #elif defined (__AVR_ATxmega192D3__)
391 # define _EEPROM_SUFFIX _x192d3
392 #elif defined (__AVR_ATxmega256A3__)
393 # define _EEPROM_SUFFIX _x256a3
394 #elif defined (__AVR_ATxmega256A3B__)
395 # define _EEPROM_SUFFIX _x256a3b
396 #elif defined (__AVR_ATxmega256D3__)
397 # define _EEPROM_SUFFIX _x256d3
398 #elif defined (__AVR_ATA6289__)
399 # define _EEPROM_SUFFIX _a6289
400 /* avr1: the following only supported for assembler programs */
401 #elif defined (__AVR_ATtiny28__)
402 # define _EEPROM_SUFFIX _tn28
403 #elif defined (__AVR_AT90S1200__)
404 # define _EEPROM_SUFFIX _1200
405 #elif defined (__AVR_ATtiny15__)
406 # define _EEPROM_SUFFIX _tn15
407 #elif defined (__AVR_ATtiny12__)
408 # define _EEPROM_SUFFIX _tn12
409 #elif defined (__AVR_ATtiny11__)
410 # define _EEPROM_SUFFIX _tn11
411 #else
412 # define _EEPROM_SUFFIX _UNKNOWN
413 #endif
414 
415 #define _EEPROM_CONCAT1(s1, s2) s1 ## s2
416 #define _EEPROM_CONCAT2(s1, s2) _EEPROM_CONCAT1 (s1, s2)
417 
418 #define eeprom_read_byte _EEPROM_CONCAT2 (__eerd_byte, _EEPROM_SUFFIX)
419 #define eeprom_read_word _EEPROM_CONCAT2 (__eerd_word, _EEPROM_SUFFIX)
420 #define eeprom_read_dword _EEPROM_CONCAT2 (__eerd_dword, _EEPROM_SUFFIX)
421 #define eeprom_read_float _EEPROM_CONCAT2 (__eerd_float, _EEPROM_SUFFIX)
422 #define eeprom_read_block _EEPROM_CONCAT2 (__eerd_block, _EEPROM_SUFFIX)
423 
424 #define eeprom_write_byte _EEPROM_CONCAT2 (__eewr_byte, _EEPROM_SUFFIX)
425 #define eeprom_write_word _EEPROM_CONCAT2 (__eewr_word, _EEPROM_SUFFIX)
426 #define eeprom_write_dword _EEPROM_CONCAT2 (__eewr_dword, _EEPROM_SUFFIX)
427 #define eeprom_write_float _EEPROM_CONCAT2 (__eewr_float, _EEPROM_SUFFIX)
428 #define eeprom_write_block _EEPROM_CONCAT2 (__eewr_block, _EEPROM_SUFFIX)
429 
430 #define eeprom_update_byte _EEPROM_CONCAT2 (__eeupd_byte, _EEPROM_SUFFIX)
431 #define eeprom_update_word _EEPROM_CONCAT2 (__eeupd_word, _EEPROM_SUFFIX)
432 #define eeprom_update_dword _EEPROM_CONCAT2 (__eeupd_dword, _EEPROM_SUFFIX)
433 #define eeprom_update_float _EEPROM_CONCAT2 (__eeupd_float, _EEPROM_SUFFIX)
434 #define eeprom_update_block _EEPROM_CONCAT2 (__eeupd_block, _EEPROM_SUFFIX)
435 
436 #endif /* !__DOXYGEN__ */
437 
438 #ifndef __ASSEMBLER__
439 
440 #include <stddef.h> /* size_t */
441 #include <stdint.h>
442 
443 /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
444  \code #include <avr/eeprom.h> \endcode
445 
446  This header file declares the interface to some simple library
447  routines suitable for handling the data EEPROM contained in the
448  AVR microcontrollers. The implementation uses a simple polled
449  mode interface. Applications that require interrupt-controlled
450  EEPROM access to ensure that no time will be wasted in spinloops
451  will have to deploy their own implementation.
452 
453  \par Notes:
454 
455  - In addition to the write functions there is a set of update ones.
456  This functions read each byte first and skip the burning if the
457  old value is the same with new. The scaning direction is from
458  high address to low, to obtain quick return in common cases.
459 
460  - All of the read/write functions first make sure the EEPROM is
461  ready to be accessed. Since this may cause long delays if a
462  write operation is still pending, time-critical applications
463  should first poll the EEPROM e. g. using eeprom_is_ready() before
464  attempting any actual I/O. But this functions are not wait until
465  SELFPRGEN in SPMCSR becomes zero. Do this manually, if your
466  softwate contains the Flash burning.
467 
468  - As these functions modify IO registers, they are known to be
469  non-reentrant. If any of these functions are used from both,
470  standard and interrupt context, the applications must ensure
471  proper protection (e.g. by disabling interrupts before accessing
472  them).
473 
474  - All write functions force erase_and_write programming mode.
475 
476  - For Xmega the EEPROM start address is 0, like other architectures.
477  The reading functions add the 0x2000 value to use EEPROM mapping into
478  data space.
479  */
480 
481 #ifdef __cplusplus
482 extern "C" {
483 #endif
484 
485 #ifndef __ATTR_PURE__
486 # ifdef __DOXYGEN__
487 # define __ATTR_PURE__
488 # else
489 # define __ATTR_PURE__ __attribute__((__pure__))
490 # endif
491 #endif
492 
493 /** \def EEMEM
494  \ingroup avr_eeprom
495  Attribute expression causing a variable to be allocated within the
496  .eeprom section. */
497 #define EEMEM __attribute__((section(".eeprom")))
498 
499 /** \def eeprom_is_ready
500  \ingroup avr_eeprom
501  \returns 1 if EEPROM is ready for a new read/write operation, 0 if not.
502  */
503 #if defined (__DOXYGEN__)
504 # define eeprom_is_ready()
505 #elif defined (__AVR_XMEGA__) && __AVR_XMEGA__
506 # define eeprom_is_ready() bit_is_clear (NVM_STATUS, NVM_NVMBUSY_bp)
507 #elif defined (DEECR)
508 # define eeprom_is_ready() bit_is_clear (DEECR, BSY)
509 #elif defined (EEPE)
510 # define eeprom_is_ready() bit_is_clear (EECR, EEPE)
511 #else
512 # define eeprom_is_ready() bit_is_clear (EECR, EEWE)
513 #endif
514 
515 
516 /** \def eeprom_busy_wait
517  \ingroup avr_eeprom
518  Loops until the eeprom is no longer busy.
519  \returns Nothing.
520  */
521 #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
522 
523 
524 /** \ingroup avr_eeprom
525  Read one byte from EEPROM address \a __p.
526  */
527 uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__;
528 
529 /** \ingroup avr_eeprom
530  Read one 16-bit word (little endian) from EEPROM address \a __p.
531  */
532 uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__;
533 
534 /** \ingroup avr_eeprom
535  Read one 32-bit double word (little endian) from EEPROM address \a __p.
536  */
537 uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__;
538 
539 /** \ingroup avr_eeprom
540  Read one float value (little endian) from EEPROM address \a __p.
541  */
542 float eeprom_read_float (const float *__p) __ATTR_PURE__;
543 
544 /** \ingroup avr_eeprom
545  Read a block of \a __n bytes from EEPROM address \a __src to SRAM
546  \a __dst.
547  */
548 void eeprom_read_block (void *__dst, const void *__src, size_t __n);
549 
550 
551 /** \ingroup avr_eeprom
552  Write a byte \a __value to EEPROM address \a __p.
553  */
554 void eeprom_write_byte (uint8_t *__p, uint8_t __value);
555 
556 /** \ingroup avr_eeprom
557  Write a word \a __value to EEPROM address \a __p.
558  */
559 void eeprom_write_word (uint16_t *__p, uint16_t __value);
560 
561 /** \ingroup avr_eeprom
562  Write a 32-bit double word \a __value to EEPROM address \a __p.
563  */
564 void eeprom_write_dword (uint32_t *__p, uint32_t __value);
565 
566 /** \ingroup avr_eeprom
567  Write a float \a __value to EEPROM address \a __p.
568  */
569 void eeprom_write_float (float *__p, float __value);
570 
571 /** \ingroup avr_eeprom
572  Write a block of \a __n bytes to EEPROM address \a __dst from \a __src.
573  \note The argument order is mismatch with common functions like strcpy().
574  */
575 void eeprom_write_block (const void *__src, void *__dst, size_t __n);
576 
577 
578 /** \ingroup avr_eeprom
579  Update a byte \a __value to EEPROM address \a __p.
580  */
581 void eeprom_update_byte (uint8_t *__p, uint8_t __value);
582 
583 /** \ingroup avr_eeprom
584  Update a word \a __value to EEPROM address \a __p.
585  */
586 void eeprom_update_word (uint16_t *__p, uint16_t __value);
587 
588 /** \ingroup avr_eeprom
589  Update a 32-bit double word \a __value to EEPROM address \a __p.
590  */
591 void eeprom_update_dword (uint32_t *__p, uint32_t __value);
592 
593 /** \ingroup avr_eeprom
594  Update a float \a __value to EEPROM address \a __p.
595  */
596 void eeprom_update_float (float *__p, float __value);
597 
598 /** \ingroup avr_eeprom
599  Update a block of \a __n bytes to EEPROM address \a __dst from \a __src.
600  \note The argument order is mismatch with common functions like strcpy().
601  */
602 void eeprom_update_block (const void *__src, void *__dst, size_t __n);
603 
604 
605 /** \name IAR C compatibility defines */
606 /*@{*/
607 
608 /** \def _EEPUT
609  \ingroup avr_eeprom
610  Write a byte to EEPROM. Compatibility define for IAR C. */
611 #define _EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
612 
613 /** \def __EEPUT
614  \ingroup avr_eeprom
615  Write a byte to EEPROM. Compatibility define for IAR C. */
616 #define __EEPUT(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))
617 
618 /** \def _EEGET
619  \ingroup avr_eeprom
620  Read a byte from EEPROM. Compatibility define for IAR C. */
621 #define _EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
622 
623 /** \def __EEGET
624  \ingroup avr_eeprom
625  Read a byte from EEPROM. Compatibility define for IAR C. */
626 #define __EEGET(var, addr) (var) = eeprom_read_byte ((const uint8_t *)(addr))
627 
628 /*@}*/
629 
630 #ifdef __cplusplus
631 }
632 #endif
633 
634 #endif /* !__ASSEMBLER__ */
635 #endif /* E2END || defined(__DOXYGEN__) || defined(__COMPILING_AVR_LIBC__) */
636 #endif /* !_AVR_EEPROM_H_ */

Automatically generated by Doxygen 1.8.4 on Sun Oct 27 2013.