Datasheet

Table Of Contents
When the write access time has elapsed, the EEWE bit is cleared by hardware. The user software can
poll this bit and wait for a zero before writing the next byte. When EEWE has been set, the CPU is halted
for two cycles before the next instruction is executed.
Bit 0 – EERE: EEPROM Read Enable
The EEPROM Read Enable Signal EERE is the read strobe to the EEPROM. When the correct address
is set up in the EEAR Register, the EERE bit must be written to a logic one to trigger the EEPROM read.
The EEPROM read access takes one instruction, and the requested data is available immediately. When
the EEPROM is read, the CPU is halted for four cycles before the next instruction is executed.
The user should poll the EEWE bit before starting the read operation. If a write operation is in progress, it
is neither possible to read the EEPROM, nor to change the EEAR Register.
The calibrated Oscillator is used to time the EEPROM accesses. The following table lists the typical
programming time for EEPROM access from the CPU.
Table 11-1. EEPROM Programming Time
Symbol Number of Calibrated RC Oscillator Cycles
(1)
Typ Programming Time
EEPROM Write (from CPU) 8448 8.5ms
Note:  1. Uses 1MHz clock, independent of CKSEL Fuse settings.
The following code examples show one assembly and one C function for writing to the EEPROM. The
examples assume that interrupts are controlled (for example by disabling interrupts globally) so that no
interrupts will occur during execution of these functions. The examples also assume that no Flash boot
loader is present in the software. If such code is present, the EEPROM write function must also wait for
any ongoing SPM command to finish.
Assembly Code Example
EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEWE
rjmp EEPROM_write
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Write data (r16) to data register
out EEDR,r16
; Write logical one to EEMWE
sbi EECR,EEMWE
; Start eeprom write by setting EEWE
sbi EECR,EEWE
ret
C Code Example
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
Atmel ATmega32A [DATASHEET]
Atmel-8155I-ATmega32A_Datasheet_Complete-08/2016
37