
110
8018P–AVR–08/10
ATmega169P
the main code and the interrupt code update the temporary register, the main code must disable
the interrupts during the 16-bit access.
The following code examples show how to do an atomic read of the TCNT1 Register contents.
Reading any of the OCR1A/B or ICR1 Registers can be done by using the same principle.
Note:
The assembly code example returns the TCNT1 value in the r17:r16 register pair.
TIM16_ReadTCNT
1:
; Save global interrupt flag
in
r18,SREG
; Disable interrupts
cli
; Read TCNT
1 into r17:r16
in
r16,TCNT
1L
in
r17,TCNT
1H
; Restore global interrupt flag
out
SREG,r18
ret
C Code Example
unsigned int
TIM16_ReadTCNT
1( void )
{
unsigned char
sreg;
unsigned int
i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
__disable_interrupt();
/* Read TCNT
1 into i */
i = TCNT
1;
/* Restore global interrupt flag */
SREG = sreg;
return
i;
}