Datasheet

21.9. Asynchronous Operation of the Timer/Counter
21.9.1. Asynchronous Operation of Timer/Counter0
When Timer/Counter0 operates asynchronously, some considerations must be taken.
Warning: When switching between asynchronous and synchronous clocking of Timer/Counter0, the
Timer Registers TCNT0, OCR0, and TCCR0 might be corrupted. A safe procedure for switching
clock source is:
1. Disable the Timer/Counter0 interrupts by clearing OCIE0 and TOIE0.
2. Select clock source by setting AS0 as appropriate.
3. Write new values to TCNT0, OCR0, and TCCR0.
4. To switch to asynchronous operation: Wait for TCN0UB, OCR0UB, and TCR0UB.
5. Clear the Timer/Counter0 Interrupt Flags.
6. Enable interrupts, if needed.
The Oscillator is optimized for use with a 32.768kHz watch crystal. Applying an external clock to the
TOSC1 pin may result in incorrect Timer/Counter0 operation. The CPU main clock frequency must
be more than four times the Oscillator frequency.
When writing to one of the registers TCNT0, OCR0, or TCCR0, the value is transferred to a
temporary register, and latched after two positive edges on TOSC1. The user should not write a
new value before the contents of the temporary register 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, the 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 enter sleep mode before the changes are effective. This is particularly
important if the Output Compare0 interrupt is used to wake up the device, since the Output
Compare function is disabled during writing to OCR0 or TCNT0. If the write cycle is not finished,
and the MCU enters sleep mode before the OCR0UB bit returns to zero, the device will never
receive a Compare Match interrupt, and the MCU will not wake up.
If Timer/Counter0 is used to wake the device up from Power-save or Extended Standby mode,
precautions must be taken if the user wants to re-enter one of these modes: The interrupt logic
needs one TOSC1 cycle to be reset. If the time between wake-up and re-entering sleep 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 or Extended Standby mode 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 or Extended Standby mode.
When the asynchronous operation is selected, the 32.768kHz Oscillator for Timer/Counter0 is
always running, except in Power-down and Standby modes. After a Power-up Reset or Wake-up
from Power-down or Standby mode, 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 or Standby mode. The
contents of all Timer/Counter0 Registers must be considered lost after a wake-up from Power-down
Atmel ATmega64A [DATASHEET]
Atmel-8160E-ATmega64A_Datasheet_Complete-09/2015
203