beautypg.com

Rainbow Electronics ATmega3290P_V User Manual

Page 109

background image

109

ATmega329/3290/649/6490

2552H–AVR–11/06

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:

1. See “About Code Examples” on page 8.

The assembly code example returns the TCNT1 value in the r17:r16 register pair.

Assembly Code Example

(1)

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

(1)

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;

}