119
8271D–AVR–05/11
ATmega48A/PA/88A/PA/168A/PA/328/P
Note:
1.
See ”About Code Examples” on page 8.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The assembly code example returns the TCNT1 value in the r17:r16 register pair.
The following code examples show how to do an atomic write of the TCNT1 Register contents.
Writing any of the OCR1A/B or ICR1 Registers can be done by using the same principle.
Assembly Code Example
TIM16_ReadTCNT
1
:
;
Save global interrupt flag
in
r18,SREG
;
Disable interrupts
cli
; Read TCNT
1
into r17:r16
in
r16,TCNT
1
L
in
r17,TCNT
1
H
;
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
*/
_CLI();
/*
Read TCNT
1
into i
*/
i = TCNT
1
;
/*
Restore global interrupt flag
*/
SREG = sreg;
return
i;
}