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.