AVR Libc Home Page
AVR Libc Development Pages
Main Page
User Manual
Library Reference
FAQ
Alphabetical Index
Example Projects
include
avr
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_ */
Automatically generated by Doxygen 1.8.3.1 on Sat Jul 13 2013.