Hallo, ich möchte gern das EEPROM eines Atmega644 beschreiben. Das klappt auch alles wunderbar. ABER, es dauert laut Datenblatt min 3,4ms. Leider wird per Timer jede ms ein Interreupt erzeugt. Jetzt steht aber im Tutorial, dass Interrupts global deaktiviert werden, wenn man mit den Funktionen eeprom_write_byte(&eeFooByte, myByte) arbeitet. Das wiederum würde mir bis zu 3 Interrupts verloren gehen lassen. Gibt es eine Möglichkeit dieses Problem irgendwie zu umgehen? Ingo
Wo genau steht das? Die interupts müssen nur zum initiieren des schreibens deaktiviert werden, das warten auf die fertigstellung (die 3,4ms) kann ohne interruptsprerre passieren.
Moin, wenn Du überhaupt nicht warten möchtest, Interrupt gesteuert schreiben. Im Anhang eine Anregung. MfG
Zitat:
Bei Nutzung des EEPROMs ist zu beachten, dass vor dem Zugriff auf diesen
Speicher abgefragt wird, ob der Controller die vorherige
EEPROM-Operation abgeschlossen hat. Die avr-libc-Funktionen beinhalten
diese Prüfung, man muss sie nicht selbst implementieren. Man sollte auch
verhindern, dass der Zugriff durch die Abarbeitung einer
Interrupt-Routine unterbrochen wird, da bestimme Befehlsabfolgen
vorgegeben sind, die innerhalb weniger Taktzyklen aufeinanderfolgen
müssen ("timed sequence"). Auch dies muss bei Nutzung der Funktionen aus
der avr-libc/eeprom.h-Datei nicht selbst implementiert werden. Innerhalb
der Funktionen werden Interrupts vor der "EEPROM-Sequenz" global
deaktiviert und im Anschluss, falls vorher auch schon eingeschaltet,
wieder aktiviert.
Zitat Ende,
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM
Im letzten Satz.
Ingo
Hier noch ne Idee: Wenns nötig ist, das EEPROM zu schreiben, Flag setzen und es innerhalb der Timer Routine machen. Ein weiteres Flag könnte das Schreiben so lange sperren, bis das EEPROM fertig ist, alles in der Timer ISR.
gIch les' da raus, dass nur die Kritische Sektion unter interruptsperre läuft, nicht aber das warten auf die beendigung der vorhergehenden Schreiboperation.
Läubi .. schrieb: > Ich les' da raus, dass nur die Kritische Sektion unter interruptsperre > läuft, nicht aber das warten auf die beendigung der vorhergehenden > Schreiboperation. Wäre mal interessant das rauszufinden was tatsächlich passiert. Ingo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.