ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.06.2025
Просмотров: 3646
Скачиваний: 0
Timer/Counter Clock
Sources
Counter Unit
The Timer/Counter can be clocked by an internal or an external clock source. The clock source is selected by the clock select logic which is controlled by the clock select (CS02:0) bits located in the Timer/Counter Control Register (TCCR0). For details on clock sources and prescaler, see “Timer/Counter0 and Timer/Counter1 Prescalers” on page 72.
The main part of the 8-bit Timer/Counter is the programmable counter unit. Figure 27 shows a block diagram of the counter and its surroundings.
Figure 27. Counter Unit Block Diagram |
|||
TOVn |
|||
DATA BUS |
(Int. Req.) |
||
Clock Select |
|||
TCNTn |
count |
Edge |
Tn |
Control Logic |
Detector |
||
clkTn |
|||
max |
( From Prescaler ) |
||
Signal description (internal signals): |
||
count |
Increment TCNT0 by 1. |
|
clkTn |
Timer/Counter clock, referred to as clkT0 in the following. |
|
max |
Signalize that TCNT0 has reached maximum value. |
|
The counter is incremented at each timer clock (clkT0). clkT0 can be generated from an |
||
external or internal clock source, selected by the clock select bits (CS02:0). When no |
||
clock source is selected (CS02:0 = 0) the timer is stopped. However, the TCNT0 value |
||
can be accessed by the CPU, regardless of whether clkT0 is present or not. A CPU write |
||
overrides (has priority over) all counter clear or count operations. |
||
Operation |
The counting direction is always up (incrementing), and no counter clear is performed. |
|
The counter simply overruns when it passes its maximum 8-bit value (MAX = 0xFF) and |
||
then restarts from the bottom (0x00). In normal operation the Timer/Counter Overflow |
||
Flag (TOV0) will be set in the same timer clock cycle as the TCNT0 becomes zero. The |
||
TOV0 Flag in this case behaves like a ninth bit, except that it is only set, not cleared. However, combined with the timer overflow interrupt that automatically clears the TOV0 Flag, the timer resolution can be increased by software. A new counter value can be written anytime.
68 ATmega8(L)
2486O–AVR–10/04
Timer/Counter Timing
Diagrams
ATmega8(L)
The Timer/Counter is a synchronous design and the timer clock (clkT0) is therefore shown as a clock enable signal in the following figures. The figures include information on when Interrupt Flags are set. Figure 28 contains timing data for basic Timer/Counter operation. The figure shows the count sequence close to the MAX value.
Figure 28. Timer/Counter Timing Diagram, No Prescaling
clkI/O
clkTn
(clkI/O/1)
TCNTn |
MAX - 1 |
MAX |
BOTTOM |
BOTTOM + 1 |
||||||
TOVn
Figure 29 shows the same timing data, but with the prescaler enabled.
Figure 29. Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8)
clkI/O
clkTn
(clkI/O/8)
TCNTn |
MAX - 1 |
MAX |
BOTTOM |
BOTTOM + 1 |
||||||
TOVn
69
2486O–AVR–10/04
8-bit Timer/Counter
Register Description
Timer/Counter Control
Register – TCCR0
Timer/Counter Register –
TCNT0
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||||
TCCR0 |
|||||||||||||
– |
– |
– |
– |
– |
CS02 |
CS01 |
CS00 |
||||||
Read/Write |
R |
R |
R |
R |
R |
R/W |
R/W |
R/W |
|||||
Initial Value |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||||
• Bit 2:0 – CS02:0: Clock Select
The three clock select bits select the clock source to be used by the Timer/Counter.
Table 34. Clock Select Bit Description
CS02 |
CS01 |
CS00 |
Description |
0 |
0 |
0 |
No clock source (Timer/Counter stopped). |
0 |
0 |
1 |
clkI/O/(No prescaling) |
0 |
1 |
0 |
clkI/O/8 (From prescaler) |
0 |
1 |
1 |
clkI/O/64 (From prescaler) |
1 |
0 |
0 |
clkI/O/256 (From prescaler) |
1 |
0 |
1 |
clkI/O/1024 (From prescaler) |
1 |
1 |
0 |
External clock source on T0 pin. Clock on falling edge. |
1 |
1 |
1 |
External clock source on T0 pin. Clock on rising edge. |
If external pin modes are used for the Timer/Counter0, transitions on the T0 pin will clock the counter even if the pin is configured as an output. This feature allows software control of the counting.
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
TCNT0[7:0] |
TCNT0 |
||||||||
Read/Write |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
Initial Value |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
The Timer/Counter Register gives direct access, both for read and write operations, to the Timer/Counter unit 8-bit counter.
Timer/Counter Interrupt Mask
Register – TIMSK
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
OCIE2 |
TOIE2 |
TICIE1 |
OCIE1A |
OCIE1B |
TOIE1 |
– |
TOIE0 |
TIMSK |
|
Read/Write |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
Initial Value |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
• Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt Enable
When the TOIE0 bit is written to one, and the I-bit in the Status Register is set (one), the Timer/Counter0 Overflow interrupt is enabled. The corresponding interrupt is executed if an overflow in Timer/Counter0 occurs, i.e., when the TOV0 bit is set in the Timer/Counter Interrupt Flag Register – TIFR.
70 ATmega8(L)
2486O–AVR–10/04
Timer/Counter Interrupt Flag
Register – TIFR
2486O–AVR–10/04
ATmega8(L)
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
OCF2 |
TOV2 |
ICF1 |
OCF1A |
OCF1B |
TOV1 |
– |
TOV0 |
TIFR |
|
Read/Write |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
Initial Value |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
• Bit 0 – TOV0: Timer/Counter0 Overflow Flag
The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively, TOV0 is cleared by writing a logic one to the flag. When the SREG I-bit, TOIE0 (Timer/Counter0 Overflow Interrupt Enable), and TOV0 are set (one), the Timer/Counter0 Overflow interrupt is executed.
71
Timer/Counter0 and
Timer/Counter1
Prescalers
Internal Clock Source
Prescaler Reset
External Clock Source
Timer/Counter1 and Timer/Counter0 share the same prescaler module, but the Timer/Counters can have different prescaler settings. The description below applies to both Timer/Counter1 and Timer/Counter0.
The Timer/Counter can be clocked directly by the system clock (by setting the CSn2:0 = 1). This provides the fastest operation, with a maximum Timer/Counter clock frequency equal to system clock frequency (fCLK_I/O). Alternatively, one of four taps from the prescaler can be used as a clock source. The prescaled clock has a frequency of either
fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, or fCLK_I/O/1024.
The prescaler is free running (i.e., operates independently of the clock select logic of the Timer/Counter) and it is shared by Timer/Counter1 and Timer/Counter0. Since the prescaler is not affected by the Timer/Counter’s clock select, the state of the prescaler will have implications for situations where a prescaled clock is used. One example of prescaling artifacts occurs when the timer is enabled and clocked by the prescaler (6 > CSn2:0 > 1). The number of system clock cycles from when the timer is enabled to the first count occurs can be from 1 to N+1 system clock cycles, where N equals the prescaler divisor (8, 64, 256, or 1024).
It is possible to use the prescaler reset for synchronizing the Timer/Counter to program execution. However, care must be taken if the other Timer/Counter that shares the same prescaler also uses prescaling. A prescaler reset will affect the prescaler period for all Timer/Counters it is connected to.
An external clock source applied to the T1/T0 pin can be used as Timer/Counter clock (clkT1/clkT0). The T1/T0 pin is sampled once every system clock cycle by the pin synchronization logic. The synchronized (sampled) signal is then passed through the edge detector. Figure 30 shows a functional equivalent block diagram of the T1/T0 synchronization and edge detector logic. The registers are clocked at the positive edge of the internal system clock (clkI/O). The latch is transparent in the high period of the internal system clock.
The edge detector generates one clkT1/clkT0 pulse for each positive (CSn2:0 = 7) or negative (CSn2:0 = 6) edge it detects.
Figure 30. T1/T0 Pin Sampling |
|||||||
Tn |
D |
Q |
D |
Q |
D |
Q |
Tn_sync |
(To Clock |
|||||||
Select Logic) |
|||||||
LE |
|||||||
clkI/O |
|||||||
Synchronization |
Edge Detector |
||||||
The synchronization and edge detector logic introduces a delay of 2.5 to 3.5 system clock cycles from an edge has been applied to the T1/T0 pin to the counter is updated.
Enabling and disabling of the clock input must be done when T1/T0 has been stable for at least one system clock cycle, otherwise it is a risk that a false Timer/Counter clock pulse is generated.
72 ATmega8(L)
2486O–AVR–10/04
ATmega8(L)
Each half period of the external clock applied must be longer than one system clock cycle to ensure correct sampling. The external clock must be guaranteed to have less
than half the system clock frequency (fExtClk < fclk_I/O/2) given a 50/50% duty cycle. Since the edge detector uses sampling, the maximum frequency of an external clock it can
detect is half the sampling frequency (Nyquist sampling theorem). However, due to variation of the system clock frequency and duty cycle caused by Oscillator source (crystal, resonator, and capacitors) tolerances, it is recommended that maximum frequency of an external clock source is less than fclk_I/O/2.5.
An external clock source can not be prescaled.
Figure 31. Prescaler for Timer/Counter0 and Timer/Counter1(1)
clkI/O
Clear
PSR10
T0
Synchronization
T1
Synchronization
Special Function IO Register –
SFIOR
clkT1 |
clkT0 |
|||||||||
Note: 1. |
The synchronization logic on the input pins (T1/T0) is shown in Figure 30. |
|||||||||
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
– |
– |
– |
– |
ACME |
PUD |
PSR2 |
PSR10 |
SFIOR |
||
Read/Write |
R |
R |
R |
R |
R/W |
R/W |
R/W |
R/W |
||
Initial Value |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||
• Bit 0 – PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0
When this bit is written to one, the Timer/Counter1 and Timer/Counter0 prescaler will be reset. The bit will be cleared by hardware after the operation is performed. Writing a zero to this bit will have no effect. Note that Timer/Counter1 and Timer/Counter0 share the same prescaler and a reset of this prescaler will affect both timers. This bit will always be read as zero.
73
2486O–AVR–10/04