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_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.