EEPROM Schreibzugriff XMEGA

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • EEPROM Schreibzugriff XMEGA

      Hallo Zusammen,
      vor vielen Jahren wurde ein ATMega Programm auf den XMEGA umgeschrieben. Aktuell wird einiges optimiert und da ist mir folgenden aufgefallen.

      Folgendermaßen wird in den EEPROM (config eeprom mapped) geschrieben:

      Source Code

      1. Disable Interrupts
      2. eeprom_byte1 = 1 : Waitms 10
      3. eeprom_byte2 = 2 : Waitms 10
      4. Enable Interrupts
      1) Ist es beim XMEGA nötig die Interrupts zu deaktivieren wenn in den EEPROM geschrieben wird? Ich dachte ich hätte etwas dazu in einer Apl.Note gesehen.
      2) Ist die Wartezeit von (10ms) zw. 2 Schreibvorgängen wichtig? Beim ATMega hat das die Stabilität enorm verbessert.

      Ich vermute, dass beides Rudimente aus der ATMega-Zeit sind. Wie seht ihr das?
    • FlourHorn wrote:

      Beim ATMega hat das die Stabilität enorm verbessert.
      Ist das bei Eeprom Variablen wichtig? Bei Writeeprom macht Bascom das selbständig, da brauchts keine waitms und kein Disable Interrupts. Bei "zu Fuß" schreiben in Asm müssen die Int geschaltet werden und auf die "fertig"melung abgewachtet werden um das nächste zu schreiben. Aber das sind keine 10ms. Oder doch - bei $Crystal=16000 :D
    • Danke für die Antwort.

      Ich habe folgendes vergessen:

      Source Code

      1. Dim eeprom_byte1 As ERAM Byte
      d.h. Bascom sollte wissen dass es sich um Variablen im EEPROM handelt. Daher denke ich (???), dass es keine 'zu Fuß'-Anwendung ist.

      Beim ATmega8 ist die EEPROM Programming Time = 8.5ms ( S.21) - unabhängig vom Takt CKSEL.

      Das Thema Disable Interrupts ist beim xmega wichtig wenn in den ISR auf den EEPROM zugegriffen wird. Da IMMER(???) Pages geladen werden. Wird der EEPROM in der ISR verwendet d.h. eine neu Page geladen arbeitet das Hauptprogram nach Rücksprung mit der falschen Page / den falschen Daten.
    • Seite 21? auf Seite 20 finde ich eine falsche I/O Multiplexing Tabelle. Dort hat er 12 PCINT :D
      (Atmel-8159F-8-bit AVR Microcontroller_Datasheet_Complete-09/2015)
      Seite 21 von 2486AA–AVR–02/2013 stehen die 8,5ms. Hier ist eine Mega8A der antwortet 4ms später wenn ein Word is Eeprom geschrieben wird. Vermutlich fragt Bascom das EEWE ab bevor es den Schreibautrag ausführt. Auch bei Eram Bytes :/ (Im Datenblatt vom 8A stehen auch die 8448 Takte. Das wären aber über 9ms (Takt 920 khz) :?:
      Kann der Mega8 auch den Takt während der Laufzeit ändern? -wie die Tinny
      Wäre es nur ein Teiler bräuchte er wohl keine 4 Calibration Bytes?
      Innerhalb einer Isr brauchen die Int nicht abgeschaltet werden? Er führt sie immer zu ende bevor das nächsten dran ist? Die schachteln sich nicht?

      FlourHorn wrote:

      arbeitet das Hauptprogram nach Rücksprung mit der falschen Page
      Ist das ein Bug oder muß man sich generell selbst um die Pages kümmern?

      PS in der Zwischenzeit ca 1000 EEprom schreib/lese Aufträge keine Auffäligkeit/Fehler