beautypg.com

Rainbow Electronics ATtiny10 User Manual

Page 72

background image

72

8127B–AVR–08/09

ATtiny4/5/9/10

Note:

See

“Code Examples” on page 5

.

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

“Code Examples” on page 5

.

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