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


von Tobias K. (kurzschluss81)


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.

von Tobias K. (kurzschluss81)


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.

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.