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