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.