02. april 2008 - 17:35
Der er
1 kommentar og
1 løsning
Programere EEPROM til Atmega8515L
Hej eksperter (forhåbentlig)..
Jeg sidder og roder med et projekt i C, på en Atmel Atmega8515L (denne sad på boardet, og ligenu skal jeg bare i gang, så kan det være jeg skifter processor senere).
Er der nogen som ved hvordan man skriver og læser til EEPROM'en? jeg har databladet og der står følgende (tilsyneladende halve?) eksempel:
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
_CLI(); //disabler alle interrupts immidiately (har jeg læst
// idatablad)
EECR |= (1<<EEMWE); /* start EEPROM write */
EECR |= (1<<EEWE);
/*Det er så her jeg antager at man skal skrive til en adresse, og skrive noget data, men hvordan??, og hvorfor bliver _CLI() ikke kørt igen til sidst, interrupts'ne skal vel slåes til igen?*/
SREG = cSREG; /* restore SREG value (I-bit) */
05. april 2008 - 09:38
#2
//----HELLO EEPROM (eqipment: Stk500/Atmega8515L) --------
#include <avr/io.h>
#include <avr/eeprom.h>
#define switches PIND
#define leds PORTB
uint8_t EEMEM addr;
unsigned char testChar = 110; //= 0x6E = 0110 1110
uint8_t recieveDataByte;
enum
{
//setting up the leds, so we can use them as a 'display'
ld1 = (unsigned char) ~0x01,
ld2 = (unsigned char) ~0x02,
ld3 = (unsigned char) ~0x04,
ld4 = (unsigned char) ~0x08,
ld5 = (unsigned char) ~0x10,
ld6 = (unsigned char) ~0x20,
ld7 = (unsigned char) ~0x40,
ld8 = (unsigned char) ~0x80,
ldOff = 0xFF
};
void pause()
{
int i;
for (i = 0; i<5; i++);
}
int main()
{
DDRB = 0xFF; //PORTB out
eeprom_write_byte(&addr, testChar); //writing 'testChar' to the EEPROM on adr. 'addr'
pause(); //just to be safe
recieveDataByte = eeprom_read_byte((uint8_t*)&addr); //reading from the EEPROM at adr. 'addr'
leds = ~recieveDataByte; //show value on leds (should be 110 = 0x6E = 0110 1110)
return 0;
}