www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: avr-libc, eeprom Zugriffsgeschwindigkeit


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich jemand mal angesehen, wieviel länger der Lesezugriff auf ein 
Byte im EEPROM im Vergleich zum Zugriff aufs RAM dauert?
Ich habe im Datenblatt gefunden, dass auf jeden Fall 4 Zyklen Pause ist, 
aber was "kosten" die Routinen aus der AVR Bibliothek?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach mal ein Blick in die Quellen werfen:
/* uint8_t eeprom_read_byte (uint8_t EEMEM *addr);
 */

#define ret_lo  r24
#define  ret_hi  r25

ENTRY  eeprom_read_byte

#if  __AVR_XMEGA__  /* --------------------------------------------  */

  rcall  eeprom_mapen
  ld  ret_lo, Z
  clr  ret_hi
  ret

ENTRY  eeprom_mapen

  ; Load base address of NVM.
  ldi  ZL, lo8(NVM_BASE)
  ldi  ZH, hi8(NVM_BASE)

  ; Wait until NVM is not busy.
1:  ldd  r19, Z + NVM_STATUS - NVM_BASE
  sbrc  r19, NVM_NVMBUSY_bp
  rjmp  1b

  ; Enable EEPROM mapping into data space.
  ldd  r19, Z + NVM_CTRLB - NVM_BASE
  ori  r19, NVM_EEMAPEN_bm
  std  Z + NVM_CTRLB - NVM_BASE, r19

  ; Load Z with correct EEPROM address to read from data space.
  movw  ZL, addr_lo
  subi  ZL, lo8(-MAPPED_EEPROM_START)
  sbci  ZH, hi8(-MAPPED_EEPROM_START)

  ret

#else      /* --------------------------------------------  */

1:  sbic  _SFR_IO_ADDR (EECR), EEWE
  rjmp  1b
# ifdef   EEARH
#  if    E2END > 0xFF
  out  _SFR_IO_ADDR (EEARH), addr_hi
#  else
  ; This is for chips like ATmega48: the EEAR8 bit must be cleaned.
  out  _SFR_IO_ADDR (EEARH), __zero_reg__
#  endif
# endif
  out  _SFR_IO_ADDR (EEARL), addr_lo
  sbi  _SFR_IO_ADDR (EECR), EERE
  clr  ret_hi
  in  ret_lo, _SFR_IO_ADDR (EEDR)
  ret

#endif      /* --------------------------------------------  */

ENDFUNC

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.nongnu.org/avr-libc/user-manual/group__...
Nicht viel Info:
Beitrag "Geschwindigkeit von EEPROM Operationen"

Vllt. hat ja jemand Lust mal die Takte zu zählen, die 
eeprom_read_byte(const uint8_t *__p) braucht? :-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, das ist ja schon alles ASM. Ich habe keinen XMEGA aber 4k 
EEPROM, also EEARH. Damit sieht es wohl so aus:
#define ret_lo  r24
#define  ret_hi  r25

ENTRY  eeprom_read_byte
1:  sbic  _SFR_IO_ADDR (EECR), EEWE
  rjmp  1b

#  if    E2END > 0xFF
  out  _SFR_IO_ADDR (EEARH), addr_hi
#  else
  ; This is for chips like ATmega48: the EEAR8 bit must be cleaned.
  out  _SFR_IO_ADDR (EEARH), __zero_reg__
#  endif

  out  _SFR_IO_ADDR (EEARL), addr_lo
  sbi  _SFR_IO_ADDR (EECR), EERE
  clr  ret_hi
  in  ret_lo, _SFR_IO_ADDR (EEDR)
  ret

ENDFUNC

also vermutlich:

sbic
rjmp
out
out
sbi
clr
in
ret

Was macht das?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbic  1..3
rjmp  2
out   1
out   1
sbi   2
clr   1
in    1
ret   4
--------
   13..15 (+ 4 pause?)

Also bei 16 MHz 0,875 µs

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.