Thx für die Tipps !!
Hab jetzt funktionierenden Code:
Code:
#include <iom88.h>
#include <ina90.h>
#include "sw_uart.h"
void EEPROM_write(unsigned int adress, char data);
char EEPROM_read(unsigned int adress);
__task void main(void)
{
unsigned int adresse=0;
char datenbyte=0;
char byte1=0;
char byte2=0;
char byte3=0;
char byte4=0;
/* ins EEPROM schreiben */
adresse = 0x0000;
datenbyte = 0x41; // 'A'
EEPROM_write(adresse, datenbyte);
adresse = 0x0008;
datenbyte = 0x46; // 'F'
EEPROM_write(adresse, datenbyte);
adresse = 0x0010;
datenbyte = 0x46; // 'F'
EEPROM_write(adresse, datenbyte);
adresse = 0x0018;
datenbyte = 0x45; // 'E'
EEPROM_write(adresse, datenbyte);
/* AFFE wieder auslesen */
byte1 = EEPROM_read(0x0000);
byte2 = EEPROM_read(0x0008);
byte3 = EEPROM_read(0x0010);
byte4 = EEPROM_read(0x0018);
sw_uart_init();
__enable_interrupt(); // Interrupts erst zulassen, wenn EEPROM beschrieben ist !!
/* und ans Terminal senden */
while(1)
{
send_one_byte(byte1);
send_one_byte(byte2);
send_one_byte(byte3);
send_one_byte(byte4);
send_one_byte('\r');
send_one_byte('\n');
}
}
void EEPROM_write(unsigned int adress, char data)
{
/* Warten bis vorheriger Schreibvorgang beendet */
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der das Byte im EEPROM geschrieben werden soll
EEDR = data; // Datenbyte, welches im EEPROM gespeichert werden soll
EECR &=~ (1<<EEPM0); // Erase and Write in one Operation (siehe Datenblatt Programming Mode)
EECR &=~ (1<<EEPM1);
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE); // Starte EEPROM Write
}
char EEPROM_read(unsigned int adress)
{
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der Byte im EEPROM ausgelesen werden soll
EECR |= (1<<EERE); // Auslesen starten
return EEDR;
}
Hab jetzt zusätzlich noch die EEPMx in der eeprom_write Funktion eingestellt. Entsprechende Hexcodes für ASCII verwendet (damit wirklich AFFE im Terminal angezeigt wird). Enable Interrupts erst wenn EEPROM beschrieben wurde.
Und zu guter letzt noch vergessen Software UART zu initialisieren
Gruß schamp
Lesezeichen