📄 eeprom.lst
字号:
166:C:/WinAVR/avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEWE)
167:C:/WinAVR/avr/include/avr/eeprom.h **** #elif defined(EEPE)
168:C:/WinAVR/avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEPE)
169:C:/WinAVR/avr/include/avr/eeprom.h **** #elif defined(DEECR) && defined(EEL)
170:C:/WinAVR/avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(DEECR, EEL)
171:C:/WinAVR/avr/include/avr/eeprom.h **** #else
172:C:/WinAVR/avr/include/avr/eeprom.h **** # error "No write enable bit known for this device's EEPROM."
173:C:/WinAVR/avr/include/avr/eeprom.h **** #endif
174:C:/WinAVR/avr/include/avr/eeprom.h ****
175:C:/WinAVR/avr/include/avr/eeprom.h **** /** \def eeprom_busy_wait
176:C:/WinAVR/avr/include/avr/eeprom.h **** \ingroup avr_eeprom
177:C:/WinAVR/avr/include/avr/eeprom.h ****
178:C:/WinAVR/avr/include/avr/eeprom.h **** Loops until the eeprom is no longer busy.
179:C:/WinAVR/avr/include/avr/eeprom.h ****
180:C:/WinAVR/avr/include/avr/eeprom.h **** \returns Nothing. */
181:C:/WinAVR/avr/include/avr/eeprom.h ****
182:C:/WinAVR/avr/include/avr/eeprom.h **** #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
183:C:/WinAVR/avr/include/avr/eeprom.h ****
184:C:/WinAVR/avr/include/avr/eeprom.h ****
185:C:/WinAVR/avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
186:C:/WinAVR/avr/include/avr/eeprom.h **** Read one byte from EEPROM address \c addr. */
187:C:/WinAVR/avr/include/avr/eeprom.h ****
188:C:/WinAVR/avr/include/avr/eeprom.h **** uint8_t
189:C:/WinAVR/avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr)
190:C:/WinAVR/avr/include/avr/eeprom.h **** {
191:C:/WinAVR/avr/include/avr/eeprom.h **** uint8_t result;
192:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile
193:C:/WinAVR/avr/include/avr/eeprom.h **** ( XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
194:C:/WinAVR/avr/include/avr/eeprom.h **** "mov %1,__tmp_reg__"
195:C:/WinAVR/avr/include/avr/eeprom.h **** : "+x" (addr),
196:C:/WinAVR/avr/include/avr/eeprom.h **** "=r" (result)
197:C:/WinAVR/avr/include/avr/eeprom.h **** : );
198:C:/WinAVR/avr/include/avr/eeprom.h **** return result;
199:C:/WinAVR/avr/include/avr/eeprom.h **** }
200:C:/WinAVR/avr/include/avr/eeprom.h ****
201:C:/WinAVR/avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
202:C:/WinAVR/avr/include/avr/eeprom.h **** Read one 16-bit word (little endian) from EEPROM address \c addr. */
203:C:/WinAVR/avr/include/avr/eeprom.h **** uint16_t
204:C:/WinAVR/avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr)
205:C:/WinAVR/avr/include/avr/eeprom.h **** {
206:C:/WinAVR/avr/include/avr/eeprom.h **** uint16_t result;
207:C:/WinAVR/avr/include/avr/eeprom.h ****
208:C:/WinAVR/avr/include/avr/eeprom.h **** asm (
209:C:/WinAVR/avr/include/avr/eeprom.h **** XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB
210:C:/WinAVR/avr/include/avr/eeprom.h **** : "+x" (addr),
211:C:/WinAVR/avr/include/avr/eeprom.h **** "=z" (result)
212:C:/WinAVR/avr/include/avr/eeprom.h **** : );
213:C:/WinAVR/avr/include/avr/eeprom.h **** return result;
214:C:/WinAVR/avr/include/avr/eeprom.h **** }
215:C:/WinAVR/avr/include/avr/eeprom.h ****
216:C:/WinAVR/avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
217:C:/WinAVR/avr/include/avr/eeprom.h **** Read a block of \c n bytes from EEPROM address \c pointer_eeprom to
218:C:/WinAVR/avr/include/avr/eeprom.h **** \c pointer_ram. For constant n <= 256 bytes a library function is used.
219:C:/WinAVR/avr/include/avr/eeprom.h **** For block sizes unknown at compile time or block sizes > 256 an inline
220:C:/WinAVR/avr/include/avr/eeprom.h **** loop is expanded. */
221:C:/WinAVR/avr/include/avr/eeprom.h ****
222:C:/WinAVR/avr/include/avr/eeprom.h **** void
223:C:/WinAVR/avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
224:C:/WinAVR/avr/include/avr/eeprom.h **** const void *pointer_eeprom,
225:C:/WinAVR/avr/include/avr/eeprom.h **** size_t n)
226:C:/WinAVR/avr/include/avr/eeprom.h **** {
227:C:/WinAVR/avr/include/avr/eeprom.h **** if (!__builtin_constant_p (n)
228:C:/WinAVR/avr/include/avr/eeprom.h **** || n > 256)
229:C:/WinAVR/avr/include/avr/eeprom.h **** {
230:C:/WinAVR/avr/include/avr/eeprom.h **** /* make sure size is a 16 bit variable. */
231:C:/WinAVR/avr/include/avr/eeprom.h **** uint16_t size = n;
232:C:/WinAVR/avr/include/avr/eeprom.h ****
233:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile (
234:C:/WinAVR/avr/include/avr/eeprom.h **** ".%=_start:" CR_TAB
235:C:/WinAVR/avr/include/avr/eeprom.h **** "sbiw %2,1" CR_TAB
236:C:/WinAVR/avr/include/avr/eeprom.h **** "brlt .%=_finished" CR_TAB
237:C:/WinAVR/avr/include/avr/eeprom.h **** XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
238:C:/WinAVR/avr/include/avr/eeprom.h **** "st z+,__tmp_reg__" CR_TAB
239:C:/WinAVR/avr/include/avr/eeprom.h **** "rjmp .%=_start" CR_TAB
240:C:/WinAVR/avr/include/avr/eeprom.h **** ".%=_finished:"
241:C:/WinAVR/avr/include/avr/eeprom.h **** : "=x" (pointer_eeprom),
242:C:/WinAVR/avr/include/avr/eeprom.h **** "=z" (pointer_ram),
243:C:/WinAVR/avr/include/avr/eeprom.h **** "+w" (size)
244:C:/WinAVR/avr/include/avr/eeprom.h **** : "x" (pointer_eeprom),
245:C:/WinAVR/avr/include/avr/eeprom.h **** "z" (pointer_ram)
246:C:/WinAVR/avr/include/avr/eeprom.h **** : "memory");
247:C:/WinAVR/avr/include/avr/eeprom.h **** }
248:C:/WinAVR/avr/include/avr/eeprom.h **** else
249:C:/WinAVR/avr/include/avr/eeprom.h **** {
250:C:/WinAVR/avr/include/avr/eeprom.h **** if (n != 0)
251:C:/WinAVR/avr/include/avr/eeprom.h **** {
252:C:/WinAVR/avr/include/avr/eeprom.h **** if (n == 256)
253:C:/WinAVR/avr/include/avr/eeprom.h **** {
254:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile (
255:C:/WinAVR/avr/include/avr/eeprom.h **** XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX
256:C:/WinAVR/avr/include/avr/eeprom.h **** : "+x" (pointer_eeprom),
257:C:/WinAVR/avr/include/avr/eeprom.h **** "=z" (pointer_ram)
258:C:/WinAVR/avr/include/avr/eeprom.h **** : "z" (pointer_ram)
259:C:/WinAVR/avr/include/avr/eeprom.h **** : "memory");
260:C:/WinAVR/avr/include/avr/eeprom.h **** }
261:C:/WinAVR/avr/include/avr/eeprom.h **** else
262:C:/WinAVR/avr/include/avr/eeprom.h **** {
263:C:/WinAVR/avr/include/avr/eeprom.h **** /* Needed in order to truncate to 8 bit. */
264:C:/WinAVR/avr/include/avr/eeprom.h **** uint8_t len;
265:C:/WinAVR/avr/include/avr/eeprom.h **** len = (uint8_t) n;
266:C:/WinAVR/avr/include/avr/eeprom.h ****
267:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile (
268:C:/WinAVR/avr/include/avr/eeprom.h **** "mov __zero_reg__,%2" CR_TAB
269:C:/WinAVR/avr/include/avr/eeprom.h **** XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX
270:C:/WinAVR/avr/include/avr/eeprom.h **** : "+x" (pointer_eeprom),
271:C:/WinAVR/avr/include/avr/eeprom.h **** "=z" (pointer_ram)
272:C:/WinAVR/avr/include/avr/eeprom.h **** : "r" (len),
273:C:/WinAVR/avr/include/avr/eeprom.h **** "z" (pointer_ram)
274:C:/WinAVR/avr/include/avr/eeprom.h **** : "memory");
275:C:/WinAVR/avr/include/avr/eeprom.h **** }
276:C:/WinAVR/avr/include/avr/eeprom.h **** }
277:C:/WinAVR/avr/include/avr/eeprom.h **** }
278:C:/WinAVR/avr/include/avr/eeprom.h **** }
279:C:/WinAVR/avr/include/avr/eeprom.h ****
280:C:/WinAVR/avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
281:C:/WinAVR/avr/include/avr/eeprom.h **** Write a byte \c value to EEPROM address \c addr. */
282:C:/WinAVR/avr/include/avr/eeprom.h ****
283:C:/WinAVR/avr/include/avr/eeprom.h **** void
284:C:/WinAVR/avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value)
285:C:/WinAVR/avr/include/avr/eeprom.h **** {
286:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile (
130 .LM4:
131 /* #APP */
132 000c 062E mov __tmp_reg__,r22
133 000e 00D0 rcall __eeprom_write_byte_1C1D1E
134 /* #NOAPP */
135 .LBE3:
136 .LBE2:
137 /* epilogue: frame size=0 */
138 0010 0895 ret
139 /* epilogue end (size=1) */
140 /* function Write_EEProm_byte size 12 (11) */
145 .Lscope0:
149 .global Write_EEProm_word
151 Write_EEProm_word:
153 .Ltext2:
27:driver/EEProm.c **** }
28:driver/EEProm.c **** eeprom_write_byte(pwr_addr,val);
29:driver/EEProm.c **** }
30:driver/EEProm.c **** //----------------------------------------------------------------
31:driver/EEProm.c **** void Write_EEProm_word(uint *pwr_addr,uint val)
32:driver/EEProm.c **** {
155 .LM5:
156 /* prologue: frame size=0 */
157 /* prologue end (size=0) */
158 0012 DC01 movw r26,r24
33:driver/EEProm.c **** while (!eeprom_is_ready())
34:driver/EEProm.c **** {
35:driver/EEProm.c **** wdt_reset();
160 .LM6:
161 0014 E19B sbis 60-0x20,1
162 0016 03C0 rjmp .L14
163 .L11:
165 .LM7:
166 /* #APP */
167 0018 A895 wdr
168 /* #NOAPP */
169 001a E199 sbic 60-0x20,1
170 001c FDCF rjmp .L11
171 .L14:
172 .LBB4:
173 .LBB5:
175 .Ltext3:
287:C:/WinAVR/avr/include/avr/eeprom.h **** "mov __tmp_reg__,%1" CR_TAB
288:C:/WinAVR/avr/include/avr/eeprom.h **** XCALL " __eeprom_write_byte_" _REG_LOCATION_SUFFIX
289:C:/WinAVR/avr/include/avr/eeprom.h **** : "+x" (addr)
290:C:/WinAVR/avr/include/avr/eeprom.h **** : "r" (value)
291:C:/WinAVR/avr/include/avr/eeprom.h **** : "memory"
292:C:/WinAVR/avr/include/avr/eeprom.h **** );
293:C:/WinAVR/avr/include/avr/eeprom.h **** }
294:C:/WinAVR/avr/include/avr/eeprom.h ****
295:C:/WinAVR/avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
296:C:/WinAVR/avr/include/avr/eeprom.h **** Write a word \c value to EEPROM address \c addr. */
297:C:/WinAVR/avr/include/avr/eeprom.h ****
298:C:/WinAVR/avr/include/avr/eeprom.h **** void
299:C:/WinAVR/avr/include/avr/eeprom.h **** eeprom_write_word (uint16_t *addr,uint16_t value)
300:C:/WinAVR/avr/include/avr/eeprom.h **** {
301:C:/WinAVR/avr/include/avr/eeprom.h **** asm volatile (
177 .LM8:
178 /* #APP */
179 001e 0B01 movw __tmp_reg__,r22
180 0020 00D0 rcall __eeprom_write_word_1C1D1E
181
182 /* #NOAPP */
183 .LBE5:
184 .LBE4:
185 /* epilogue: frame size=0 */
186 0022 0895 ret
187 /* epilogue end (size=1) */
188 /* function Write_EEProm_word size 14 (13) */
193 .Lscope1:
198 .global Write_EEProm_block
200 Write_EEProm_block:
202 .Ltext4:
36:driver/EEProm.c **** }
37:driver/EEProm.c **** eeprom_write_word(pwr_addr,val);
38:driver/EEProm.c **** }
39:driver/EEProm.c **** //----------------------------------------------------------------
40:driver/EEProm.c **** void Write_EEProm_block(const void *prd_addr,void *pwr_addr,uchar size)
41:driver/EEProm.c **** {
204 .LM9:
205 /* prologue: frame size=0 */
206 /* prologue end (size=0) */
207 0024 FC01 movw r30,r24
208 0026 DB01 movw r26,r22
42:driver/EEProm.c **** while (!eeprom_is_ready())
43:driver/EEProm.c **** {
44:driver/EEProm.c **** wdt_reset();
210 .LM10:
211 0028 E19B sbis 60-0x20,1
212 002a 03C0 rjmp .L27
213 .L18:
215 .LM11:
216 /* #APP */
217 002c A895 wdr
218 /* #NOAPP */
219 002e E199 sbic 60-0x20,1
220 0030 FDCF rjmp .L18
221 .L27:
222 .LBB6:
224 .Ltext5:
302:C:/WinAVR/avr/include/avr/eeprom.h **** #if __AVR_HAVE_MOVW__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -