43
ATmega103(L)
0945G–09/01
have been transferred to its destination. Each of the three mentioned registers have
their individual temporary register, which means that e.g., writing to TCNT0 does not
disturb an OCR0 write in progress. To detect that a transfer to the destination
register has taken place, an Asynchronous Status Register (ASSR) has been
implemented.
•
When entering Power-save mode after having written to TCNT0, OCR0 or TCCR0,
the user must wait until the written register has been updated if Timer/Counter0 is
used to wake up the device. Otherwise, the MCU will go to sleep before the
changes have had any effect. This is extremely important if the Output Compare0
interrupt is used to wake up the device; Output Compare is disabled during write to
OCR0 or TCNT0. If the write cycle is not finished (i.e., the user goes to sleep before
the OCR0UB bit returns to zero), the device will never get a compare match and the
MCU will not wake up.
•
If Timer/Counter0 is used to wake up the device from Power-save mode,
precautions must be taken if the user wants to reenter Power-save mode: The
interrupt logic needs one TOSC1 cycle to get reset. If the time between wake-up
and reentering Power-save mode is less than one TOSC1 cycle, the interrupt will
not occur and the device will fail to wake up. If the user is in doubt whether the time
before re-entering Power-save is sufficient, the following algorithm can be used to
ensure that one TOSC1 cycle has elapsed:
1.
Write a value to TCCR0, TCNT0 or OCR0.
2.
Wait until the corresponding Update Busy flag in ASSR returns to zero.
3.
Enter Power-save mode.
•
When asynchronous operation is selected, the 32 kHz oscillator for Timer/Counter0
is always running, except in Power-down mode. After a power-up reset or wake-up
from power-down, the user should be aware of the fact that this oscillator might take
as long as one second to stabilize. The user is advised to wait for at least one
second before using Timer/Counter0 after power-up or wake-up from Power-down.
The content of all Timer/Counter0 registers must be considered lost after a wake-up
from Power-down due to the unstable clock signal upon start-up, no matter whether
the oscillator is in use or a clock signal is applied to the TOSC pin.
•
Description of wake-up from Power-save mode when the timer is clocked
asynchronously: When the interrupt condition is met, the wake-up process is started
on the following cycle of the timer clock, that is, the timer is always advanced by at
least one before the processor can read the counter value. To execute the
corresponding Timer/Counter0 interrupt routine, the global interrupt bit in SREG
must have been set. Otherwise, the part will still wake up from Power-down, but
continues to execute the Sleep command. The interrupt flags are updated three
processor cycles after the processor clock has started. During these cycles, the
processor executes instructions, but the interrupt condition is not readable and the
interrupt routine has not started yet.
•
During asynchronous operation, the synchronization of the interrupt flags for the
asynchronous timer takes three processor cycles plus one timer cycle. The timer is
therefore advanced by at least one before the processor can read the timer value
causing the setting of the interrupt flag. The output compare pin is changed on the
timer clock, and is not synchronized to the processor clock.
•
After waking up from Power-save mode with the asynchronous timer enabled, there
will be a short interval of which TCNT0 will read as the same value as before Power-
save mode was entered. After an edge on the asynchronous clock, TCNT0 will read
correctly. (The compare and overflow functions of the timer are not affected by this
behavior.) Safe procedure to ensure correct value is read: