Rainbow Electronics ATtiny10 User Manual
Page 72
72
8127B–AVR–08/09
ATtiny4/5/9/10
Note:
See
The code example returns the TCNT0 value in the r17:r16 register pair.
It is important to notice that accessing 16-bit registers are atomic operations. If an interrupt
occurs between the two instructions accessing the 16-bit register, and the interrupt code
updates the temporary register by accessing the same or any other of the 16-bit timer registers,
then the result of the access outside the interrupt will be corrupted. Therefore, when both 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 example shows how to do an atomic read of the TCNT0 Register contents.
Reading any of the OCR0A/B or ICR0 Registers can be done by using the same principle.
Note:
See
The code example returns the TCNT0 value in the r17:r16 register pair.
The following code example shows how to do an atomic write of the TCNT0 Register contents.
Writing any of the OCR0A/B or ICR0 Registers can be done by using the same principle.
Assembly Code Example
...
; Set TCNT
0 to 0x01FF
r17,0x01
r16,0xFF
TCNT
0H,r17
TCNT
0L,r16
; Read TCNT
0 into r17:r16
r16,TCNT
0L
r17,TCNT
0H
...
Assembly Code Example
TIM16_ReadTCNT
0:
; Save global interrupt flag
r18,SREG
; Disable interrupts
cli
; Read TCNT
0 into r17:r16
in
r16,TCNT
0L
in
r17,TCNT
0H
; Restore global interrupt flag
out
SREG,r18
ret