AT90CAN128 broblem den EEPROM zu beschreiben

OP #2001664
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.
1
 void dr_eeprom_write(uint8_t *daten, uint16_t adresse)
2
{
3
  while(EECR & (1<<EEWE));/*Warten ob/das der vorherige Speicherzugriff beendet
4
                            ist*/
5
  EEAR = adresse;         /*Übergeben der Adresse */
6
  EEDR = *daten;          /*Übergeben der zu schreibenden Daten*/
7
  asm("cli");             /*Sperren aller Interrupte um ein sicheres Schreiben
8
                            zu gewährleisten*/
9
  EECR |= (1<<EEMWE);      /*Scharf machen der Schreibroutine*/
10
  EECR |= (1<<EEWE);       /*Starten des Schreibens des EEPROMs*/
11
  asm("sei");
12
}

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


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.
OP #2002364
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.