mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90CAN128 broblem den EEPROM zu beschreiben


Autor: Tobias Korrmann (kurzschluss81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe ein Problem den EEPROM zu schreiben.
Verwendet wird ein AT90CAN128 mit externem 16 MHz Quarz.
Programmieren tu ich mit AVR Studio.
Ich verwende folgende Funktion welche ich aus dem Datenblatt des 
Prozessors entnommen habe.
 void dr_eeprom_write(uint8_t *daten, uint16_t adresse)
{
  while(EECR & (1<<EEWE));/*Warten ob/das der vorherige Speicherzugriff beendet
                            ist*/
  EEAR = adresse;         /*Übergeben der Adresse */
  EEDR = *daten;          /*Übergeben der zu schreibenden Daten*/
  asm("cli");             /*Sperren aller Interrupte um ein sicheres Schreiben
                            zu gewährleisten*/
  EECR |= (1<<EEMWE);      /*Scharf machen der Schreibroutine*/
  EECR |= (1<<EEWE);       /*Starten des Schreibens des EEPROMs*/
  asm("sei");
}

zum Lesen benutze ich diser Routine, auch aus dem Datenblatt
 void dr_eeprom_read(uint8_t *daten, uint16_t adresse)
{
  while(EECR & (1<<EEWE));/*Warten ob/das der vorherige Speicher zugriff beendet
                            ist*/
  EEAR = adresse;         /*Übergeben der Adresse */
  EECR |=(1<<EERE);       /*Initialisieren des EEPROM Lesens*/
  *daten = EEDR;          /*Übergeben des gelesenen Bytes */
}


Konkret funktioniert das schreiben von Daten nicht. Das lesen 
funktioniert. nur lese ich immer nur 0xFF auch wenn ich den EEPROM mit 
meinem Programmer auslese sehe ich nur 0xFF.

Die Projekteinstellungen habe ich überprüft und dort ist auch die 
Frequenz korrekt mit 16 MHz angegeben.


Hat jemand einen Tipp wo ich noch suchen müsste um meinen Fehler zu 
finden?

Wenn ich im Debugmodus im Einzelschrittbetrieb bis zu der Stelle 
mitgehen wo die Adresse und die Daten in die entsprechenden Register 
geschrieben werden sehe ich das alles korrekt läuft.

Autor: Tobias Korrmann (kurzschluss81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nachdem ich die Optimierung eingeschaltet(O3 oder Os) habe 
funktioniert das ganze.
In der Assembler Datei war zu erkennen das zwischen dem "scharf 
schalten" der Schreibfunktion und dem Starten des schreibens noch Code 
vom Compiler eingefügt wurde. Wiso weiß ich nicht, von Assempler habe 
ich so nicht die Ahnung als das ich diesen Genau Interpretieren kann.

Falls es jemanden interessiert kann ich den Assembler Code noch posten.

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.