Atmega32(l) – Rainbow Electronics ATmega32L User Manual

Page 93

Advertising
background image

93

ATmega32(L)

2503C–AVR–10/02

be cleared by software by writing a logical one to its I/O bit location. The Waveform Gen-
erator uses the match signal to generate an output according to operating mode set by
the Waveform Generation mode (WGM13:0) bits and Compare Output mode
(COM1x1:0) bits. The TOP and BOTTOM signals are used by the Waveform Generator
for handling the special cases of the extreme values in some modes of operation (See
“Modes of Operation” on page 95.)

A special feature of output compare unit A allows it to define the Timer/Counter TOP
value (i.e., counter resolution). In addition to the counter resolution, the TOP value
defines the period time for waveforms generated by the Waveform Generator.

Figure 43 shows a block diagram of the output compare unit. The small “n” in the regis-
ter and bit names indicates the device number (n = 1

for Timer/Counter1), and the “x”

indicates output compare unit (A/B). The elements of the block diagram that are not
directly a part of the output compare unit are gray shaded.

Figure 43. Output Compare Unit, Block Diagram

The OCR1x register is double buffered when using any of the twelve Pulse Width Modu-
lation
(PWM) modes. For the normal and Clear Timer on Compare (CTC) modes of
operation, the double buffering is disabled. The double buffering synchronizes the
update of the OCR1x Compare Register to either TOP or BOTTOM of the counting
sequence. The synchronization prevents the occurrence of odd-length, non-symmetrical
PWM pulses, thereby making the output glitch-free.

The OCR1x Register access may seem complex, but this is not case. When the double
buffering is enabled, the CPU has access to the OCR1x Buffer Register, and if double
buffering is disabled the CPU will access the OCR1x directly. The content of the OCR1x
(buffer or compare) register is only changed by a write operation (the Timer/Counter
does not update this register automatically as the TCNT1 and ICR1 Register). Therefore
OCR1x is not read via the high byte temporary register (TEMP). However, it is a good
practice to read the low byte first as when accessing other 16-bit registers. Writing the
OCR1x Registers must be done via the TEMP Register since the compare of all 16 bits
is done continuously. The high byte (OCR1xH) has to be written first. When the high

OCFnx (Int.Req.)

=

(16-bit Comparator )

OCRnx Buffer (16-bit Register)

OCRnxH Buf. (8-bit)

OCnx

TEMP (8-bit)

DATA BUS

(8-bit)

OCRnxL Buf. (8-bit)

TCNTn (16-bit Counter)

TCNTnH (8-bit)

TCNTnL (8-bit)

COMnx1:0

WGMn3:0

OCRnx (16-bit Register)

OCRnxH (8-bit)

OCRnxL (8-bit)

Waveform Generator

TOP

BOTTOM

Advertising