Forum: Mikrocontroller und Digitale Elektronik EEPROM schreiben ohne Unterbrechung


von Ingo (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Sauger (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

wenn Du überhaupt nicht warten möchtest, Interrupt gesteuert schreiben.

Im Anhang eine Anregung.

MfG

von Ingo (Gast)


Lesenswert?

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

von Ingo (Gast)


Lesenswert?

Hey Sauger,

das sieht ja sehr nett aus!



Ingo

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

gIch les' da raus, dass nur die Kritische Sektion unter interruptsperre 
läuft, nicht aber das warten auf die beendigung der vorhergehenden 
Schreiboperation.

von Ingo (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Na dann am besten mal in den libc source schauen.

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
Noch kein Account? Hier anmelden.