Atmel Ata6612p-Plpw
Atmel Ata6612p-Plpw
Atmel Ata6612p-Plpw
ATA6612/ATA6613
MCU LIN-SBC
ATmega88 ATA6624
or
ATmega168
9111E–AUTO–07/08
2. Pin Configuration
Figure 2-1. Pinning QFN48, 7 mm × 7 mm
MCUVDD2
GND2
PD7
PD6
PD5
PB4
PB3
PB2
PB1
PB0
PB7
PB6
48 47 46 45 44 43 42 41 40 39 38 37
PB5 1 36 MCUVDD1
MCUAVDD 2 35 GND1
ADC6 3 34 PD4
AREF 4 33 PD3
GND4 5 32 LIN
ADC7 6 31 GND
PC0 7 30 WAKE
PC1 8 29 NTRIG
PC2 9 28 EN
PC3 10 27 VS
PC4 11 26 VCC
PC5 12 25 PVCC
13 14 15 16 17 18 19 20 21 22 23 24
WD_OSC
NRES
TXD
MODE
RXD
KL_15
INH
PD1
PD2
PC6
TM
PD0
2 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
3
9111E–AUTO–07/08
Table 2-2. Maximum Ratings of the SiP
Parameters Symbol Min. Typ. Max. Unit
HBM ESD
ANSI/ESD-STM5.1
±2 KV
JESD22-A114
AEC-Q100 (002)
CDM ESD STM 5.3.1 ±750 V
Storage temperature Ts –55 +150 °C
(1)
Operating temperature Tcase –40 +125 °C
Thermal resistance junction to heat slug Rthjc 5 K/W
Thermal resistance junctiion to ambient,
Rthja 25 K/W
according to JEDEC
Thermal shutdown of VCC regulator 150 165 170 °C
Thermal shutdown of LIN output 150 165 170 °C
Thermal shutdown hysteresis 10 °C
Note: 1. Tcase means the temperature of the heat slug (backside). It is mandatory that this backside temperature is ≤ 125°C in the
application.
4 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
3.1 Features
• Master and Slave Operation Possible
• Supply Voltage up to 40V
• Operating voltage VS = 5V to 27V
• Typically 10 µA Supply Current During Sleep Mode
• Typically 57 µA Supply Current in Silent Mode
• Linear Low-drop Voltage Regulator:
• Normal, Fail-safe, and Silent Mode
• VCC = 5.0V ±2%
• In Sleep Mode VCC is Switched Off
• VCC- Undervoltage Detection (4 ms Reset Time) and Watchdog Reset Logical Combined at Open
Drain Output NRES
• Negative Trigger Input for Watchdog
• Boosting the Voltage Regulator Possible with an External NPN Transistor
• LIN Physical Layer According to LIN 2.0 Specification and SAEJ2602-2
• Wake-up Capability via LIN-bus, Wake Pin, or Kl_15 Pin
• INH Output to Control an External Voltage Regulator or to Switch off the Master Pull Up Resistor
• TXD Time-out Timer
• Bus Pin is Overtemperature and Short Circuit Protected versus GND and Battery
• Adjustable Watchdog Time via External Resistor
• Advanced EMC and ESD Performance
• ESD HBM 8 kV at Pins LIN and VS According to STM5.1
3.2 Description
The LIN-SBC is a fully integrated LIN transceiver, which complies with the LIN 2.0 and
SAEJ2602-2 specifications. It has a low-drop voltage regulator for 5V/50 mA output and a win-
dow watchdog.
The LIN-SBC are designed to handle the low-speed data communication in vehicles, e.g., in
convenience electronics. Improved slope control at the LIN-driver ensures secure data commu-
nication up to 20 kBaud. Sleep Mode and Silent Mode guarantee very low current consumption.
5
9111E–AUTO–07/08
Figure 3-1. Block Diagram
27
VS
Normal and
Fail-safe
18 Mode
INH Normal and
PVCC Receiver Fail-safe
Mode
17
RXD
32
RF Filter LIN
30
WAKE
24
Edge Wake-up
KL_15
Detection Bus Timer
PVCC Short Circuit and
Overtemperature
Slew Rate Control Protection
19 TXD
TXD Time-out
Timer
Control Unit 26
Normal/Silent/ VCC
Fail-safe Mode 25
28 Debounce /50 mA/2% PVCC
EN Time Mode Select
Undervoltage 20
Reset NRES
OUT Adjustable 21
Internal Testing
Watchdog Watchdog WD_OSC
Unit
31 Oscillator
GND
PVCC
23 22 29
MODE TM NTRIG
6 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
7
9111E–AUTO–07/08
3.3.7 Input/Output Pin (TXD)
In Normal Mode the TXD pin is the microcontroller interface used to control the state of the LIN
output. TXD must be pulled to ground in order to have a low LIN-bus. If TXD is high or uncon-
nected (internal pull-up resistor), the LIN output transistor is turned off, and the bus is in
recessive state. During Fail-safe Mode, this pin is used as output. It is current-limited to < 8 mA.
and is latched to low if the last wake-up event was from pin WAKE or KL_15.
8 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
9
9111E–AUTO–07/08
3.3.20 Modes of Operation
Fail-safe Mode b
EN = 1 EN = 1
c+d
Go to silent command
EN = 0 Silent Mode
TXD = 1 VCC: With undervoltage
Local wake-up event monitoring
Normal Mode EN = 1
Communication: OFF
VCC: With undervoltage Watchdog: OFF
monitoring
Go to sleep command
Communication: ON EN = 0 Sleep Mode
Watchdog: ON
TXD = 0 VCC: switched off
Communication: OFF
Watchdog: OFF
10 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
EN
td = 3.2 µs
NRES
VCC
LIN
A falling edge at the LIN pin followed by a dominant bus level maintained for a certain time
period (tbus) and the following rising edge at the LIN pin (see Figure 3-4 on page 12) result in a
remote wake-up request. The device switches from Silent Mode to Fail-safe Mode. The internal
LIN slave termination resistor is switched on. The remote wake-up request is indicated by a low
level at the RXD pin to interrupt the microcontroller (see Figure 3-4 on page 12). EN high can be
used to switch directly to Normal Mode.
11
9111E–AUTO–07/08
Figure 3-4. LIN Wake-up from Silent Mode
Bus wake-up filtering time
tbus Fail-safe mode Normal mode
LIN bus
TXD
VCC
voltage Silent mode Fail-safe mode Normal mode
regulator
EN High
EN
12 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The VCC regulator is activated, and the internal LIN slave termination resistor is switched on.
The remote wake-up request is indicated by a low level at the RXD pin to interrupt the microcon-
troller (see Figure 3-6 on page 14).
EN high can be used to switch directly from Sleep/Silent to Fail-safe Mode. If EN is still high after
VCC ramp up and undervoltage reset time, the IC switches to the Normal Mode.
EN
td = 3.2 µs
NRES
VCC
LIN
13
9111E–AUTO–07/08
Figure 3-6. LIN Wake-up from Sleep Mode
Bus wake-up filtering time
tbus Fail-safe Mode Normal Mode
LIN bus
TXD
VCC On state
voltage Off state
regulator
Regulator wake-up time
EN High
EN
Reset
time
NRES Floating
Microcontroller
start-up time delay
14 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
15
9111E–AUTO–07/08
3.3.22 Fail-safe Features
• During a short-circuit at LIN to VBattery, the output limits the output current to IBUS_LIM. Due to
the power dissipation, the chip temperature exceeds TLINoff, and the LIN output is switched
off. The chip cools down and after a hysteresis of Thys, switches the output on again. RXD
stays on high because LIN is high. During LIN overtemperature switch-off, the VCC regulator
works independently.
• During a short-circuit from LIN to GND the IC can be switched into Sleep or Silent Mode. If
the short-circuit disappears, the IC starts with a remote wake-up.
• The reverse current is very low < 15 µA at the LIN pin during loss of VBatt or GND. This is
optimal behavior for bus systems where some slave nodes are supplied from battery or
ignition.
• During a short circuit at VCC, the output limits the output current to IVCCn. Because of
undervoltage, NRES switches to low and sends a reset to the microcontroller. The IC
switches into Fail-safe Mode. If the chip temperature exceeds the value TVCCoff, the VCC
output switches off. The chip cools down and after a hysteresis of Thys, switches the output on
again. Because of the Fail-safe Mode, the VCC voltage will switch on again although EN is
switched off from the microcontroller. The microcontroller can start with its normal operation.
• EN pin provides a pull-down resistor to force the transceiver into recessive mode if EN is
disconnected.
• RXD pin is set floating if VBatt is disconnected.
• TXD pin provides a pull-up resistor to force the transceiver into recessive mode if TXD is
disconnected.
• If TXD is short-circuited to GND, it is possible to switch to Sleep Mode via ENABLE after
tdom > 20 ms.
• If the WD_OSC pin has a short-circuit to GND or the resistor is disconnected, the watchdog
runs with an internal oscillator and guarantees a reset after the second NTRIG signal at the
latest.
16 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
VS
12V
For programming purposes of the microcontroller it is potentially neccessary to supply the VCC
output via an external power supply while the VS Pin of the system basis chip is disconnected.
This behavior is no problem for the system basis chip.
3.3.24 Watchdog
The watchdog anticipates a trigger signal from the microcontroller at the NTRIG (negative edge)
input within a time window of T w d . The trigger signal must exceed a minimum time
ttrigmin > 200 ns. If a triggering signal is not received, a reset signal will be generated at output
NRES. After a watchdog reset the IC starts with the lead time. The timing basis of the watchdog
is provided by the internal oscillator. Its time period, Tosc, is adjustable via the external resistor
Rwd_osc (34 kΩ to 120 kΩ).
During Silent or Sleep Mode the watchdog is switched off to reduce current consumption.
The minimum time for the first watchdog pulse is required after the undervoltage reset at NRES
disappears. It is defined as lead time td. After wake up from Sleep or Silent Mode, the lead time
td starts with the negative edge of the RXD output.
17
9111E–AUTO–07/08
3.3.24.1 Typical Timing Sequence with RWD_OSC = 51 kΩ
The trigger signal T wd is adjustable between 20 ms and 64 ms using the external resistor
RWD_OSC.
For example, with an external resistor of RWD_OSC = 51 kΩ ±1%, the typical parameters of the
watchdog are as follows:
tosc = 0.405 × RWD_OSC – 0.0004 × (RWD_OSC)2 (RWD_OSC in kΩ; tosc in µs)
tOSC = 19.6 µs due to 51 kΩ
td = 7895 × 19.6 µs = 155 ms
t1 = 1053 × 19.6 µs = 20.6 ms
t2 = 1105 × 19.6 µs = 21.6 ms
tnres = constant = 4 ms
After ramping up the battery voltage, the 3.3V/5V regulator is switched on. The reset output
NRES stays low for the time treset (typically 4 ms), then it switches to high, and the watchdog
waits for the trigger sequence from the microcontroller. The lead time, td, follows the reset and is
td = 155 ms. In this time, the first watchdog pulse from the microcontroller is required. If the trig-
ger pulse NTRIG occurs during this time, the time t1 starts immediately. If no trigger signal
occurs during the time td, a watchdog reset with tNRES = 4 ms will reset the microcontroller after
td = 155 ms. The times t1 and t2 have a fixed relationship between each other. A triggering signal
from the microcontroller is anticipated within the time frame of t2 = 21.6 ms. To avoid false trig-
gering from glitches, the trigger pulse must be longer than tTRIG,min > 200 ns. This slope serves to
restart the watchdog sequence. If the triggering signal fails in this open window t2, the NRES
output will be drawn to ground. A triggering signal during the closed window t1 immediately
switches NRES to low.
td = 155 ms t1 t2
t1 = 20.6 ms t2 = 21 ms
twd
NTRIG
18 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
19
9111E–AUTO–07/08
4. Absolute Maximum Ratings
Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device. This is a stress rating
only and functional operation of the device at these or any other conditions beyond those indicated in the operational sections of this
specification is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability.
Parameters Symbol Min. Typ. Max. Unit
Supply voltage VS VS –0.3 +40 V
Pulse time ≤ 500 ms
Ta = 25°C VS +40 V
Output current IVCC ≤ 50 mA
Pulse time ≤ 2 min
Ta = 25°C VS 27 V
Output current IVCC ≤ 50 mA
WAKE (with 33 kΩ serial resistor)
KL_15 (with 50 kΩ/100 nF)
DC voltage –1 +40 V
Transient voltage due to ISO7637 –150 +100 V
(coupling 1 nF)
INH
- DC voltage –0.3 +40 V
LIN
- DC voltage –27 +40 V
Logic pins (RxD, TxD, EN, NRES, NTRIG,
V
WD_OSC, MODE, TM) –0.3 +5.5
Output current NRES INRES +2 mA
PVCC DC voltage –0.3 +5.5 V
VCC DC voltage –0.3 +6.5 V
According to IBEE LIN EMC
Test Spec. 1.0 following IEC 61000-4-2
- Pin VS, LIN to GND ±6 KV
- Pin WAKE (33 kΩ serial resistor and ±6 KV
10 nF to GND)
ESD HBM following STM5.1 with 1.5 kΩ
150 pF ±8 KV
- Pin VS, LIN, WAKE to GND
Junction temperature Tj –40 +150 °C
Storage temperature Ts –55 +150 °C
Thermal shutdown of VCC regulator 150 165 170 °C
Thermal shutdown of LIN output 150 165 170 °C
Thermal shutdown hysteresis 10 °C
20 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
5. Electrical Characteristics
5V < VS < 27V, –40°C < Tcase < 125°C, –40°C < Tj < 150°C, unless otherwise specified. All values refer to GND pins
No. Parameters Test Conditions Pin Symbol Min. Typ. Max. Unit Type*
1 VS Pin
Nominal DC voltage
1.1 VS VS 5 27 V A
range
Sleep Mode
VLIN > VS – 0.5V VS IVSsleep 3 10 14 µA A
Supply current in Sleep VS < 14V (Tj = 25°C)
1.2
Mode Sleep Mode
VLIN > VSt – 0.5V IVSsleep 5 11 16 µA A
VS < 14V (Tj = 125°C)
Bus recessive
VS < 14V (Tj = 25°C) IVSsi 47 57 67 µA A
Supply current in Silent Without load at VCC
1.3
Mode Bus recessive
VS < 14V (Tj = 125°C) IVSsi 56 66 76 µA A
Without load at VCC
Bus recessive
Supply current in Normal
1.4 VS < 14V VS IVSrec 0.3 0.8 mA A
Mode
Without load at VCC
Bus dominant
Supply current in Normal
1.5 VS < 14V VS IVSdom 50 53 mA A
Mode
VCC load current 50 mA
Bus recessive
Supply current in
1.6 VS < 14V VS IVSfail 0.35 0.53 mA A
Fail-safe Mode
Without load at VCC
VS undervoltage
1.7 VS VSth 4.0 4.5 5 V A
threshold
VS undervoltage
1.8 VS VSth_hys 0.2 V A
threshold hysteresis
2 RXD Output Pin
Normal Mode
2.1 Low-level input current VLIN = 0V RXD IRXD 1.3 2.5 8 mA A
VRXD = 0.4V
2.2 Low-level output voltage IRXD = 1 mA RXD VRXDL 0.4 V A
Internal 5 kΩ resistor to
2.3 RXD RRXD 3 5 7 kΩ A
VCC
3 TXD Input/Output Pin
3.1 Low-level voltage input TXD VTXDL –0.3 +0.8 V A
VCC +
3.2 High-level voltage input TXD VTXDH 2 V A
0.3V
3.3 Pull-up resistor VTXD = 0V TXD RTXD 125 250 400 kΩ A
High-level leakage
3.4 VTXD = VCC TXD ITXD –3 +3 µA A
current
*) Type means: A = 100% tested, B = 100% correlation tested, C = Characterized on samples, D = Design parameter
21
9111E–AUTO–07/08
5. Electrical Characteristics (Continued)
5V < VS < 27V, –40°C < Tcase < 125°C, –40°C < Tj < 150°C, unless otherwise specified. All values refer to GND pins
No. Parameters Test Conditions Pin Symbol Min. Typ. Max. Unit Type*
Fail-safe Mode
Low-level input current at VLIN = VS
3.5 TXD ITXDwake 2 2.5 8 mA A
local wake-up request VWAKE = 0V
VTXD = 0.4V
4 EN Input Pin
4.1 Low-level voltage input EN VENL –0.3 +0.8 V A
VCC +
4.2 High-level voltage input EN VENH 2 V A
0.3V
4.3 Pull-down resistor VEN = VCC EN REN 50 125 200 kΩ A
4.4 Low-level input current VEN = 0V EN IEN –3 +3 µA A
5 NTRIG Watchdog Input Pin
5.1 Low-level voltage input VNTRIGL –0.3 +0.8 V A
VCC +
5.2 High-level voltage input VNTRIGH 2 V A
0.3V
5.3 Pull-up resistor VNTRIG = 0V RNTRIG 125 250 400 kΩ A
High-level leakage
5.4 VNTRIG = VCC INTRIG –3 +3 µA A
current
6 Mode Input Pin
6.1 Low-level voltage input VMODEL –0.3 +0.8 V A
VCC +
6.2 High-level voltage input VMODEH 2 V A
0.3V
High-level leakage VMODE = VCC or
6.3 IMODE –3 +3 µA A
current VMODE = 0V
7 INH Output Pin
7.1 High-level voltage IINH = –15 mA VINHH VS – 0.8 VS V A
Switch-on resistance
7.2 RINH 30 50 Ω A
between VS and INH
High-level leakage Sleep Mode
7.3 IINHL –3 +3 µA A
current VINH = 27V, VS = 27V
LIN Bus Driver: Bus Load Conditions:
8 Load 1 (Small): 1 nF, 1 kΩ; Load 2 (Large): 10 nF, 500Ω; RRXD = 5 kΩ; CRXD = 20 pF
10.5, 10.6 and 10.7 Specifies the Timing Parameters for Proper Operation at 20 Kbps
Driver recessive output
8.1 Load1/Load2 LIN VBUSrec 0.9 × VS VS V A
voltage
VVS = 7V
8.2 Driver dominant voltage LIN V_LoSUP 1.2 V A
Rload = 500 Ω
VVS = 18V
8.3 Driver dominant voltage LIN V_HiSUP 2 V A
Rload = 500 Ω
VVS = 7.0V
8.4 Driver dominant voltage LIN V_LoSUP_1k 0.6 V A
Rload = 1000 Ω
VVS = 18V
8.5 Driver dominant voltage LIN V_HiSUP_1k 0.8 V A
Rload = 1000 Ω
The serial diode is
8.6 Pull-up resistor to VS LIN RLIN 20 30 60 kΩ A
mandatory
*) Type means: A = 100% tested, B = 100% correlation tested, C = Characterized on samples, D = Design parameter
22 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
23
9111E–AUTO–07/08
5. Electrical Characteristics (Continued)
5V < VS < 27V, –40°C < Tcase < 125°C, –40°C < Tj < 150°C, unless otherwise specified. All values refer to GND pins
No. Parameters Test Conditions Pin Symbol Min. Typ. Max. Unit Type*
Time delay for mode
change from Silent
10.5 V = 5V ts_n 5 15 40 µs A
Mode into Normal Mode EN
via EN
THRec(max) = 0.744 × VS
THDom(max) = 0.581 × VS
10.6 Duty cycle 1 VS = 7.0V to 18V D1 0.396 A
tBit = 50 µs
D1 = tbus_rec(min)/(2 × tBit)
THRec(min) = 0.422 × VS
THDom(min) = 0.284 × VS
10.7 Duty cycle 2 VS = 7.6V to 18V D2 0.581 A
tBit = 50 µs
D2 = tbus_rec(max)/(2 × tBit)
THRec(max) = 0.778 × VS
THDom(max) = 0.616 × VS
10.8 Duty cycle 3 VS = 7.0V to 18V D3 0.417 A
tBit = 96 µs
D3 = tbus_rec(min)/(2 × tBit)
THRec(min) = 0.389 × VS
THDom(min) = 0.251 × VS
10.9 Duty cycle 4 VS = 7.6V to 18V D4 0.590 A
tBit = 96 µs
D4 = tbus_rec(max)/(2 × tBit)
VS = 7.0V to 18V Slope
Slope time falling and tSLOPE_fall
10.10 time dominant and 3.5 22.5 µs A
rising edge at LIN tSLOPE_rise
recessive edges
Receiver Electrical AC Parameters of the LIN Physical Layer
11
LIN Receiver, RXD Load Conditions (CRXD): 20 pF
Propagation delay of
VS = 7.0V to 18V
11.1 receiver (Figure 5-1 on trx_pd 6 µs A
trx_pd = max(trx_pdr, trx_pdf)
page 27)
Symmetry of receiver
VS = 7.0V to 18V
11.2 propagation delay rising trx_sym –2 +2 µs A
t =t –t
edge minus falling edge rx_sym rx_pdr rx_pdf
12 NRES Open Drain Output Pin
VS ≥ 5.5V
12.1 Low-level output voltage Inres = 1 mA VNRESL 0.2 V A
Inres = 250 µA 0.14 V
10 kΩ to VCC
12.2 Low-level output low VNRESLL 0.2 V A
VCC = 0V
VVS ≥ 5.5V
12.3 Undervoltage reset time Treset 2 4 6 ms A
CNRES = 20 pF
Reset debounce time for VVS ≥ 5.5V
12.4 Tres_f 1.5 10 µs A
falling edge CNRES = 20 pF
*) Type means: A = 100% tested, B = 100% correlation tested, C = Characterized on samples, D = Design parameter
24 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
25
9111E–AUTO–07/08
5. Electrical Characteristics (Continued)
5V < VS < 27V, –40°C < Tcase < 125°C, –40°C < Tj < 150°C, unless otherwise specified. All values refer to GND pins
No. Parameters Test Conditions Pin Symbol Min. Typ. Max. Unit Type*
18 VCC Voltage Regulator
5.5V < VS < 18V
18.1 Output voltage VCC VCCnor 4.9 5.1 V A
(0 mA to 50 mA)
Output voltage VCC at
18.2 4V < VS < 5.5V VCClow VS – VD 5.1 V A
low VS
VS > 4V
18.3 Regulator drop voltage VD1 250 mV A
IVCC = –20 mA
VS > 4V
18.4 Regulator drop voltage VD2 400 600 mV A
IVCC = –50 mA
VS > 3.3V
18.5 Regulator drop voltage VD3 200 mV A
IVCC = –15 mA
18.6 Line regulation 5.5V < VS < 18V VCCline 1 % A
5 mA < IVCC < 50 mA
18.7 Load regulation VCCload 0.5 2 % A
100 kHz
18.8 Output current limitation VS > 5.5V IVCCs –200 –130 mA A
18.9 Load capacity 1Ω < ESR < 5Ω VthunN 1.8 10 µF D
VCC undervoltage Referred to VCC
18.10 VthunN 4.2 4.8 V A
threshold VS > 5.5V
Hysteresis of Referred to VCC
18.11 Vhysthun 250 mV A
undervoltage threshold VS > 5.5V
Ramp-up time VS > 5.5V CVCC = 2.2 µF
18.12 tVCC 130 300 µs A
to VCC = 5V Iload = –5 mA at VCC
*) Type means: A = 100% tested, B = 100% correlation tested, C = Characterized on samples, D = Design parameter
26 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
TXD
(Input to transmitting node)
tBus_dom(max) tBus_rec(min)
Thresholds of
THRec(max)
receiving node1
VS THDom(max)
(Transceiver supply
of transmitting node) LIN Bus Signal
Thresholds of
THRec(min) receiving node2
THDom(min)
tBus_dom(min) tBus_rec(max)
RXD
(Output of receiving node1)
trx_pdf(1) trx_pdr(1)
RXD
(Output of receiving node2)
trx_pdr(2) trx_pdf(2)
27
9111E–AUTO–07/08
6. Microcontroller Block
6.1 Features
• High Performance, Low Power AVR 8-bit Microcontroller
• Advanced RISC Architecture
– 131 Powerful Instructions - Most Single Clock Cycle Execution
– 32 × 8 General Purpose Working Register
– Fully Static Operation
– Up to 16 MIPS Throughput at 16 MHz
– On-chip 2-cycle Multiplier
• Non-volatile Program and Data Memories
– 8/16 Kbytes of In-System Self-programmable Flash (ATA6612/ATA6613)
Endurance: 75,000 Write/Erase Cycles
– Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
– 512 Bytes EEPROM
Endurance: 100,000 Write/Erase Cycles
– 1 Kbyte Internal SRAM
– Programming Lock for Software Security
• Peripheral Features
– Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
– One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
– Real Time Counter with Separate Oscillator
– Six PWM Channels
– 8-channel 10-bit ADC
– Programmable Serial USART
– Master/Slave SPI Serial Interface
– Byte-oriented 2-wire Serial Interface
– Programmable Watchdog Timer with Separate On-chip Oscillator
– On-chip Analog Comparator
– Interrupt and Wake-up on Pin Change
• Special Microcontroller Features
– Power-on Reset and Programmable Brown-out Detection
– Internal Calibrated Oscillator
– External and Internal Interrupt Sources
– Five Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, and Standby
• I/O
– 23 Programmable I/O Lines
• Operating Voltage
– 2.7V to 5.5V
• Speed Grade
– 0 to 8 MHz at 2.7V to 5.5V, 0 to 16 MHz at 4.5V to 5.5V
• Low Power Consumption
– Active Mode:
• 4 MHz, 3.0V: 1.8 mA
– Power-down Mode:
• 5 µA at 3.0V
28 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.2 Overview
The ATA6612/ATA6613 uses a low-power CMOS 8-bit microcontroller based on the AVR
enhanced RISC architecture. By executing powerful instructions in a single clock cycle, the
ATA6612/ATA6613 achieves throughputs approaching 1 MIPS per MHz allowing the system
designer to optimize power consumption versus processing speed.
Watchdog debugWIRE
Timer
Power Supervision
POR / BOD and
Reset
Watchdog Program
Oscillator Logic
Flash SRAM
Oscillator Circuits /
Clock Generation
AVR CPU
EEPROM
AVCC
AREF
GND
2
8 bit T/C 0 16 bit T/C 1 A/D Converter
DATABUS
Analog Internal 6
8 bit T/C 2 Compensation Bandgap
RESET
XTAL[1..2]
29
9111E–AUTO–07/08
The AVR core combines a rich instruction set with 32 general purpose working registers. All the
32 registers are directly connected to the Arithmetic Logic Unit (ALU), allowing two independent
registers to be accessed in one single instruction executed in one clock cycle. The resulting
architecture is more code efficient while achieving throughputs up to ten times faster than con-
ventional CISC microcontrollers.
The ATA6612/ATA6613 provides the following features: 8K/16K bytes of In-System Program-
mable Flash with Read-While-Write capabilities, 512 bytes EEPROM, 1 Kbyte SRAM,
23 general purpose I/O lines, 32 general purpose working registers, three flexible Timer/Coun-
ters with compare modes, internal and external interrupts, a serial programmable USART, a
byte-oriented 2-wire Serial Interface, an SPI serial port, a 6-channel 10-bit ADC (8 channels in
TQFP and QFN packages), a programmable Watchdog Timer with internal Oscillator, and five
software selectable power saving modes. The Idle mode stops the CPU while allowing the
SRAM, Timer/Counters, USART, 2-wire Serial Interface, SPI port, and interrupt system to con-
tinue functioning. The Power-down mode saves the register contents but freezes the Oscillator,
disabling all other chip functions until the next interrupt or hardware reset. In Power-save mode,
the asynchronous timer continues to run, allowing the user to maintain a timer base while the
rest of the device is sleeping. The ADC Noise Reduction mode stops the CPU and all I/O mod-
ules except asynchronous timer and ADC, to minimize switching noise during ADC conversions.
In Standby mode, the crystal/resonator Oscillator is running while the rest of the device is sleep-
ing. This allows very fast start-up combined with low power consumption.
The device is manufactured using Atmel’s high density non-volatile memory technology. The
On-chip ISP Flash allows the program memory to be reprogrammed In-System through an SPI
serial interface, by a conventional non-volatile memory programmer, or by an On-chip Boot pro-
gram running on the AVR core. The Boot program can use any interface to download the
application program in the Application Flash memory. Software in the Boot Flash section will
continue to run while the Application Flash section is updated, providing true Read-While-Write
operation. By combining an 8-bit RISC CPU with In-System Self-Programmable Flash on a
monolithic chip, the Atmel ATA6612/ATA6613 uses a powerful microcontroller that provides a
highly flexible and cost effective solution to many embedded control applications.
The ATA6612/ATA6613 AVR is supported with a full suite of program and system development
tools including: C Compilers, Macro Assemblers, Program Debugger/Simulators, In-Circuit Emu-
lator, and Evaluation kits.
30 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.2.4.1 VCC
Digital supply voltage.
6.2.4.2 GND
Ground.
31
9111E–AUTO–07/08
6.2.4.4 Port C (PC5:0)
Port C is a 7-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The
PC5..0 output buffers have symmetrical drive characteristics with both high sink and source
capability. As inputs, Port C pins that are externally pulled low will source current if the pull-up
resistors are activated. The Port C pins are tri-stated when a reset condition becomes active,
even if the clock is not running.
6.2.4.5 PC6/RESET
If the RSTDISBL Fuse is unprogrammed, PC6 is used as a Reset input. A low level on this pin
for longer than the minimum pulse length will generate a Reset, even if the clock is not running.
The minimum pulse length is given in Table 6-3 on page 47. Shorter pulses are not guaranteed
to generate a Reset.
The various special features of Port C are elaborated in “Alternate Functions of Port C” on page
101.
6.2.4.7 AVCC
AVCC is the supply voltage pin for the A/D converter, PC3:0, and ADC7:6. I should be externally
connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC
through a low-pass filter. Note that PC6..4 use digital supply voltage, VCC.
6.2.4.8 AREF
AREF is the analog reference pin for the A/D converter.
32 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.4.1 Introduction
This section discusses the AVR core architecture in general. The main function of the CPU core
is to ensure correct program execution. The CPU must therefore be able to access memories,
perform calculations, control peripherals, and handle interrupts.
Interrupt
32 × 8 unit
Instruction general
register purpose
registers SPI
unit
Instruction
decoder Watchdog
timer
Indirect addressing
Direct addressing
ALU
Control lines Analog
comparator
I/O Module 1
I/O Module n
EEPROM
I/O lines
33
9111E–AUTO–07/08
In order to maximize performance and parallelism, the AVR uses a Harvard architecture – with
separate memories and buses for program and data. Instructions in the program memory are
executed with a single level pipelining. While one instruction is being executed, the next instruc-
tion is pre-fetched from the program memory. This concept enables instructions to be executed
in every clock cycle. The program memory is In-System Reprogrammable Flash memory.
The fast-access Register File contains 32 × 8-bit general purpose working registers with a single
clock cycle access time. This allows single-cycle Arithmetic Logic Unit (ALU) operation. In a typ-
ical ALU operation, two operands are output from the Register File, the operation is executed,
and the result is stored back in the Register File – in one clock cycle.
Six of the 32 registers can be used as three 16-bit indirect address register pointers for Data
Space addressing – enabling efficient address calculations. One of the these address pointers
can also be used as an address pointer for look up tables in Flash program memory. These
added function registers are the 16-bit X-, Y-, and Z-register, described later in this section.
The ALU supports arithmetic and logic operations between registers or between a constant and
a register. Single register operations can also be executed in the ALU. After an arithmetic opera-
tion, the Status Register is updated to reflect information about the result of the operation.
Program flow is provided by conditional and unconditional jump and call instructions, able to
directly address the whole address space. Most AVR instructions have a single 16-bit word for-
mat. Every program memory address contains a 16- or 32-bit instruction.
Program Flash memory space is divided in two sections, the Boot Program section and the
Application Program section. Both sections have dedicated Lock bits for write and read/write
protection. The SPM instruction that writes into the Application Flash memory section must
reside in the Boot Program section.
During interrupts and subroutine calls, the return address Program Counter (PC) is stored on the
Stack. The Stack is effectively allocated in the general data SRAM, and consequently the Stack
size is only limited by the total SRAM size and the usage of the SRAM. All user programs must
initialize the SP in the Reset routine (before subroutines or interrupts are executed). The Stack
Pointer (SP) is read/write accessible in the I/O space. The data SRAM can easily be accessed
through the five different addressing modes supported in the AVR architecture.
The memory spaces in the AVR architecture are all linear and regular memory maps.
A flexible interrupt module has its control registers in the I/O space with an additional Global
Interrupt Enable bit in the Status Register. All interrupts have a separate Interrupt Vector in the
Interrupt Vector table. The interrupts have priority in accordance with their Interrupt Vector posi-
tion. The lower the Interrupt Vector address, the higher the priority.
The I/O memory space contains 64 addresses for CPU peripheral functions as Control Regis-
ters, SPI, and other I/O functions. The I/O Memory can be accessed directly, or as the Data
Space locations following those of the Register File, 0x20 - 0x5F. In addition, the
ATA6612/ATA6613 has Extended I/O space from 0x60 - 0xFF in SRAM where only the
ST/STS/STD and LD/LDS/LDD instructions can be used.
34 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Bit 7 6 5 4 3 2 1 0
I T H S V N Z C SREG
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial
0 0 0 0 0 0 0 0
Value
35
9111E–AUTO–07/08
• Bit 3 – V: Two’s Complement Overflow Flag
The Two’s Complement Overflow Flag V supports two’s complement arithmetics. See the
“Instruction Set Description” for detailed information.
• Bit 2 – N: Negative Flag
The Negative Flag N indicates a negative result in an arithmetic or logic operation. See the
“Instruction Set Description” for detailed information.
• Bit 1 – Z: Zero Flag
The Zero Flag Z indicates a zero result in an arithmetic or logic operation. See the “Instruc-
tion Set Description” for detailed information.
• Bit 0 – C: Carry Flag
The Carry Flag C indicates a carry in an arithmetic or logic operation. See the “Instruction
Set Description” for detailed information.
7 0 Address
R0 0x00
R1 0x01
R2 0x02
...
R13 0x0D
R14 0x0E
General R15 0x0F
Purpose
R16 0x10
Working
Registers R17 0x11
...
R26 0x1A X-register Low Byte
R27 0x1B X-register High Byte
R28 0x1C Y-register Low Byte
R29 0x1D Y-register High Byte
R30 0x1E Z-register Low Byte
R31 0x1F Z-register High Byte
36 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Most of the instructions operating on the Register File have direct access to all registers, and
most of them are single cycle instructions.
As shown in Figure 6-3 on page 36, each register is also assigned a data memory address,
mapping them directly into the first 32 locations of the user Data Space. Although not being
physically implemented as SRAM locations, this memory organization provides great flexibility in
access of the registers, as the X-, Y- and Z-pointer registers can be set to index any register in
the file.
15 XH XL 0
X-register 7 0 7 0
R27 (0x1B) R26 (0x1A)
15 YH YL 0
Y-register 7 0 7 0
R29 (0x1D) R28 (0x1C)
15 ZH ZL 0
Z-register 7 0 7 0
R31 (0x1F) R30 (0x1E)
In the different addressing modes these address registers have functions as fixed displacement,
automatic increment, and automatic decrement (see the instruction set reference for details).
37
9111E–AUTO–07/08
The AVR Stack Pointer is implemented as two 8-bit registers in the I/O space. The number of
bits actually used is implementation dependent. Note that the data space in some implementa-
tions of the AVR architecture is so small that only SPL is needed. In this case, the SPH Register
will not be present.
Bit 15 14 13 12 11 10 9 8
SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
7 6 5 4 3 2 1 0
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
clkCPU
1st Instruction Fetch
1st Instruction Execute
2nd Instruction Fetch
2nd Instruction Execute
3rd Instruction Fetch
3rd Instruction Execute
4th Instruction Fetch
Figure 6-6 on page 39 shows the internal timing concept for the Register File. In a single clock
cycle an ALU operation using two register operands is executed, and the result is stored back to
the destination register.
38 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
clkCPU
Total Execution Time
39
9111E–AUTO–07/08
Note that the Status Register is not automatically stored when entering an interrupt routine, nor
restored when returning from an interrupt routine. This must be handled by software.
When using the CLI instruction to disable interrupts, the interrupts will be immediately disabled.
No interrupt will be executed after the CLI instruction, even if it occurs simultaneously with the
CLI instruction. The following example shows how this can be used to avoid interrupts during the
timed EEPROM write sequence.
Assembly Code Example
in r16, SREG ; store SREG value
cli ; disable interrupts during timed sequence
sbi EECR, EEMPE ; start EEPROM write
sbi EECR, EEPE
out SREG, r16 ; restore SREG value (I-bit)
C Code Example
char cSREG;
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
_CLI();
EECR |= (1<<EEMPE); /* start EEPROM write */
EECR |= (1<<EEPE);
SREG = cSREG; /* restore SREG value (I-bit) */
When using the SEI instruction to enable interrupts, the instruction following SEI will be exe-
cuted before any pending interrupts, as shown in this example.
Assembly Code Example
sei ; set Global Interrupt Enable
sleep; enter sleep, waiting for interrupt
; note: will enter sleep before any pending interrupt(s)
C Code Example
__enable_interrupt(); /* set Global Interrupt Enable */
__sleep(); /* enter sleep, waiting for interrupt */
/* note: will enter sleep before any pending interrupt(s) */
40 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
0x0000
0x7FF
41
9111E–AUTO–07/08
Figure 6-8. Program Memory Map, ATA6612/ATA6613
Program Memory
0x0000
42 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
43
9111E–AUTO–07/08
6.5.2.1 Data Memory Access Times
This section describes the general access timing concepts for internal memory access. The
internal data SRAM access is performed in two clkCPU cycles as described in Figure 6-10.
clkCPU
Data
Write
WR
Data
Read
RD
44 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
– – – – – – – EEAR8 EEARH
7 6 5 4 3 2 1 0
Read/Write R R R R R R R R/W
Initial Value 0 0 0 0 0 0 0 X
X X X X X X X X
Initial Value 0 0 0 0 0 0 0 0
Initial Value 0 0 X X 0 0 X 0
45
9111E–AUTO–07/08
The Programming times for the different modes are shown in Table 6-2. While EEPE is set,
any write to EEPMn will be ignored. During reset, the EEPMn bits will be reset to 0b00
unless the EEPROM is busy programming.
46 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When the write access time has elapsed, the EEPE bit is cleared by hardware. The user
software can poll this bit and wait for a zero before writing the next byte. When EEPE has
been set, the CPU is halted for two cycles before the next instruction is executed.
• Bit 0 – EERE: EEPROM Read Enable
The EEPROM Read Enable Signal EERE is the read strobe to the EEPROM. When the cor-
rect address is set up in the EEAR Register, the EERE bit must be written to a logic one to
trigger the EEPROM read. The EEPROM read access takes one instruction, and the
requested data is available immediately. When the EEPROM is read, the CPU is halted for
four cycles before the next instruction is executed.
The user should poll the EEPE bit before starting the read operation. If a write operation is in
progress, it is neither possible to read the EEPROM, nor to change the EEAR Register.
The calibrated Oscillator is used to time the EEPROM accesses. Table 6-3 lists the typical
programming time for EEPROM access from the CPU.
The following code examples show one assembly and one C function for writing to the
EEPROM. The examples assume that interrupts are controlled (e.g. by disabling interrupts glob-
ally) so that no interrupts will occur during execution of these functions. The examples also
assume that no Flash Boot Loader is present in the software. If such code is present, the
EEPROM write function must also wait for any ongoing SPM command to finish.
47
9111E–AUTO–07/08
Assembly Code Example
EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEPE
rjmp EEPROM_write
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Write data (r16) to Data Register
out EEDR,r16
; Write logical one to EEMPE
sbi EECR,EEMPE
; Start eeprom write by setting EEPE
sbi EECR,EEPE
ret
C Code Example
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address and Data Registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}
The next code examples show assembly and C functions for reading the EEPROM. The exam-
ples assume that interrupts are controlled so that no interrupts will occur during execution of
these functions.
48 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
49
9111E–AUTO–07/08
6.5.4 I/O Memory
The I/O space definition of the ATA6612/ATA6613 is shown in “Register Summary” on page
344.
All ATA6612/ATA6613 I/Os and peripherals are placed in the I/O space. All I/O locations may be
accessed by the LD/LDS/LDD and ST/STS/STD instructions, transferring data between the 32
general purpose working registers and the I/O space. I/O Registers within the address range
0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these registers, the
value of single bits can be checked by using the SBIS and SBIC instructions. Refer to the
instruction set section for more details. When using the I/O specific commands IN and OUT, the
I/O addresses 0x00 - 0x3F must be used. When addressing I/O Registers as data space using
LD and ST instructions, 0x20 must be added to these addresses. The ATA6612/ATA6613 is a
complex microcontroller with more peripheral units than can be supported within the 64 location
reserved in Opcode for the IN and OUT instructions. For the Extended I/O space from 0x60 -
0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can be used.
For compatibility with future devices, reserved bits should be written to zero if accessed.
Reserved I/O memory addresses should never be written. Some of the Status Flags are cleared
by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI instructions
will only operate on the specified bit, and can therefore be used on registers containing such
Status Flags. The CBI and SBI instructions work with registers 0x00 to 0x1F only. The I/O and
peripherals control registers are explained in later sections.
Initial Value 0 0 0 0 0 0 0 0
Initial Value 0 0 0 0 0 0 0 0
Initial Value 0 0 0 0 0 0 0 0
50 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
clkADC
clkASY clkFLASH
Clock Watchdog
Multiplexer Oscillator
51
9111E–AUTO–07/08
6.6.1.4 Asynchronous Timer Clock – clkASY
The Asynchronous Timer clock allows the Asynchronous Timer/Counter to be clocked directly
from an external clock or an external 32 kHz clock crystal. The dedicated clock domain allows
using this Timer/Counter as a real-time counter even when the device is in sleep mode.
Note: 1. For all fuses “1” means unprogrammed while “0” means programmed.
52 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
C2
XTAL2
C1
XTAL1
GND
The Low Power Oscillator can operate in three different modes, each optimized for a specific fre-
quency range. The operating mode is selected by the fuses CKSEL3..1 as shown in Table 6-6
on page 54.
53
9111E–AUTO–07/08
Table 6-6. Low Power Crystal Oscillator Operating Modes(3)
Recommended Range for Capacitors C1
Frequency Range(1) (MHz) CKSEL3..1 and C2 (pF)
0.4 - 0.9 100(2) –
0.9 - 3.0 101 12 - 22
3.0 - 8.0 110 12 - 22
8.0 - 16.0 111 12 - 22
Notes: 1. The frequency ranges are preliminary values. Actual values are TBD.
2. This option should not be used with crystals, only with ceramic resonators.
3. If 8 MHz frequency exceeds the specification of the device (depends on VCC), the CKDIV8
Fuse can be programmed in order to divide the internal frequency by 8. It must be ensured
that the resulting divided clock meets the frequency specification of the device.
The CKSEL0 Fuse together with the SUT1..0 Fuses select the start-up times as shown in Table
6-7.
Table 6-7. Start-up Times for the Low Power Crystal Oscillator Clock Selection
Start-up Time from Additional Delay
Oscillator Source/ Power-down and from Reset
Power Conditions Power-save (VCC = 5.0V) CKSEL0 SUT1..0
Ceramic resonator, fast
258 CK 14CK + 4.1 ms(1) 0 00
rising power
Ceramic resonator, slowly
258 CK 14CK + 65 ms(1) 0 01
rising power
Ceramic resonator, BOD
1K CK 14CK(2) 0 10
enabled
Ceramic resonator, fast
1K CK 14CK + 4.1 ms(2) 0 11
rising power
Ceramic resonator, slowly
1K CK 14CK + 65 ms(2) 1 00
rising power
Crystal Oscillator, BOD
16K CK 14CK 1 01
enabled
Crystal Oscillator, fast
16K CK 14CK + 4.1 ms 1 10
rising power
Crystal Oscillator, slowly
16K CK 14CK + 65 ms 1 11
rising power
Notes: 1. These options should only be used when not operating close to the maximum frequency of the
device, and only if frequency stability at start-up is not important for the application. These
options are not suitable for crystals.
2. These options are intended for use with ceramic resonators and will ensure frequency stability
at start-up. They can also be used with crystals when not operating close to the maximum fre-
quency of the device, and if frequency stability at start-up is not important for the application.
54 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Notes: 1. The frequency ranges are preliminary values. Actual values are TBD.
2. If 8 MHz frequency exceeds the specification of the device (depends on VCC), the CKDIV8
Fuse can be programmed in order to divide the internal frequency by 8. It must be ensured
that the resulting divided clock meets the frequency specification of the device.
C2
XTAL2
C1
XTAL1
GND
55
9111E–AUTO–07/08
Table 6-9. Start-up Times for the Full Swing Crystal Oscillator Clock Selection
Start-up Time from Additional Delay
Oscillator Source/ Power-down and from Reset
Power Conditions Power-save (VCC = 5.0V) CKSEL0 SUT1..0
Ceramic resonator, fast
258 CK 14CK + 4.1 ms(1) 0 00
rising power
Ceramic resonator, slowly
258 CK 14CK + 65 ms(1) 0 01
rising power
Ceramic resonator, BOD
1K CK 14CK(2) 0 10
enabled
Ceramic resonator, fast
1K CK 14CK + 4.1 ms(2) 0 11
rising power
Ceramic resonator, slowly
1K CK 14CK + 65 ms(2) 1 00
rising power
Crystal Oscillator, BOD
16K CK 14CK 1 01
enabled
Crystal Oscillator, fast
16K CK 14CK + 4.1 ms 1 10
rising power
Crystal Oscillator, slowly
16K CK 14CK + 65 ms 1 11
rising power
Notes: 1. These options should only be used when not operating close to the maximum frequency of the
device, and only if frequency stability at start-up is not important for the application. These
options are not suitable for crystals.
2. These options are intended for use with ceramic resonators and will ensure frequency stability
at start-up. They can also be used with crystals when not operating close to the maximum fre-
quency of the device, and if frequency stability at start-up is not important for the application.
Table 6-10. Start-up Times for the Low Frequency Crystal Oscillator Clock Selection
Start-up Time from Additional Delay
Power-down and from Reset
Power Conditions Power-save (VCC = 5.0V) CKSEL0 SUT1..0
(1)
BOD enabled 1K CK 14CK 0 00
(1)
Fast rising power 1K CK 14CK + 4.1 ms 0 01
Slowly rising power 1K CK 14CK + 65 ms(1) 0 10
Reserved 0 11
BOD enabled 32K CK 14CK 1 00
Fast rising power 32K CK 14CK + 4.1 ms 1 01
Slowly rising power 32K CK 14CK + 65 ms 1 10
Reserved 1 11
Note: 1. These options should only be used if frequency stability at start-up is not important for the
application.
56 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-12. Start-up Times for the Internal Calibrated RC Oscillator Clock Selection
Start-up Time from Additional Delay from
Power Conditions Power-down and Power-save Reset (VCC = 5.0V) SUT1..0
(1)
BOD enabled 6 CK 14CK 00
Fast rising power 6 CK 14CK + 4.1 ms 01
(2)
Slowly rising power 6 CK 14CK + 65 ms 10
Reserved 11
Note: 1. If the RSTDISBL fuse is programmed, this start-up time will be increased to
14CK + 4.1 ms to ensure programming mode can be entered.
2. The device is shipped with this option selected.
57
9111E–AUTO–07/08
6.6.6.1 Oscillator Calibration Register – OSCCAL
Bit 7 6 5 4 3 2 1 0
58 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-14. Start-up Times for the 128 kHz Internal Oscillator
Start-up Time from Additional Delay from
Power Conditions Power-down and Power-save Reset SUT1..0
(1)
BOD enabled 6 CK 14CK 00
Fast rising power 6 CK 14CK + 4 ms 01
Slowly rising power 6 CK 14CK + 64 ms 10
Reserved 11
Note: 1. If the RSTDISBL fuse is programmed, this start-up time will be increased to
14CK + 4.1 ms to ensure programming mode can be entered.
Notes: 1. The frequency ranges are preliminary values. Actual values are TBD.
2. If 8 MHz frequency exceeds the specification of the device (depends on VCC), the CKDIV8
Fuse can be programmed in order to divide the internal frequency by 8. It must be ensured
that the resulting divided clock meets the frequency specification of the device.
NC XTAL2
EXTERNAL
CLOCK XTAL1
SIGNAL
GND
When this clock source is selected, start-up times are determined by the SUT Fuses as shown in
Table 6-16.
59
9111E–AUTO–07/08
When applying an external clock, it is required to avoid sudden changes in the applied clock fre-
quency to ensure stable operation of the MCU. A variation in frequency of more than 2% from
one clock cycle to the next can lead to unpredictable behavior. If changes of more than 2% is
required, ensure that the MCU is kept in Reset during the changes.
Note that the System Clock Prescaler can be used to implement run-time changes of the internal
clock frequency while still ensuring stable operation. Refer to “System Clock Prescaler” on page
60 for details.
60 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
To avoid unintentional changes of clock frequency, a special write procedure must be followed
to change the CLKPS bits:
1. Write the Clock Prescaler Change Enable (CLKPCE) bit to one and all other bits in
CLKPR to zero.
2. Within four cycles, write the desired value to CLKPS while writing a zero to CLKPCE.
Interrupts must be disabled when changing prescaler setting to make sure the write procedure is
not interrupted.
61
9111E–AUTO–07/08
Table 6-17. Clock Prescaler Select
CLKPS3 CLKPS2 CLKPS1 CLKPS0 Clock Division Factor
0 0 0 0 1
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 Reserved
1 0 1 0 Reserved
1 0 1 1 Reserved
1 1 0 0 Reserved
1 1 0 1 Reserved
1 1 1 0 Reserved
1 1 1 1 Reserved
62 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. Standby mode is only recommended for use with external crystals or resonators.
• Bit 0 – SE: Sleep Enable
The SE bit must be written to logic one to make the MCU enter the sleep mode when the
SLEEP instruction is executed. To avoid the MCU entering the sleep mode unless it is the
programmer’s purpose, it is recommended to write the Sleep Enable (SE) bit to one just
before the execution of the SLEEP instruction and to clear it immediately after waking up.
63
9111E–AUTO–07/08
6.7.3 ADC Noise Reduction Mode
When the SM2..0 bits are written to 001, the SLEEP instruction makes the MCU enter ADC
Noise Reduction mode, stopping the CPU but allowing the ADC, the external interrupts, the
2-wire Serial Interface address watch, Timer/Counter2, and the Watchdog to continue operating
(if enabled). This sleep mode basically halts clkI/O, clkCPU, and clkFLASH, while allowing the other
clocks to run.
This improves the noise environment for the ADC, enabling higher resolution measurements. If
the ADC is enabled, a conversion starts automatically when this mode is entered. Apart from the
ADC Conversion Complete interrupt, only an External Reset, a Watchdog System Reset, a
Watchdog Interrupt, a Brown-out Reset, a 2-wire Serial Interface address match, a
Timer/Counter2 interrupt, an SPM/EEPROM ready interrupt, an external level interrupt on INT0
or INT1 or a pin change interrupt can wake up the MCU from ADC Noise Reduction mode.
64 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-19. Active Clock Domains and Wake-up Sources in the Different Sleep Modes
Active Clock Domains Oscillators Wake-up Sources
Source Enabled
Timer Oscillator
SPM/EEPROM
INT1, INT0 and
TWI Address
Pin Change
Main Clock
Other I/O
Enabled
clkFLASH
Timer2
Ready
Match
clkCPU
clkADC
clkASY
WDT
ADC
clkIO
Sleep Mode
Idle X X X X X(2) X X X X X X X
ADC Noise
X X X X(2) X(3) X X X X X
Reduction
Power-down X(3) X X
(3)
Power-save X X X X X X
(1) (3)
Standby X X X X
Notes: 1. Only recommended with external crystal or resonator selected as clock source.
2. If Timer/Counter2 is running in asynchronous mode.
3. For INT1 and INT0, only level interrupt.
65
9111E–AUTO–07/08
6.7.7.1 Power Reduction Register - PRR
Bit 7 6 5 4 3 2 1 0
PRTWI PRTIM2 PRTIM0 – PRTIM1 PRSPI PRUSART0 PRADC PRR
Read/Write R/W R/W R/W R R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
66 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
67
9111E–AUTO–07/08
6.7.8.6 Port Pins
When entering a sleep mode, all port pins should be configured to use minimum power. The
most important is then to ensure that no pins drive resistive loads. In sleep modes where both
the I/O clock (clkI/O) and the ADC clock (clkADC) are stopped, the input buffers of the device will
be disabled. This ensures that no power is consumed by the input logic when not needed. In
some cases, the input logic is needed for detecting wake-up conditions, and it will then be
enabled. Refer to the section “Digital Input Enable and Sleep Modes” on page 94 for details on
which pins are enabled. If the input buffer is enabled and the input signal is left floating or have
an analog signal level close to VCC/2, the input buffer will use excessive power.
For analog input pins, the digital input buffer should be disabled at all times. An analog signal
level close to VCC/2 on an input pin can cause significant current even in active mode. Digital
input buffers can be disabled by writing to the Digital Input Disable Registers (DIDR1 and
DIDR0). Refer to “Digital Input Disable Register 1 – DIDR1” on page 264 and “Digital Input Dis-
able Register 0 – DIDR0” on page 281 for details.
68 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
MCU Status
Register (MCUSR)
PORF
BORF
EXTRF
WDRF
VCC
Power-on Reset
Circuit
Brown-out
BODLEVEL [2..0] Reset Circuit
INTERNAL RESET
Pull-up Resistor
Reset Q
Circuit S
R
COUNTER RESET
SPIKE
RESET FILTER Watchdog
Timer
RSTDISBL
Watchdog
Oscillator
CKSEL[3:0]
SUT[1:0]
69
9111E–AUTO–07/08
6.8.3 Power-on Reset
A Power-on Reset (POR) pulse is generated by an On-chip detection circuit. The detection level
is defined in Table 6-20. The POR is activated whenever VCC is below the detection level. The
POR circuit can be used to trigger the start-up Reset, as well as to detect a failure in supply
voltage.
A Power-on Reset (POR) circuit ensures that the device is reset from Power-on. Reaching the
Power-on Reset threshold voltage invokes the delay counter, which determines how long the
device is kept in RESET after VCC rise. The RESET signal is activated again, without any delay,
when VCC decreases below the detection level.
VPORMAX
VPORMIN
RESET
VRST
tTOUT
TIME-OUT
INTERNAL
RESET
VCC
VRST
RESET
tTOUT
TIME-OUT
INTERNAL
RESET
70 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
RESET
VRST
tTOUT
TIME-OUT
INTERNAL
RESET
Notes: 1. VBOT may be below nominal minimum operating voltage for some devices. For devices where
this is the case, the device is tested down to VCC = VBOT during the production test. This guar-
antees that a Brown-Out Reset will occur before VCC drops to a voltage where correct
operation of the microcontroller is no longer guaranteed. The test is performed using
BODLEVEL = 110 and BODLEVEL = 101 for ATA6612V/ATA6613V, and BODLEVEL = 101
and BODLEVEL = 101 for ATA6612/ATA6613.
71
9111E–AUTO–07/08
Table 6-22. Brown-out Characteristics
Symbol Parameter Min Typ Max Units
VHYST Brown-out Detector Hysteresis 50 mV
tBOD Min Pulse Width on Brown-out Reset ns
When the BOD is enabled, and VCC decreases to a value below the trigger level (VBOT- in Figure
6-19), the Brown-out Reset is immediately activated. When VCC increases above the trigger
level (VBOT+ in Figure 6-19), the delay counter starts the MCU after the Time-out period tTOUT has
expired.
The BOD circuit will only detect a drop in VCC if the voltage stays below the trigger level for lon-
ger than tBOD given in Table 6-20 on page 70.
VCC VBOT+
VBOT-
RESET
TIME-OUT tTOUT
INTERNAL
RESET
RESET
1 CK Cycle
WDT
TIME-OUT
RESET tTOUT
TIME-OUT
INTERNAL
RESET
72 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
73
9111E–AUTO–07/08
Table 6-23. Internal Voltage Reference Characteristics(1)
Symbol Parameter Condition Min Typ Max Units
VBG Bandgap reference voltage TBD 1.0 1.1 1.2 V
tBG Bandgap reference start-up time TBD 40 70 µs
IBG Bandgap reference current consumption TBD 10 TBD µA
Note: 1. Values are guidelines only. Actual values are TBD.
WATCHOG
128kHz PRESCALER
OSCILLATOR
OSC/2K
OSC/4K
OSC/8K
OSC/16K
OSC/32K
OSC/64K
OSC/128K
OSC/256K
OSC/512K
OSC/1024K
WDP0
WDP1
WATCHDOG WDP2
RESET
WDP3
WDE
MCU RESET
WDIF
INTERRUPT
WDIE
The Watchdog Timer (WDT) is a timer counting cycles of a separate on-chip 128 kHz oscillator.
The WDT gives an interrupt or a system reset when the counter reaches a given time-out value.
In normal operation mode, it is required that the system uses the WDR - Watchdog Timer Reset
- instruction to restart the counter before the time-out value is reached. If the system doesn't
restart the counter, an interrupt or system reset will be issued.
74 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
In Interrupt mode, the WDT gives an interrupt when the timer expires. This interrupt can be used
to wake the device from sleep-modes, and also as a general system timer. One example is to
limit the maximum time allowed for certain operations, giving an interrupt when the operation
has run longer than expected. In System Reset mode, the WDT gives a reset when the timer
expires. This is typically used to prevent system hang-up in case of runaway code. The third
mode, Interrupt and System Reset mode, combines the other two modes by first giving an inter-
rupt and then switch to System Reset mode. This mode will for instance allow a safe shutdown
by saving critical parameters before a system reset.
The Watchdog always on (WDTON) fuse, if programmed, will force the Watchdog Timer to Sys-
tem Reset mode. With the fuse programmed the System Reset mode bit (WDE) and Interrupt
mode bit (WDIE) are locked to 1 and 0 respectively. To further ensure program security, altera-
tions to the Watchdog set-up must follow timed sequences. The sequence for clearing WDE and
changing time-out configuration is as follows:
1. In the same operation, write a logic one to the Watchdog change enable bit (WDCE)
and WDE. A logic one must be written to WDE regardless of the previous value of the
WDE bit.
2. Within the next four clock cycles, write the WDE and Watchdog prescaler bits (WDP) as
desired, but with the WDCE bit cleared. This must be done in one operation.
The following code example shows one assembly and one C function for turning off the Watch-
dog Timer. The example assumes that interrupts are controlled (e.g. by disabling interrupts
globally) so that no interrupts will occur during the execution of these functions.
75
9111E–AUTO–07/08
Assembly Code Example(1)
WDT_off:
; Turn off global interrupt
cli
; Reset Watchdog Timer
wdr
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, (0xff & (0<<WDRF))
out MCUSR, r16
; Write logical one to WDCE and WDE
; Keep old prescaler setting to prevent unintentional time-out
lds r16, WDTCSR
ori r16, (1<<WDCE) | (1<<WDE)
sts WDTCSR, r16
; Turn off WDT
ldi r16, (0<<WDE)
sts WDTCSR, r16
; Turn on global interrupt
sei
ret
C Code Example(1)
void WDT_off(void)
{
__disable_interrupt();
__watchdog_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCSR = 0x00;
__enable_interrupt();
}
Note: 1. The example code assumes that the part specific header file is included.
Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition,
the device will be reset and the Watchdog Timer will stay enabled. If the code is not set up to han-
dle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this situation, the
application software should always clear the Watchdog System Reset Flag (WDRF) and the WDE
control bit in the initialization routine, even if the Watchdog is not in use.
76 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The following code example shows one assembly and one C function for changing the time-out
value of the Watchdog Timer.
77
9111E–AUTO–07/08
6.8.9.1 Watchdog Timer Control Register - WDTCSR
Bit 7 6 5 4 3 2 1 0
WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCSR
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value 0 0 0 0 X 0 0 0
78 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.9 Interrupts
This section describes the specifics of the interrupt handling as performed in
ATA6612/ATA6613. For a general explanation of the AVR interrupt handling, refer to “Reset and
Interrupt Handling” on page 39.
The interrupt vectors in ATA6612 and ATA6613 are generally the same, with the following
differences:
• Each Interrupt Vector occupies two instruction words in ATA6613, and one instruction word in
ATA6612.
• In ATA6612 and ATA6613, the Reset Vector is affected by the BOOTRST fuse, and the
Interrupt Vector start address is affected by the IVSEL bit in MCUCR.
79
9111E–AUTO–07/08
6.9.1 Interrupt Vectors in ATA6612
80 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
81
9111E–AUTO–07/08
When the BOOTRST Fuse is unprogrammed, the Boot section size set to 2K bytes and the
IVSEL bit in the MCUCR Register is set before any interrupts are enabled, the most typical and
general program setup for the Reset and Interrupt Vector Addresses in ATA6612 is:
Address Labels Code Comments
0x000 RESET: ldi r16,high(RAMEND); Main program start
0x001 out SPH,r16 ; Set Stack Pointer to top of RAM
0x002 ldi r16,low(RAMEND)
0x003 out SPL,r16
0x004 sei ; Enable interrupts
0x005 <instr> xxx
;
.org 0xC01
0xC01 rjmp EXT_INT0 ; IRQ0 Handler
0xC02 rjmp EXT_INT1 ; IRQ1 Handler
... ... ... ;
0xC19 rjmp SPM_RDY ; Store Program Memory Ready Handler
When the BOOTRST Fuse is programmed and the Boot section size set to 2K bytes, the most
typical and general program setup for the Reset and Interrupt Vector Addresses in ATA6612 is:
Address Labels Code Comments
.org 0x001
0x001 rjmp EXT_INT0 ; IRQ0 Handler
0x002 rjmp EXT_INT1 ; IRQ1 Handler
... ... ... ;
0x019 rjmp SPM_RDY ; Store Program Memory Ready Handler
;
.org 0xC00
0xC00 RESET: ldi r16,high(RAMEND); Main program start
0xC01 out SPH,r16 ; Set Stack Pointer to top of RAM
0xC02 ldi r16,low(RAMEND)
0xC03 out SPL,r16
0xC04 sei ; Enable interrupts
0xC05 <instr> xxx
82 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When the BOOTRST Fuse is programmed, the Boot section size set to 2K bytes and the IVSEL
bit in the MCUCR Register is set before any interrupts are enabled, the most typical and general
program setup for the Reset and Interrupt Vector Addresses in ATA6612 is:
83
9111E–AUTO–07/08
Table 6-28. Reset and Interrupt Vectors in ATA6613 (Continued)
Program
Vector No. Address(2) Source Interrupt Definition
22 0x002A ADC ADC Conversion Complete
23 0x002C EE READY EEPROM Ready
24 0x002E ANALOG COMP Analog Comparator
25 0x0030 TWI 2-wire Serial Interface
26 0x0032 SPM READY Store Program Memory Ready
Notes: 1. When the BOOTRST Fuse is programmed, the device will jump to the Boot Loader address at
reset (see “Boot Loader Support – Read-While-Write Self-Programming, ATA6612 and
ATA6613” on page 284).
2. When the IVSEL bit in MCUCR is set, Interrupt Vectors will be moved to the start of the Boot
Flash Section. The address of each Interrupt Vector will then be the address in this table
added to the start address of the Boot Flash Section.
Table 6-29 shows reset and Interrupt Vectors placement for the various combinations of
BOOTRST and IVSEL settings. If the program never enables an interrupt source, the Interrupt
Vectors are not used, and regular program code can be placed at these locations. This is also
the case if the Reset Vector is in the Application section while the Interrupt Vectors are in the
Boot section or vice versa.
Note: 1. The Boot Reset Address is shown in Table 6-107 on page 298. For the BOOTRST Fuse “1”
means unprogrammed while “0” means programmed.
84 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The most typical and general program setup for the Reset and Interrupt Vector Addresses in
ATA6613 is:
Address Labels Code Comments
0x0000 jmp RESET ; Reset Handler
0x0002 jmp EXT_INT0 ; IRQ0 Handler
0x0004 jmp EXT_INT1 ; IRQ1 Handler
0x0006 jmp PCINT0 ; PCINT0 Handler
0x0008 jmp PCINT1 ; PCINT1 Handler
0x000A jmp PCINT2 ; PCINT2 Handler
0x000C jmp WDT ; Watchdog Timer Handler
0x000E jmp TIM2_COMPA ; Timer2 Compare A Handler
0x0010 jmp TIM2_COMPB ; Timer2 Compare B Handler
0x0012 jmp TIM2_OVF ; Timer2 Overflow Handler
0x0014 jmp TIM1_CAPT ; Timer1 Capture Handler
0x0016 jmp TIM1_COMPA ; Timer1 Compare A Handler
0x0018 jmp TIM1_COMPB ; Timer1 Compare B Handler
0x001A jmp TIM1_OVF ; Timer1 Overflow Handler
0x001C jmp TIM0_COMPA ; Timer0 Compare A Handler
0x001E jmp TIM0_COMPB ; Timer0 Compare B Handler
0x0020 jmp TIM0_OVF ; Timer0 Overflow Handler
0x0022 jmp SPI_STC ; SPI Transfer Complete Handler
0x0024 jmp USART_RXC ; USART, RX Complete Handler
0x0026 jmp USART_UDRE ; USART, UDR Empty Handler
0x0028 jmp USART_TXC ; USART, TX Complete Handler
0x002A jmp ADC ; ADC Conversion Complete Handler
0x002C jmp EE_RDY ; EEPROM Ready Handler
0x002E jmp ANA_COMP ; Analog Comparator Handler
0x0030 jmp TWI ; 2-wire Serial Interface Handler
0x0032 jmp SPM_RDY ; Store Program Memory Ready Handler
;
0x0033RESET: ldi r16, high(RAMEND); Main program start
0x0034 out SPH,r16 ; Set Stack Pointer to top of RAM
0x0035 ldi r16, low(RAMEND)
0x0036 out SPL,r16
0x0037 sei ; Enable interrupts
0x0038 <instr> xxx
... ... ... ...
85
9111E–AUTO–07/08
When the BOOTRST Fuse is unprogrammed, the Boot section size set to 2K bytes and the
IVSEL bit in the MCUCR Register is set before any interrupts are enabled, the most typical and
general program setup for the Reset and Interrupt Vector Addresses in ATA6613 is:
Address Labels Code Comments
0x0000 RESET: ldi r16,high(RAMEND); Main program start
0x0001 out SPH,r16 ; Set Stack Pointer to top of RAM
0x0002 ldi r16,low(RAMEND)
0x0003 out SPL,r16
0x0004 sei ; Enable interrupts
0x0005 <instr> xxx
;
.org 0xC02
0x1C02 jmp EXT_INT0 ; IRQ0 Handler
0x1C04 jmp EXT_INT1 ; IRQ1 Handler
... ... ... ;
0x1C32 jmp SPM_RDY ; Store Program Memory Ready Handler
When the BOOTRST Fuse is programmed and the Boot section size set to 2K bytes, the most
typical and general program setup for the Reset and Interrupt Vector Addresses in ATA6613 is:
Address Labels Code Comments
.org 0x0002
0x0002 jmp EXT_INT0 ; IRQ0 Handler
0x0004 jmp EXT_INT1 ; IRQ1 Handler
... ... ... ;
0x0032 jmp SPM_RDY ; Store Program Memory Ready Handler
;
.org 0x1C00
0x1C00 RESET: ldi r16,high(RAMEND); Main program start
0x1C01 out SPH,r16 ; Set Stack Pointer to top of RAM
0x1C02 ldi r16,low(RAMEND)
0x1C03 out SPL,r16
0x1C04 sei ; Enable interrupts
0x1C05 <instr> xxx
86 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When the BOOTRST Fuse is programmed, the Boot section size set to 2K bytes and the IVSEL
bit in the MCUCR Register is set before any interrupts are enabled, the most typical and general
program setup for the Reset and Interrupt Vector Addresses in ATA6613 is:
Address Labels Code Comments
;
.org 0x1C00
0x1C00 jmp RESET ; Reset handler
0x1C02 jmp EXT_INT0 ; IRQ0 Handler
0x1C04 jmp EXT_INT1 ; IRQ1 Handler
... ... ... ;
0x1C32 jmp SPM_RDY ; Store Program Memory Ready Handler
;
0x1C33 RESET: ldi r16,high(RAMEND); Main program start
0x1C34 out SPH,r16 ; Set Stack Pointer to top of RAM
0x1C35 ldi r16,low(RAMEND)
0x1C36 out SPL,r16
0x1C37 sei ; Enable interrupts
0x1C38 <instr> xxx
6.9.2.1 Moving Interrupts Between Application and Boot Space, ATA6612 and ATA6613
The MCU Control Register controls the placement of the Interrupt Vector table.
87
9111E–AUTO–07/08
• Bit 0 – IVCE: Interrupt Vector Change Enable
The IVCE bit must be written to logic one to enable change of the IVSEL bit. IVCE is cleared
by hardware four cycles after it is written or when IVSEL is written. Setting the IVCE bit will
disable interrupts, as explained in the IVSEL description above. See Code Example below.
Assembly Code Example
Move_interrupts:
; Enable change of Interrupt Vectors
ldi r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ldi r16, (1<<IVSEL)
out MCUCR, r16
ret
C Code Example
void Move_interrupts(void)
{
/* Enable change of Interrupt Vectors */
MCUCR = (1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = (1<<IVSEL);
}
6.10 I/O-Ports
6.10.1 Introduction
All AVR ports have true Read-Modify-Write functionality when used as general digital I/O ports.
This means that the direction of one port pin can be changed without unintentionally changing
the direction of any other pin with the SBI and CBI instructions. The same applies when chang-
ing drive value (if configured as output) or enabling/disabling of pull-up resistors (if configured as
input). Each output buffer has symmetrical drive characteristics with both high sink and source
capability. The pin driver is strong enough to drive LED displays directly. All port pins have indi-
vidually selectable pull-up resistors with a supply-voltage invariant resistance. All I/O pins have
protection diodes to both VCC and Ground as indicated in Figure 6-22 on page 89. Refer to
“Electrical Characteristics” on page 320 for a complete list of parameters.
88 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Rpu
Pxn Logic
Cpin
See Figure
"General Digital I/O" for
Details
All registers and bit references in this section are written in general form. A lower case “x” repre-
sents the numbering letter for the port, and a lower case “n” represents the bit number. However,
when using the register or bit defines in a program, the precise form must be used. For example,
PORTB3 for bit no. 3 in Port B, here documented generally as PORTxn. The physical I/O Regis-
ters and bit locations are listed in “Register Description for I/O Ports” on page 107.
Three I/O memory address locations are allocated for each port, one each for the Data Register
– PORTx, Data Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins
I/O location is read only, while the Data Register and the Data Direction Register are read/write.
However, writing a logic one to a bit in the PINx Register, will result in a toggle in the correspond-
ing bit in the Data Register. In addition, the Pull-up Disable – PUD bit in MCUCR disables the
pull-up function for all pins in all ports when set.
Using the I/O port as General Digital I/O is described in “Ports as General Digital I/O” on page
90. Most port pins are multiplexed with alternate functions for the peripheral features on the
device. How each alternate function interferes with the port pin is described in “Alternate Port
Functions” on page 95. Refer to the individual module sections for a full description of the alter-
nate functions.
Note that enabling the alternate function of some of the port pins does not affect the use of the
other pins in the port as general digital I/O.
89
9111E–AUTO–07/08
6.10.2 Ports as General Digital I/O
The ports are bi-directional I/O ports with optional internal pull-ups. Figure 6-23 shows a func-
tional description of one I/O-port pin, here generically called Pxn.
PUD
Q D
DDxn
QCLR
WDx
RESET
RDx
1
Pxn Q D
DATA BUS
PORTxn 0
QCLR
RESET
WPx
WRx
SLEEP RRx
SYNCHRONIZER
RPx
D Q D Q
PINxn
L Q Q
clk I/O
Note: 1. WRx, WPx, WDx, RRx, RPx, and RDx are common to all pins within the same port. clkI/O,
SLEEP, and PUD are common to all ports.
90 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
91
9111E–AUTO–07/08
Figure 6-24. Synchronization when Reading an Externally Applied Pin Value
SYSTEM CLK
SYNC LATCH
PINxn
Consider the clock period starting shortly after the first falling edge of the system clock. The latch
is closed when the clock is low, and goes transparent when the clock is high, as indicated by the
shaded region of the “SYNC LATCH” signal. The signal value is latched when the system clock
goes low. It is clocked into the PINxn Register at the succeeding positive clock edge. As indi-
cated by the two arrows tpd,max and tpd,min, a single signal transition on the pin will be delayed
between ½ and 1½ system clock period depending upon the time of assertion.
When reading back a software assigned pin value, a nop instruction must be inserted as indi-
cated in Figure 6-25. The out instruction sets the “SYNC LATCH” signal at the positive edge of
the clock. In this case, the delay tpd through the synchronizer is 1 system clock period.
SYSTEM CLK
r16 0xFF
SYNC LATCH
PINxn
92 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The following code example shows how to set port B pins 0 and 1 high, 2 and 3 low, and define
the port pins from 4 to 7 as input with pull-ups assigned to port pins 6 and 7. The resulting pin
values are read back again, but as previously discussed, a nop instruction is included to be able
to read back the value recently assigned to some of the pins.
Note: 1. For the assembly program, two temporary registers are used to minimize the time from
pull-ups are set on pins 0, 1, 6, and 7, until the direction bits are correctly set, defining bit 2 and
3 as low and redefining bits 0 and 1 as strong high drivers.
93
9111E–AUTO–07/08
6.10.2.5 Digital Input Enable and Sleep Modes
As shown in Figure 6-23 on page 90, the digital input signal can be clamped to ground at the
input of the Schmitt Trigger. The signal denoted SLEEP in the figure, is set by the MCU Sleep
Controller in Power-down mode, Power-save mode, and Standby mode to avoid high power
consumption if some input signals are left floating, or have an analog signal level close to VCC/2.
SLEEP is overridden for port pins enabled as external interrupt pins. If the external interrupt
request is not enabled, SLEEP is active also for these pins. SLEEP is also overridden by various
other alternate functions as described in “Alternate Port Functions” on page 95.
If a logic high level (“one”) is present on an asynchronous external interrupt pin configured as
“Interrupt on Rising Edge, Falling Edge, or Any Logic Change on Pin” while the external interrupt
is not enabled, the corresponding External Interrupt Flag will be set when resuming from the
above mentioned Sleep mode, as the clamping in these sleep mode produces the requested
logic change.
94 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
PUOExn
PUOVxn
1
0
PUD
DDOExn
DDOVxn
1
0 Q D
DDxn
Q CLR
WDx
PVOExn RESET
RDx
PVOVxn
DATA BUS
1 1
Pxn
0 Q D 0
PORTxn
PTOExn
Q CLR
DIEOExn
WPx
DIEOVxn RESET
1 WRx
RRx
0 SLEEP
SYNCHRONIZER
RPx
D SETQ D Q
PINxn
L CLR Q
CLR Q
clk I/O
DIxn
AIOxn
Note: 1. WRx, WPx, WDx, RRx, RPx, and RDx are common to all pins within the same port. clkI/O,
SLEEP, and PUD are common to all ports. All other signals are unique for each pin.
95
9111E–AUTO–07/08
Table 6-31 summarizes the function of the overriding signals. The pin and port indexes from Fig-
ure 6-26 on page 95 are not shown in the succeeding tables. The overriding signals are
generated internally in the modules having the alternate function.
The following subsections shortly describe the alternate functions for each port, and relate the
overriding signals to the alternate function. Refer to the alternate function description for further
details.
96 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
97
9111E–AUTO–07/08
The alternate pin configuration is as follows:
• XTAL2/TOSC2/PCINT7 – Port B, Bit 7
XTAL2: Chip clock Oscillator pin 2. Used as clock pin for crystal Oscillator or Low-frequency
crystal Oscillator. When used as a clock pin, the pin can not be used as an I/O pin.
TOSC2: Timer Oscillator pin 2. Used only if internal calibrated RC Oscillator is selected as
chip clock source, and the asynchronous timer is enabled by the correct setting in ASSR.
When the AS2 bit in ASSR is set (one) and the EXCLK bit is cleared (zero) to enable asyn-
chronous clocking of Timer/Counter2 using the Crystal Oscillator, pin PB7 is disconnected
from the port, and becomes the inverting output of the Oscillator amplifier. In this mode, a
crystal Oscillator is connected to this pin, and the pin cannot be used as an I/O pin.
PCINT7: Pin Change Interrupt source 7. The PB7 pin can serve as an external interrupt
source.
If PB7 is used as a clock pin, DDB7, PORTB7 and PINB7 will all read 0.
• XTAL1/TOSC1/PCINT6 – Port B, Bit 6
XTAL1: Chip clock Oscillator pin 1. Used for all chip clock sources except internal calibrated
RC Oscillator. When used as a clock pin, the pin can not be used as an I/O pin.
TOSC1: Timer Oscillator pin 1. Used only if internal calibrated RC Oscillator is selected as
chip clock source, and the asynchronous timer is enabled by the correct setting in ASSR.
When the AS2 bit in ASSR is set (one) to enable asynchronous clocking of Timer/Counter2,
pin PB6 is disconnected from the port, and becomes the input of the inverting Oscillator
amplifier. In this mode, a crystal Oscillator is connected to this pin, and the pin can not be
used as an I/O pin.
PCINT6: Pin Change Interrupt source 6. The PB6 pin can serve as an external interrupt
source.
If PB6 is used as a clock pin, DDB6, PORTB6 and PINB6 will all read 0.
• SCK/PCINT5 – Port B, Bit 5
SCK: Master Clock output, Slave Clock input pin for SPI channel. When the SPI is enabled
as a Slave, this pin is configured as an input regardless of the setting of DDB5. When the
SPI is enabled as a Master, the data direction of this pin is controlled by DDB5. When the
pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB5 bit.
PCINT5: Pin Change Interrupt source 5. The PB5 pin can serve as an external interrupt
source.
• MISO/PCINT4 – Port B, Bit 4
MISO: Master Data input, Slave Data output pin for SPI channel. When the SPI is enabled
as a Master, this pin is configured as an input regardless of the setting of DDB4. When the
SPI is enabled as a Slave, the data direction of this pin is controlled by DDB4. When the pin
is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB4 bit.
PCINT4: Pin Change Interrupt source 4. The PB4 pin can serve as an external interrupt
source.
98 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
99
9111E–AUTO–07/08
Table 6-33. Overriding Signals for Alternate Functions in PB7..PB4
Signal PB7/XTAL2/ PB6/XTAL1/ PB5/SCK/ PB4/MISO/
Name TOSC2/PCINT7(1) TOSC1/PCINT6(1) PCINT5 PCINT4
INTRC • EXTCK+
PUOE INTRC + AS2 SPE • MSTR SPE • MSTR
AS2
PUOV 0 0 PORTB5 • PUD PORTB4 • PUD
INTRC • EXTCK+
DDOE INTRC + AS2 SPE • MSTR SPE • MSTR
AS2
DDOV 0 0 0 0
PVOE 0 0 SPE • MSTR SPE • MSTR
SPI SLAVE
PVOV 0 0 SCK OUTPUT
OUTPUT
INTRC • EXTCK +
INTRC + AS2 +
DIEOE AS2 + PCINT7 • PCINT5 • PCIE0 PCINT4 • PCIE0
PCINT6 • PCIE0
PCIE0
(INTRC + EXTCK) •
DIEOV INTRC • AS2 1 1
AS2
PCINT5 INPUT PCINT4 INPUT
DI PCINT7 INPUT PCINT6 INPUT
SCK INPUT SPI MSTR INPUT
Oscillator/Clock
AIO Oscillator Output – –
Input
Notes: 1. INTRC means that one of the internal RC Oscillators are selected (by the CKSEL fuses),
EXTCK means that external clock is selected (by the CKSEL fuses).
100 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
101
9111E–AUTO–07/08
• SDA/ADC4/PCINT12 – Port C, Bit 4
SDA, 2-wire Serial Interface Data: When the TWEN bit in TWCR is set (one) to enable the
2-wire Serial Interface, pin PC4 is disconnected from the port and becomes the Serial Data
I/O pin for the 2-wire Serial Interface. In this mode, there is a spike filter on the pin to sup-
press spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain
driver with slew-rate limitation.
PC4 can also be used as ADC input Channel 4. Note that ADC input channel 4 uses digital
power.
PCINT12: Pin Change Interrupt source 12. The PC4 pin can serve as an external interrupt
source.
• ADC3/PCINT11 – Port C, Bit 3
PC3 can also be used as ADC input Channel 3. Note that ADC input channel 3 uses analog
power.
PCINT11: Pin Change Interrupt source 11. The PC3 pin can serve as an external interrupt
source.
• ADC2/PCINT10 – Port C, Bit 2
PC2 can also be used as ADC input Channel 2. Note that ADC input channel 2 uses analog
power.
PCINT10: Pin Change Interrupt source 10. The PC2 pin can serve as an external interrupt
source.
• ADC1/PCINT9 – Port C, Bit 1
PC1 can also be used as ADC input Channel 1. Note that ADC input channel 1 uses analog
power.
PCINT9: Pin Change Interrupt source 9. The PC1 pin can serve as an external interrupt
source.
• ADC0/PCINT8 – Port C, Bit 0
PC0 can also be used as ADC input Channel 0. Note that ADC input channel 0 uses analog
power.
PCINT8: Pin Change Interrupt source 8. The PC0 pin can serve as an external interrupt
source.
102 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-36 and Table 6-37 relate the alternate functions of Port C to the overriding signals
shown in Figure 6-26 on page 95.
Note: 1. When enabled, the 2-wire Serial Interface enables slew-rate controls on the output pins PC4
and PC5. This is not shown in the figure. In addition, spike filters are connected between the
AIO outputs shown in the port figure and the digital logic of the TWI module.
103
9111E–AUTO–07/08
6.10.3.4 Alternate Functions of Port D
The Port D pins with alternate functions are shown in Table 6-38.
104 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
105
9111E–AUTO–07/08
Table 6-39 and Table 6-40 relate the alternate functions of Port D to the overriding signals
shown in Figure 6-26 on page 95.
106 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
107
9111E–AUTO–07/08
6.10.4.8 The Port D Data Direction Register – DDRD
Bit 7 6 5 4 3 2 1 0
DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 DDRD
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
108 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
109
9111E–AUTO–07/08
6.11.2 External Interrupt Mask Register – EIMSK
Bit 7 6 5 4 3 2 1 0
– – – – – – INT1 INT0 EIMSK
Read/Write R R R R R R R/W R/W
Initial Value 0 0 0 0 0 0 0 0
110 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Bit 7 6 5 4 3 2 1 0
– – – – – PCIE2 PCIE1 PCIE0 PCICR
Read/Write R R R R R R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
– – – – – PCIF2 PCIF1 PCIF0 PCIFR
Read/Write R R R R R R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
111
9111E–AUTO–07/08
• Bit 0 - PCIF0: Pin Change Interrupt Flag 0
When a logic change on any PCINT7..0 pin triggers an interrupt request, PCIF0 becomes
set (one). If the I-bit in SREG and the PCIE0 bit in PCICR are set (one), the MCU will jump to
the corresponding Interrupt Vector. The flag is cleared when the interrupt routine is exe-
cuted. Alternatively, the flag can be cleared by writing a logical one to it.
112 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.12.1 Overview
A simplified block diagram of the 8-bit Timer/Counter is shown in Figure 6-27. The device-spe-
cific I/O Register and bit locations are listed in the “8-bit Timer/Counter Register Description” on
page 125.
The PRTIM0 bit in “Power Reduction Register - PRR” on page 66 must be written to zero to
enable Timer/Counter0 module.
Timer/Counter
TCNTn
= = 0
OCnA
(Int.Req.)
Waveform
= OCnA
Generation
OCRnA
Fixed OCnB
TOP (Int.Req.)
DATA BUS
Value
Waveform
= OCnB
Generation
OCRnB
TCCRnA TCCRnB
113
9111E–AUTO–07/08
6.12.1.1 Definitions
Many register and bit references in this section are written in general form. A lower case “n”
replaces the Timer/Counter number, in this case 0. A lower case “x” replaces the Output Com-
pare Unit, in this case Compare Unit A or Compare Unit B. However, when using the register or
bit defines in a program, the precise form must be used, i.e., TCNT0 for accessing
Timer/Counter0 counter value and so on.
The definitions in Table 6-43 are also used extensively throughout the document.
6.12.1.2 Registers
The Timer/Counter (TCNT0) and Output Compare Registers (OCR0A and OCR0B) are 8-bit
registers. Interrupt request (abbreviated to Int.Req. in the figure) signals are all visible in the
Timer Interrupt Flag Register (TIFR0). All interrupts are individually masked with the Timer Inter-
rupt Mask Register (TIMSK0). TIFR0 and TIMSK0 are not shown in the figure.
The Timer/Counter can be clocked internally, via the prescaler, or by an external clock source on
the T0 pin. The Clock Select logic block controls which clock source and edge the Timer/Counter
uses to increment (or decrement) its value. The Timer/Counter is inactive when no clock source
is selected. The output from the Clock Select logic is referred to as the timer clock (clkT0).
The double buffered Output Compare Registers (OCR0A and OCR0B) are compared with the
Timer/Counter value at all times. The result of the compare can be used by the Waveform Gen-
erator to generate a PWM or variable frequency output on the Output Compare pins (OC0A and
OC0B). See “Using the Output Compare Unit” on page 143 for details. The compare match
event will also set the Compare Flag (OCF0A or OCF0B) which can be used to generate an Out-
put Compare interrupt request.
114 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Clock Select
count Edge
Tn
clear clkTn Detector
TCNTn Control Logic
direction
(From Prescaler)
bottom top
115
9111E–AUTO–07/08
6.12.4 Output Compare Unit
The 8-bit comparator continuously compares TCNT0 with the Output Compare Registers
(OCR0A and OCR0B). Whenever TCNT0 equals OCR0A or OCR0B, the comparator signals a
match. A match will set the Output Compare Flag (OCF0A or OCF0B) at the next timer clock
cycle. If the corresponding interrupt is enabled, the Output Compare Flag generates an Output
Compare interrupt. The Output Compare Flag is automatically cleared when the interrupt is exe-
cuted. Alternatively, the flag can be cleared by software by writing a logical one to its I/O bit
location. The Waveform Generator uses the match signal to generate an output according to
operating mode set by the WGM02:0 bits and Compare Output mode (COM0x1:0) bits. The max
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 118).
Figure 6-29 shows a block diagram of the Output Compare unit.
OCRnx TCNTn
= (8-bit Comparator)
OCFnx (Int.Req.)
top
bottom
Waveform Generator OCnx
FOCn
WGMn1:0 COMnX1:0
The OCR0x Registers are double buffered when using any of the Pulse Width Modulation
(PWM) modes. For the normal and Clear Timer on Compare (CTC) modes of operation, the dou-
ble buffering is disabled. The double buffering synchronizes the update of the OCR0x Compare
Registers 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 OCR0x Register access may seem complex, but this is not case. When the double buffering
is enabled, the CPU has access to the OCR0x Buffer Register, and if double buffering is dis-
abled the CPU will access the OCR0x directly.
116 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
COMnx1
COMnx0 Waveform
D Q
FOCnx Generator
1
OCnx
OCnx Pin
0
D Q
DATA BUS
PORT
D Q
DDR
clkI/O
117
9111E–AUTO–07/08
The general I/O port function is overridden by the Output Compare (OC0x) from the Waveform
Generator if either of the COM0x1:0 bits are set. However, the OC0x pin direction (input or out-
put) is still controlled by the Data Direction Register (DDR) for the port pin. The Data Direction
Register bit for the OC0x pin (DDR_OC0x) must be set as output before the OC0x value is visi-
ble on the pin. The port override function is independent of the Waveform Generation mode.
The design of the Output Compare pin logic allows initialization of the OC0x state before the out-
put is enabled. Note that some COM0x1:0 bit settings are reserved for certain modes of
operation (see “8-bit Timer/Counter Register Description” on page 125).
118 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
TCNTn
OCn
(COMnx1:0 = 1)
(Toggle)
Period 1 2 3 4
An interrupt can be generated each time the counter value reaches the TOP value by using the
OCF0A Flag. If the interrupt is enabled, the interrupt handler routine can be used for updating
the TOP value. However, changing TOP to a value close to BOTTOM when the counter is run-
ning with none or a low prescaler value must be done with care since the CTC mode does not
have the double buffering feature. If the new value written to OCR0A is lower than the current
value of TCNT0, the counter will miss the compare match. The counter will then have to count to
its maximum value (0xFF) and wrap around starting at 0x00 before the compare match can
occur.
For generating a waveform output in CTC mode, the OC0A output can be set to toggle its logical
level on each compare match by setting the Compare Output mode bits to toggle mode
(COM0A1:0 = 1). The OC0A value will not be visible on the port pin unless the data direction for
the pin is set to output. The waveform generated will have a maximum frequency of fOC0 =
fclk_I/O/2 when OCR0A is set to zero (0x00). The waveform frequency is defined by the following
equation:
f clk_I/O
f OCnx = ------------------------------------------------------
-
2 ⋅ N ⋅ ( 1 + OCRnx )
The N variable represents the prescale factor (1, 8, 64, 256, or 1024).
As for the Normal mode of operation, the TOV0 Flag is set in the same timer clock cycle that the
counter counts from MAX to 0x00.
119
9111E–AUTO–07/08
6.12.6.3 Fast PWM Mode
The fast Pulse Width Modulation or fast PWM mode (WGM02:0 = 3 or 7) provides a high fre-
quency PWM waveform generation option. The fast PWM differs from the other PWM option by
its single-slope operation. The counter counts from BOTTOM to TOP then restarts from BOT-
TOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR0A when WGM2:0 = 7. In
non-inverting Compare Output mode, the Output Compare (OC0x) is cleared on the compare
match between TCNT0 and OCR0x, and set at BOTTOM. In inverting Compare Output mode,
the output is set on compare match and cleared at BOTTOM. Due to the single-slope operation,
the operating frequency of the fast PWM mode can be twice as high as the phase correct PWM
mode that use dual-slope operation. This high frequency makes the fast PWM mode well suited
for power regulation, rectification, and DAC applications. High frequency allows physically small
sized external components (coils, capacitors), and therefore reduces total system cost.
In fast PWM mode, the counter is incremented until the counter value matches the TOP value.
The counter is then cleared at the following timer clock cycle. The timing diagram for the fast
PWM mode is shown in Figure 6-32. The TCNT0 value is in the timing diagram shown as a his-
togram for illustrating the single-slope operation. The diagram includes non-inverted and
inverted PWM outputs. The small horizontal line marks on the TCNT0 slopes represent compare
matches between OCR0x and TCNT0.
OCRnx Interrupt
Flag Set
TCNTn
OCn (COMnx1:0 = 2)
OCn (COMnx1:0 = 3)
Period 1 2 3 4 5 6 7
The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches TOP. If the inter-
rupt is enabled, the interrupt handler routine can be used for updating the compare value.
In fast PWM mode, the compare unit allows generation of PWM waveforms on the OC0x pins.
Setting the COM0x1:0 bits to two will produce a non-inverted PWM and an inverted PWM output
can be generated by setting the COM0x1:0 to three: Setting the COM0A1:0 bits to one allows
the OC0A pin to toggle on Compare Matches if the WGM02 bit is set. This option is not available
for the OC0B pin (see Table 6-48 on page 126). The actual OC0x value will only be visible on
the port pin if the data direction for the port pin is set as output. The PWM waveform is gener-
ated by setting (or clearing) the OC0x Register at the compare match between OCR0x and
TCNT0, and clearing (or setting) the OC0x Register at the timer clock cycle the counter is
cleared (changes from TOP to BOTTOM).
120 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The PWM frequency for the output can be calculated by the following equation:
f clk_I/O
f OCnxPWM = --------------------
-
N ⋅ 256
The N variable represents the prescale factor (1, 8, 64, 256, or 1024).
The extreme values for the OCR0A Register represents special cases when generating a PWM
waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will
be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result
in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0
bits.)
A frequency (with 50% duty cycle) waveform output in fast PWM mode can be achieved by set-
ting OC0x to toggle its logical level on each compare match (COM0x1:0 = 1). The waveform
generated will have a maximum frequency of fOC0 = fclk_I/O/2 when OCR0A is set to zero. This
feature is similar to the OC0A toggle in CTC mode, except the double buffer feature of the Out-
put Compare unit is enabled in the fast PWM mode.
121
9111E–AUTO–07/08
Figure 6-33. Phase Correct PWM Mode, Timing Diagram
OCnx Interrupt
Flag Set
OCRnx Update
TOVn Interrupt
Flag Set
TCNTn
OCn (COMnx1:0 = 2)
OCn (COMnx1:0 = 3)
Period 1 2 3
The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches BOTTOM. The
Interrupt Flag can be used to generate an interrupt each time the counter reaches the BOTTOM
value.
In phase correct PWM mode, the compare unit allows generation of PWM waveforms on the
OC0x pins. Setting the COM0x1:0 bits to two will produce a non-inverted PWM. An inverted
PWM output can be generated by setting the COM0x1:0 to three: Setting the COM0A0 bits to
one allows the OC0A pin to toggle on Compare Matches if the WGM02 bit is set. This option is
not available for the OC0B pin (see Table 6-49 on page 127). The actual OC0x value will only be
visible on the port pin if the data direction for the port pin is set as output. The PWM waveform is
generated by clearing (or setting) the OC0x Register at the compare match between OCR0x and
TCNT0 when the counter increments, and setting (or clearing) the OC0x Register at compare
match between OCR0x and TCNT0 when the counter decrements. The PWM frequency for the
output when using phase correct PWM can be calculated by the following equation:
f clk_I/O
f OCnxPCPWM = --------------------
-
N ⋅ 510
The N variable represents the prescale factor (1, 8, 64, 256, or 1024).
The extreme values for the OCR0A Register represent special cases when generating a PWM
waveform output in the phase correct PWM mode. If the OCR0A is set equal to BOTTOM, the
output will be continuously low and if set equal to MAX the output will be continuously high for
non-inverted PWM mode. For inverted PWM the output will have the opposite logic values.
122 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
At the very start of period 2 in Figure 6-33 on page 122 OCnx has a transition from high to low
even though there is no Compare Match. The point of this transition is to guarantee symmetry
around BOTTOM. There are two cases that give a transition without Compare Match.
• OCRnx changes its value from MAX, like in Figure 6-33 on page 122. When the OCR0A
value is MAX the OCn pin value is the same as the result of a down-counting Compare
Match. To ensure symmetry around BOTTOM the OCnx value at MAX must correspond to
the result of an up-counting Compare Match.
• The timer starts counting from a value higher than the one in OCRnx, and for that reason
misses the Compare Match and hence the OCnx change that would have happened on the
way up.
clkI/O
clkTN
(clkI/O/1)
TOVn
Figure 6-35 shows the same timing data, but with the prescaler enabled.
clkI/O
clkTN
(clkI/O/8)
TOVn
123
9111E–AUTO–07/08
Figure 6-36 shows the setting of OCF0B in all modes and OCF0A in all modes except CTC
mode and PWM mode, where OCR0A is TOP.
Figure 6-36. Timer/Counter Timing Diagram, Setting of OCF0x, with Prescaler (fclk_I/O/8)
clkI/O
clkTn
(clkI/O/8)
OCFnx
Figure 6-37 shows the setting of OCF0A and the clearing of TCNT0 in CTC mode and fast PWM
mode where OCR0A is TOP.
Figure 6-37. Timer/Counter Timing Diagram, Clear Timer on Compare Match Mode, with Pres-
caler (fclk_I/O/8)
clkI/O
clkTN
(clkI/O/8)
TCNTn
TOP - 1 TOP BOTTOM BOTTOM + 1
(CTC)
OCRnx TOP
OCFnx
124 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-45 shows the COM0A1:0 bit functionality when the WGM01:0 bits are set to fast PWM
mode.
Note: 1. A special case occurs when OCR0A equals TOP and COM0A1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Fast PWM Mode” on page 120
for more details.
125
9111E–AUTO–07/08
Table 6-46 shows the COM0A1:0 bit functionality when the WGM02:0 bits are set to phase cor-
rect PWM mode.
Note: 1. A special case occurs when OCR0A equals TOP and COM0A1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Phase Correct PWM Mode” on
page 149 for more details.
• Bits 5:4 – COM0B1:0: Compare Match Output B Mode
These bits control the Output Compare pin (OC0B) behavior. If one or both of the
COM0B1:0 bits are set, the OC0B output overrides the normal port functionality of the I/O
pin it is connected to. However, note that the Data Direction Register (DDR) bit correspond-
ing to the OC0B pin must be set in order to enable the output driver.
When OC0B is connected to the pin, the function of the COM0B1:0 bits depends on the
WGM02:0 bit setting. Table 6-47 shows the COM0B1:0 bit functionality when the WGM02:0
bits are set to a normal or CTC mode (non-PWM).
Table 6-48 shows the COM0B1:0 bit functionality when the WGM02:0 bits are set to fast PWM
mode.
Table 6-48. Compare Output Mode, Fast PWM Mode(1)
COM0B1 COM0B0 Description
0 0 Normal port operation, OC0B disconnected.
0 1 Reserved
1 0 Clear OC0B on Compare Match, set OC0B at TOP
1 1 Set OC0B on Compare Match, clear OC0B at TOP
Note: 1. A special case occurs when OCR0B equals TOP and COM0B1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Fast PWM Mode” on page 120
for more details.
126 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-49 shows the COM0B1:0 bit functionality when the WGM02:0 bits are set to phase cor-
rect PWM mode.
Note: 1. A special case occurs when OCR0B equals TOP and COM0B1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Phase Correct PWM Mode” on
page 121 for more details.
• Bits 3, 2 – Res: Reserved Bits
These bits are reserved bits in the ATA6612/ATA6613 and will always read as zero.
• Bits 1:0 – WGM01:0: Waveform Generation Mode
Combined with the WGM02 bit found in the TCCR0B Register, these bits control the count-
ing sequence of the counter, the source for maximum (TOP) counter value, and what type of
waveform generation to be used (see Table 6-50). Modes of operation supported by the
Timer/Counter unit are: Normal mode (counter), Clear Timer on Compare Match (CTC)
mode, and two types of Pulse Width Modulation (PWM) modes (see “Modes of Operation”
on page 118).
127
9111E–AUTO–07/08
6.12.8.2 Timer/Counter Control Register B – TCCR0B
Bit 7 6 5 4 3 2 1 0
FOC0A FOC0B – – WGM02 CS02 CS01 CS00 TCCR0B
Read/Write W W R R R R R/W R/W
Initial Value 0 0 0 0 0 0 0 0
128 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The Timer/Counter Register gives direct access, both for read and write operations, to the
Timer/Counter unit 8-bit counter. Writing to the TCNT0 Register blocks (removes) the Compare
Match on the following timer clock. Modifying the counter (TCNT0) while the counter is running,
introduces a risk of missing a Compare Match between TCNT0 and the OCR0x Registers.
The Output Compare Register A contains an 8-bit value that is continuously compared with the
counter value (TCNT0). A match can be used to generate an Output Compare interrupt, or to
generate a waveform output on the OC0A pin.
The Output Compare Register B contains an 8-bit value that is continuously compared with the
counter value (TCNT0). A match can be used to generate an Output Compare interrupt, or to
generate a waveform output on the OC0B pin.
129
9111E–AUTO–07/08
6.12.8.6 Timer/Counter Interrupt Mask Register – TIMSK0
Bit 7 6 5 4 3 2 1 0
– – – – – OCIE0B OCIE0A TOIE0 TIMSK0
Read/Write R R R R R R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
130 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
131
9111E–AUTO–07/08
Figure 6-38. T1/T0 Pin Sampling
Tn D Q D Q D Q Tn_sync
(To Clock
Select Logic)
LE
clkI/O
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.
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 sys-
tem 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 fre-
quency (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.
CK/1024
CK/256
CK/8
PSRSYNC
T0
Synchronization
T1
Synchronization 0 0
CS10 CS00
CS11 CS01
CS12 CS02
Note: 1. The synchronization logic on the input pins (T1/T0) is shown in Figure 6-38.
132 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.14.1 Overview
Most register and bit references in this section are written in general form. A lower case “n”
replaces the Timer/Counter number, and a lower case “x” replaces the Output Compare unit
channel. However, when using the register or bit defines in a program, the precise form must be
used, i.e., TCNT1 for accessing Timer/Counter1 counter value and so on.
A simplified block diagram of the 16-bit Timer/Counter is shown in Figure 6-40 on page 134. The
device-specific I/O Register and bit locations are listed in the “16-bit Timer/Counter Register
Description” on page 155.
The PRTIM1 bit in “Power Reduction Register - PRR” on page 66 must be written to zero to
enable Timer/Counter1 module.
133
9111E–AUTO–07/08
Figure 6-40. 16-bit Timer/Counter Block Diagram(1)
Count TOVn
Clear (Int.Req.)
Control Logic
Direction clkTn Clock Select
Edge
Tn
Detector
TOP BOTTOM
(From Prescaler)
Timer/Counter
TCNTn
= =0
OCnA
(Int.Req.)
Waveform
= OCnA
Generation
OCRnA
Fixed OCnB
TOP (Int.Req.)
Values
Waveform
OCnB
DATA BUS
= Generation
Edge Noise
ICRn
Detector Canceler
ICPn
TCCRnA TCCRnB
Note: 1. Refer to Table 6-32 on page 97 and Table 6-38 on page 104 for Timer/Counter1 pin
placement and description.
6.14.1.1 Registers
The Timer/Counter (TCNT1), Output Compare Registers (OCR1A/B), and Input Capture Regis-
ter (ICR1) are all 16-bit registers. Special procedures must be followed when accessing the
16-bit registers. These procedures are described in the section “Accessing 16-bit Registers” on
page 135. The Timer/Counter Control Registers (TCCR1A/B) are 8-bit registers and have no
CPU access restrictions. Interrupt requests (abbreviated to Int.Req. in the figure) signals are all
visible in the Timer Interrupt Flag Register (TIFR1). All interrupts are individually masked with
the Timer Interrupt Mask Register (TIMSK1). TIFR1 and TIMSK1 are not shown in the figure.
The Timer/Counter can be clocked internally, via the prescaler, or by an external clock source on
the T1 pin. The Clock Select logic block controls which clock source and edge the Timer/Counter
uses to increment (or decrement) its value. The Timer/Counter is inactive when no clock source
is selected. The output from the Clock Select logic is referred to as the timer clock (clkT1).
134 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The double buffered Output Compare Registers (OCR1A/B) are compared with the Timer/Coun-
ter value at all time. The result of the compare can be used by the Waveform Generator to
generate a PWM or variable frequency output on the Output Compare pin (OC1A/B), see “Out-
put Compare Units” on page 142. The compare match event will also set the Compare Match
Flag (OCF1A/B) which can be used to generate an Output Compare interrupt request.
The Input Capture Register can capture the Timer/Counter value at a given external (edge trig-
gered) event on either the Input Capture pin (ICP1) or on the Analog Comparator pins (see
“Analog Comparator” on page 262). The Input Capture unit includes a digital filtering unit (Noise
Canceler) for reducing the chance of capturing noise spikes.
The TOP value, or maximum Timer/Counter value, can in some modes of operation be defined
by either the OCR1A Register, the ICR1 Register, or by a set of fixed values. When using
OCR1A as TOP value in a PWM mode, the OCR1A Register can not be used for generating a
PWM output. However, the TOP value will in this case be double buffered allowing the TOP
value to be changed in run time. If a fixed TOP value is required, the ICR1 Register can be used
as an alternative, freeing the OCR1A to be used as PWM output.
6.14.1.2 Definitions
The following definitions are used extensively throughout the section:
Table 6-52. General Counter Definitions
BOTTOM The counter reaches the BOTTOM when it becomes 0x0000.
MAX The counter reaches its MAXimum when it becomes 0xFFFF (decimal 65535).
The counter reaches the TOP when it becomes equal to the highest value in the count
sequence. The TOP value can be assigned to be one of the fixed values: 0x00FF, 0x01FF,
TOP
or 0x03FF, or to the value stored in the OCR1A or ICR1 Register. The assignment is depen-
dent of the mode of operation.
135
9111E–AUTO–07/08
Assembly Code Examples(1)
...
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
...
C Code Examples(1)
unsigned int i;
...
/* Set TCNT1 to 0x01FF */
TCNT1 = 0x1FF;
/* Read TCNT1 into i */
i = TCNT1;
...
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The assembly code example returns the TCNT1 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 Regis-
ters, 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 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.
136 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
137
9111E–AUTO–07/08
The following code examples show how to do an atomic write of the TCNT1 Register contents.
Writing any of the OCR1A/B or ICR1 Registers can be done by using the same principle.
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The assembly code example requires that the r17:r16 register pair contains the value to be writ-
ten to TCNT1.
138 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
TEMP (8-bit)
Clock Select
Count Edge
Tn
TCNTnH (8-bit) TCNTnL (8-bit) Clear clkTn Detector
Control Logic
Direction
TCNTn (16-bit Counter)
(From Prescaler)
TOP BOTTOM
139
9111E–AUTO–07/08
The counting sequence is determined by the setting of the Waveform Generation mode bits
(WGM13:0) located in the Timer/Counter Control Registers A and B (TCCR1A and TCCR1B).
There are close connections between how the counter behaves (counts) and how waveforms
are generated on the Output Compare outputs OC1x. For more details about advanced counting
sequences and waveform generation (see “Modes of Operation” on page 145).
The Timer/Counter Overflow Flag (TOV1) is set according to the mode of operation selected by
the WGM13:0 bits. TOV1 can be used for generating a CPU interrupt.
TEMP (8-bit)
Analog
Comparator Noise Edge
ICFn (Int.Req.)
Canceler Detector
ICPn
When a change of the logic level (an event) occurs on the Input Capture pin (ICP1), alternatively
on the Analog Comparator output (ACO), and this change confirms to the setting of the edge
detector, a capture will be triggered. When a capture is triggered, the 16-bit value of the counter
(TCNT1) is written to the Input Capture Register (ICR1). The Input Capture Flag (ICF1) is set at
the same system clock as the TCNT1 value is copied into ICR1 Register. If enabled (ICIE1 = 1),
the Input Capture Flag generates an Input Capture interrupt. The ICF1 Flag is automatically
cleared when the interrupt is executed. Alternatively the ICF1 Flag can be cleared by software
by writing a logical one to its I/O bit location.
140 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Reading the 16-bit value in the Input Capture Register (ICR1) is done by first reading the low
byte (ICR1L) and then the high byte (ICR1H). When the low byte is read the high byte is copied
into the high byte temporary register (TEMP). When the CPU reads the ICR1H I/O location it will
access the TEMP Register.
The ICR1 Register can only be written when using a Waveform Generation mode that utilizes
the ICR1 Register for defining the counter’s TOP value. In these cases the Waveform Genera-
tion mode (WGM13:0) bits must be set before the TOP value can be written to the ICR1
Register. When writing the ICR1 Register the high byte must be written to the ICR1H I/O location
before the low byte is written to ICR1L.
For more information on how to access the 16-bit registers refer to “Accessing 16-bit Registers”
on page 135.
141
9111E–AUTO–07/08
Using the Input Capture unit in any mode of operation when the TOP value (resolution) is
actively changed during operation, is not recommended.
Measurement of an external signal’s duty cycle requires that the trigger edge is changed after
each capture. Changing the edge sensing must be done as early as possible after the ICR1
Register has been read. After a change of the edge, the Input Capture Flag (ICF1) must be
cleared by software (writing a logical one to the I/O bit location). For measuring frequency only,
the clearing of the ICF1 Flag is not required (if an interrupt handler is used).
TEMP (8-bit)
OCRnxH Buf. (8-bit) OCRnxL Buf. (8-bit) TCNTnH (8-bit) TCNTnL (8-bit)
= (16-bit Comparator)
OCFnx (Int.Req.)
TOP
Waveform Generator OCnx
BOTTOM
WGMn3:0 COMnx1:0
142 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The OCR1x Register is double buffered when using any of the twelve Pulse Width Modulation
(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 Com-
pare 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 out-
put 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 dis-
abled 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 Reg-
ister since the compare of all 16 bits is done continuously. The high byte (OCR1xH) has to be
written first. When the high byte I/O location is written by the CPU, the TEMP Register will be
updated by the value written. Then when the low byte (OCR1xL) is written to the lower eight bits,
the high byte will be copied into the upper 8-bits of either the OCR1x buffer or OCR1x Compare
Register in the same system clock cycle.
For more information of how to access the 16-bit registers refer to “Accessing 16-bit Registers”
on page 135.
143
9111E–AUTO–07/08
6.14.7 Compare Match Output Unit
The Compare Output mode (COM1x1:0) bits have two functions. The Waveform Generator uses
the COM1x1:0 bits for defining the Output Compare (OC1x) state at the next compare match.
Secondly the COM1x1:0 bits control the OC1x pin output source. Figure 6-44 shows a simplified
schematic of the logic affected by the COM1x1:0 bit setting. The I/O Registers, I/O bits, and I/O
pins in the figure are shown in bold. Only the parts of the general I/O Port Control Registers
(DDR and PORT) that are affected by the COM1x1:0 bits are shown. When referring to the
OC1x state, the reference is for the internal OC1x Register, not the OC1x pin. If a system reset
occur, the OC1x Register is reset to “0”.
COMnx1
COMnx0 Waveform
D Q
FOCnx Generator
1
OCnx
OCnx Pin
0
D Q
DATA BUS
PORT
D Q
DDR
clkI/O
The general I/O port function is overridden by the Output Compare (OC1x) from the Waveform
Generator if either of the COM1x1:0 bits are set. However, the OC1x pin direction (input or out-
put) is still controlled by the Data Direction Register (DDR) for the port pin. The Data Direction
Register bit for the OC1x pin (DDR_OC1x) must be set as output before the OC1x value is visi-
ble on the pin. The port override function is generally independent of the Waveform Generation
mode, but there are some exceptions. Refer to Table 6-53 on page 155, Table 6-54 on page 155
and Table 6-55 on page 156 for details.
The design of the Output Compare pin logic allows initialization of the OC1x state before the out-
put is enabled. Note that some COM1x1:0 bit settings are reserved for certain modes of
operation (see “16-bit Timer/Counter Register Description” on page 155).
The COM1x1:0 bits have no effect on the Input Capture unit.
144 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
145
9111E–AUTO–07/08
6.14.8.2 Clear Timer on Compare Match (CTC) Mode
In Clear Timer on Compare or CTC mode (WGM13:0 = 4 or 12), the OCR1A or ICR1 Register
are used to manipulate the counter resolution. In CTC mode the counter is cleared to zero when
the counter value (TCNT1) matches either the OCR1A (WGM13:0 = 4) or the ICR1 (WGM13:0 =
12). The OCR1A or ICR1 define the top value for the counter, hence also its resolution. This
mode allows greater control of the compare match output frequency. It also simplifies the opera-
tion of counting external events.
The timing diagram for the CTC mode is shown in Figure 6-45. The counter value (TCNT1)
increases until a compare match occurs with either OCR1A or ICR1, and then counter (TCNT1)
is cleared.
TCNTn
OCnA
(COMnA1:0 = 1)
(Toggle)
Period 1 2 3 4
An interrupt can be generated at each time the counter value reaches the TOP value by either
using the OCF1A or ICF1 Flag according to the register used to define the TOP value. If the
interrupt is enabled, the interrupt handler routine can be used for updating the TOP value. How-
ever, changing the TOP to a value close to BOTTOM when the counter is running with none or a
low prescaler value must be done with care since the CTC mode does not have the double buff-
ering feature. If the new value written to OCR1A or ICR1 is lower than the current value of
TCNT1, the counter will miss the compare match. The counter will then have to count to its max-
imum value (0xFFFF) and wrap around starting at 0x0000 before the compare match can occur.
In many cases this feature is not desirable. An alternative will then be to use the fast PWM mode
using OCR1A for defining TOP (WGM13:0 = 15) since the OCR1A then will be double buffered.
For generating a waveform output in CTC mode, the OC1A output can be set to toggle its logical
level on each compare match by setting the Compare Output mode bits to toggle mode
(COM1A1:0 = 1). The OC1A value will not be visible on the port pin unless the data direction for
the pin is set to output (DDR_OC1A = 1). The waveform generated will have a maximum fre-
quency of fOC1A = fclk_I/O/2 when OCR1A is set to zero (0x0000). The waveform frequency is
defined by the following equation:
f clk_I/O
f OCnA = -------------------------------------------------------
-
2 ⋅ N ⋅ ( 1 + OCRnA )
The N variable represents the prescaler factor (1, 8, 64, 256, or 1024).
As for the Normal mode of operation, the TOV1 Flag is set in the same timer clock cycle that the
counter counts from MAX to 0x0000.
146 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
log ( TOP + 1 )
R FPWM = -----------------------------------
log ( 2 )
In fast PWM mode the counter is incremented until the counter value matches either one of the
fixed values 0x00FF, 0x01FF, or 0x03FF (WGM13:0 = 5, 6, or 7), the value in ICR1 (WGM13:0 =
14), or the value in OCR1A (WGM13:0 = 15). The counter is then cleared at the following timer
clock cycle. The timing diagram for the fast PWM mode is shown in Figure 6-46. The figure
shows fast PWM mode when OCR1A or ICR1 is used to define TOP. The TCNT1 value is in the
timing diagram shown as a histogram for illustrating the single-slope operation. The diagram
includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT1
slopes represent compare matches between OCR1x and TCNT1. The OC1x Interrupt Flag will
be set when a compare match occurs.
TCNTn
OCnx (COMnx1:0 = 2)
OCnx (COMnx1:0 = 3)
Period 1 2 3 4 5 6 7 8
147
9111E–AUTO–07/08
The Timer/Counter Overflow Flag (TOV1) is set each time the counter reaches TOP. In addition
the OC1A or ICF1 Flag is set at the same timer clock cycle as TOV1 is set when either OCR1A
or ICR1 is used for defining the TOP value. If one of the interrupts are enabled, the interrupt han-
dler routine can be used for updating the TOP and compare values.
When changing the TOP value the program must ensure that the new TOP value is higher or
equal to the value of all of the Compare Registers. If the TOP value is lower than any of the
Compare Registers, a compare match will never occur between the TCNT1 and the OCR1x.
Note that when using fixed TOP values the unused bits are masked to zero when any of the
OCR1x Registers are written.
The procedure for updating ICR1 differs from updating OCR1A when used for defining the TOP
value. The ICR1 Register is not double buffered. This means that if ICR1 is changed to a low
value when the counter is running with none or a low prescaler value, there is a risk that the new
ICR1 value written is lower than the current value of TCNT1. The result will then be that the
counter will miss the compare match at the TOP value. The counter will then have to count to the
MAX value (0xFFFF) and wrap around starting at 0x0000 before the compare match can occur.
The OCR1A Register however, is double buffered. This feature allows the OCR1A I/O location
to be written anytime. When the OCR1A I/O location is written the value written will be put into
the OCR1A Buffer Register. The OCR1A Compare Register will then be updated with the value
in the Buffer Register at the next timer clock cycle the TCNT1 matches TOP. The update is done
at the same timer clock cycle as the TCNT1 is cleared and the TOV1 Flag is set.
Using the ICR1 Register for defining TOP works well when using fixed TOP values. By using
ICR1, the OCR1A Register is free to be used for generating a PWM output on OC1A. However,
if the base PWM frequency is actively changed (by changing the TOP value), using the OCR1A
as TOP is clearly a better choice due to its double buffer feature.
In fast PWM mode, the compare units allow generation of PWM waveforms on the OC1x pins.
Setting the COM1x1:0 bits to two will produce a non-inverted PWM and an inverted PWM output
can be generated by setting the COM1x1:0 to three (see Table on page 155). The actual OC1x
value will only be visible on the port pin if the data direction for the port pin is set as output
(DDR_OC1x). The PWM waveform is generated by setting (or clearing) the OC1x Register at
the compare match between OCR1x and TCNT1, and clearing (or setting) the OC1x Register at
the timer clock cycle the counter is cleared (changes from TOP to BOTTOM).
The PWM frequency for the output can be calculated by the following equation:
f clk_I/O
f OCnxPWM = -------------------------------------
N ⋅ ( 1 + TOP )
The N variable represents the prescaler divider (1, 8, 64, 256, or 1024).
The extreme values for the OCR1x Register represents special cases when generating a PWM
waveform output in the fast PWM mode. If the OCR1x is set equal to BOTTOM (0x0000) the out-
put will be a narrow spike for each TOP+1 timer clock cycle. Setting the OCR1x equal to TOP
will result in a constant high or low output (depending on the polarity of the output set by the
COM1x1:0 bits).
148 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
A frequency (with 50% duty cycle) waveform output in fast PWM mode can be achieved by set-
ting OC1A to toggle its logical level on each compare match (COM1A1:0 = 1). This applies only
if OCR1A is used to define the TOP value (WGM13:0 = 15). The waveform generated will have
a maximum frequency of fOC1A = fclk_I/O/2 when OCR1A is set to zero (0x0000). This feature is
similar to the OC1A toggle in CTC mode, except the double buffer feature of the Output Com-
pare unit is enabled in the fast PWM mode.
log ( TOP + 1 )
R PCPWM = -----------------------------------
log ( 2 )
In phase correct PWM mode the counter is incremented until the counter value matches either
one of the fixed values 0x00FF, 0x01FF, or 0x03FF (WGM13:0 = 1, 2, or 3), the value in ICR1
(WGM13:0 = 10), or the value in OCR1A (WGM13:0 = 11). The counter has then reached the
TOP and changes the count direction. The TCNT1 value will be equal to TOP for one timer clock
cycle. The timing diagram for the phase correct PWM mode is shown on Figure 6-47 on page
150. The figure shows phase correct PWM mode when OCR1A or ICR1 is used to define TOP.
The TCNT1 value is in the timing diagram shown as a histogram for illustrating the dual-slope
operation. The diagram includes non-inverted and inverted PWM outputs. The small horizontal
line marks on the TCNT1 slopes represent compare matches between OCR1x and TCNT1. The
OC1x Interrupt Flag will be set when a compare match occurs.
149
9111E–AUTO–07/08
Figure 6-47. Phase Correct PWM Mode, Timing Diagram
OCRnx/TOP Update and
OCnA Interrupt Flag Set
or ICFn Interrupt Flag Set
(Interrupt on TOP)
TCNTn
OCnx (COMnx1:0 = 2)
OCnx (COMnx1:0 = 3)
Period 1 2 3 4
The Timer/Counter Overflow Flag (TOV1) is set each time the counter reaches BOTTOM. When
either OCR1A or ICR1 is used for defining the TOP value, the OC1A or ICF1 Flag is set accord-
ingly at the same timer clock cycle as the OCR1x Registers are updated with the double buffer
value (at TOP). The Interrupt Flags can be used to generate an interrupt each time the counter
reaches the TOP or BOTTOM value.
When changing the TOP value the program must ensure that the new TOP value is higher or
equal to the value of all of the Compare Registers. If the TOP value is lower than any of the
Compare Registers, a compare match will never occur between the TCNT1 and the OCR1x.
Note that when using fixed TOP values, the unused bits are masked to zero when any of the
OCR1x Registers are written. As the third period shown in Figure 6-47 illustrates, changing the
TOP actively while the Timer/Counter is running in the phase correct mode can result in an
unsymmetrical output. The reason for this can be found in the time of update of the OCR1x Reg-
ister. Since the OCR1x update occurs at TOP, the PWM period starts and ends at TOP. This
implies that the length of the falling slope is determined by the previous TOP value, while the
length of the rising slope is determined by the new TOP value. When these two values differ the
two slopes of the period will differ in length. The difference in length gives the unsymmetrical
result on the output.
It is recommended to use the phase and frequency correct mode instead of the phase correct
mode when changing the TOP value while the Timer/Counter is running. When using a static
TOP value there are practically no differences between the two modes of operation.
In phase correct PWM mode, the compare units allow generation of PWM waveforms on the
OC1x pins. Setting the COM1x1:0 bits to two will produce a non-inverted PWM and an inverted
PWM output can be generated by setting the COM1x1:0 to three. The actual OC1x value will
only be visible on the port pin if the data direction for the port pin is set as output (DDR_OC1x).
The PWM waveform is generated by setting (or clearing) the OC1x Register at the compare
match between OCR1x and TCNT1 when the counter increments, and clearing (or setting) the
OC1x Register at compare match between OCR1x and TCNT1 when the counter decrements.
150 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The PWM frequency for the output when using phase correct PWM can be calculated by the fol-
lowing equation:
f clk_I/O
f OCnxPCPWM = ---------------------------------
2 ⋅ N ⋅ TOP
The N variable represents the prescaler divider (1, 8, 64, 256, or 1024).
The extreme values for the OCR1x Register represent special cases when generating a PWM
waveform output in the phase correct PWM mode. If the OCR1x is set equal to BOTTOM the
output will be continuously low and if set equal to TOP the output will be continuously high for
non-inverted PWM mode. For inverted PWM the output will have the opposite logic values. If
OCR1A is used to define the TOP value (WGM13:0 = 11) and COM1A1:0 = 1, the OC1A output
will toggle with a 50% duty cycle.
log ( TOP + 1 -)
R PFCPWM = ----------------------------------
log ( 2 )
In phase and frequency correct PWM mode the counter is incremented until the counter value
matches either the value in ICR1 (WGM13:0 = 8), or the value in OCR1A (WGM13:0 = 9). The
counter has then reached the TOP and changes the count direction. The TCNT1 value will be
equal to TOP for one timer clock cycle. The timing diagram for the phase correct and frequency
correct PWM mode is shown on Figure 6-48 on page 152. The figure shows phase and fre-
quency correct PWM mode when OCR1A or ICR1 is used to define TOP. The TCNT1 value is in
the timing diagram shown as a histogram for illustrating the dual-slope operation. The diagram
includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT1
slopes represent compare matches between OCR1x and TCNT1. The OC1x Interrupt Flag will
be set when a compare match occurs.
151
9111E–AUTO–07/08
Figure 6-48. Phase and Frequency Correct PWM Mode, Timing Diagram
OCnA Interrupt Flag Set
or ICFn Interrupt Flag Set
(Interrupt on TOP)
OCRnx/TOP Updateand
TOVn Interrupt Flag Set
(Interrupt on Bottom)
TCNTn
OCnx (COMnx1:0 = 2)
OCnx (COMnx1:0 = 3)
Period 1 2 3 4
The Timer/Counter Overflow Flag (TOV1) is set at the same timer clock cycle as the OCR1x
Registers are updated with the double buffer value (at BOTTOM). When either OCR1A or ICR1
is used for defining the TOP value, the OC1A or ICF1 Flag set when TCNT1 has reached TOP.
The Interrupt Flags can then be used to generate an interrupt each time the counter reaches the
TOP or BOTTOM value.
When changing the TOP value the program must ensure that the new TOP value is higher or
equal to the value of all of the Compare Registers. If the TOP value is lower than any of the
Compare Registers, a compare match will never occur between the TCNT1 and the OCR1x.
As Figure 6-48 shows the output generated is, in contrast to the phase correct mode, symmetri-
cal in all periods. Since the OCR1x Registers are updated at BOTTOM, the length of the rising
and the falling slopes will always be equal. This gives symmetrical output pulses and is therefore
frequency correct.
Using the ICR1 Register for defining TOP works well when using fixed TOP values. By using
ICR1, the OCR1A Register is free to be used for generating a PWM output on OC1A. However,
if the base PWM frequency is actively changed by changing the TOP value, using the OCR1A as
TOP is clearly a better choice due to its double buffer feature.
In phase and frequency correct PWM mode, the compare units allow generation of PWM wave-
forms on the OC1x pins. Setting the COM1x1:0 bits to two will produce a non-inverted PWM and
an inverted PWM output can be generated by setting the COM1x1:0 to three (see Table on
page 156). The actual OC1x value will only be visible on the port pin if the data direction for the
port pin is set as output (DDR_OC1x). The PWM waveform is generated by setting (or clearing)
the OC1x Register at the compare match between OCR1x and TCNT1 when the counter incre-
ments, and clearing (or setting) the OC1x Register at compare match between OCR1x and
TCNT1 when the counter decrements. The PWM frequency for the output when using phase
and frequency correct PWM can be calculated by the following equation:
f clk_I/O
f OCnxPFCPWM = ---------------------------------
2 ⋅ N ⋅ TOP
The N variable represents the prescaler divider (1, 8, 64, 256, or 1024).
152 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The extreme values for the OCR1x Register represents special cases when generating a PWM
waveform output in the phase correct PWM mode. If the OCR1x is set equal to BOTTOM the
output will be continuously low and if set equal to TOP the output will be set to high for
non-inverted PWM mode. For inverted PWM the output will have the opposite logic values. If
OCR1A is used to define the TOP value (WGM13:0 = 9) and COM1A1:0 = 1, the OC1A output
will toggle with a 50% duty cycle.
clkI/O
clkTn
(clkI/O/1)
OCFnx
Figure 6-50 shows the same timing data, but with the prescaler enabled.
Figure 6-50. Timer/Counter Timing Diagram, Setting of OCF1x, with Prescaler (fclk_I/O/8)
clkI/O
clkTn
(clkI/O/8)
OCFnx
153
9111E–AUTO–07/08
Figure 6-51 shows the count sequence close to TOP in various modes. When using phase and
frequency correct PWM mode the OCR1x Register is updated at BOTTOM. The timing diagrams
will be the same, but TOP should be replaced by BOTTOM, TOP-1 by BOTTOM+1 and so on.
The same renaming applies for modes that set the TOV1 Flag at BOTTOM.
clkI/O
clkTn
(clkI/O/1)
TCNTn
TOP - 1 TOP BOTTOM BOTTOM + 1
(CTC and FPWM)
TCNTn
TOP - 1 TOP TOP - 1 TOP - 2
(PC and PFC PWM)
TOVn (FPWM)
and ICFn (if used
as TOP)
OCRnx
Old OCRnx Value New OCRnx Value
(Update at TOP)
Figure 6-52 shows the same timing data, but with the prescaler enabled.
clkI/O
clkTn
(clkI/O/8)
TCNTn
(CTC and FPWM) TOP - 1 TOP BOTTOM BOTTOM + 1
TCNTn
TOP - 1 TOP TOP - 1 TOP - 2
(PC and PFC PWM)
TOVn (FPWM)
and ICFn (if used
as TOP)
OCRnx
Old OCRnx Value New OCRnx Value
(Update at TOP)
154 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-54 shows the COM1x1:0 bit functionality when the WGM13:0 bits are set to the fast
PWM mode.
Note: 1. A special case occurs when OCR1A/OCR1B equals TOP and COM1A1/COM1B1 is set. In
this case the compare match is ignored, but the set or clear is done at TOP. See “Fast PWM
Mode” on page 147 for more details.
155
9111E–AUTO–07/08
Table 6-55 shows the COM1x1:0 bit functionality when the WGM13:0 bits are set to the phase
correct or the phase and frequency correct, PWM mode.
Table 6-55. Compare Output Mode, Phase Correct and Phase and Frequency Correct
PWM(1)
COM1A1/COM1B1 COM1A0/COM1B0 Description
0 0 Normal port operation, OC1A/OC1B disconnected.
WGM13:0 = 8, 9, 10 or 11: Toggle OC1A on Compare
Match, OC1B disconnected (normal port operation). For
0 1
all other WGM1 settings, normal port operation,
OC1A/OC1B disconnected.
Clear OC1A/OC1B on Compare Match when
1 0 up-counting. Set OC1A/OC1B on Compare Match when
downcounting.
Set OC1A/OC1B on Compare Match when up-counting.
1 1 Clear OC1A/OC1B on Compare Match when
downcounting.
Note: 1. A special case occurs when OCR1A/OCR1B equals TOP and COM1A1/COM1B1 is set. See
“Phase Correct PWM Mode” on page 149 for more details.
• Bit 1:0 – WGM11:0: Waveform Generation Mode
Combined with the WGM13:2 bits found in the TCCR1B Register, these bits control the
counting sequence of the counter, the source for maximum (TOP) counter value, and what
type of waveform generation to be used (see Table 6-56 on page 157). Modes of operation
supported by the Timer/Counter unit are: Normal mode (counter), Clear Timer on Compare
match (CTC) mode, and three types of Pulse Width Modulation (PWM) modes (see “Modes
of Operation” on page 145).
156 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
157
9111E–AUTO–07/08
• Bit 5 – Reserved Bit
This bit is reserved for future use. For ensuring compatibility with future devices, this bit
must be written to zero when TCCR1B is written.
• Bit 4:3 – WGM13:2: Waveform Generation Mode
See TCCR1A Register description.
• Bit 2:0 – CS12:0: Clock Select
The three Clock Select bits select the clock source to be used by the Timer/Counter, see
Figure 6-49 on page 153 and Figure 6-50 on page 153.
If external pin modes are used for the Timer/Counter1, transitions on the T1 pin will clock the
counter even if the pin is configured as an output. This feature allows software control of the
counting.
158 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The two Timer/Counter I/O locations (TCNT1H and TCNT1L, combined TCNT1) give direct
access, both for read and for write operations, to the Timer/Counter unit 16-bit counter. To
ensure that both the high and low bytes are read and written simultaneously when the CPU
accesses these registers, the access is performed using an 8-bit temporary High Byte Register
(TEMP). This temporary register is shared by all the other 16-bit registers see “Accessing 16-bit
Registers” on page 135.
Modifying the counter (TCNT1) while the counter is running introduces a risk of missing a com-
pare match between TCNT1 and one of the OCR1x Registers.
Writing to the TCNT1 Register blocks (removes) the compare match on the following timer clock
for all compare units.
The Output Compare Registers contain a 16-bit value that is continuously compared with the
counter value (TCNT1). A match can be used to generate an Output Compare interrupt, or to
generate a waveform output on the OC1x pin.
The Output Compare Registers are 16-bit in size. To ensure that both the high and low bytes are
written simultaneously when the CPU writes to these registers, the access is performed using an
8-bit temporary High Byte Register (TEMP). This temporary register is shared by all the other
16-bit registers (see “Accessing 16-bit Registers” on page 135).
159
9111E–AUTO–07/08
6.14.10.7 Input Capture Register 1 – ICR1H and ICR1L
Bit 7 6 5 4 3 2 1 0
ICR1[15:8] ICR1H
ICR1[7:0] ICR1L
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 Input Capture is updated with the counter (TCNT1) value each time an event occurs on the
ICP1 pin (or optionally on the Analog Comparator output for Timer/Counter1). The Input Capture
can be used for defining the counter TOP value.
The Input Capture Register is 16-bit in size. To ensure that both the high and low bytes are read
simultaneously when the CPU accesses these registers, the access is performed using an 8-bit
temporary High Byte Register (TEMP). This temporary register is shared by all the other 16-bit
registers (see “Accessing 16-bit Registers” on page 135).
160 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
161
9111E–AUTO–07/08
6.15 8-bit Timer/Counter2 with PWM and Asynchronous Operation
Timer/Counter2 is a general purpose, single channel, 8-bit Timer/Counter module. The main
features are:
• Single Channel Counter
• Clear Timer on Compare Match (Auto Reload)
• Glitch-free, Phase Correct Pulse Width Modulator (PWM)
• Frequency Generator
• 10-bit Clock Prescaler
• Overflow and Compare Match Interrupt Sources (TOV2, OCF2A and OCF2B)
• Allows Clocking from External 32 kHz Watch Crystal Independent of the I/O Clock
6.15.1 Overview
A simplified block diagram of the 8-bit Timer/Counter is shown in Figure 6-53. The device-spe-
cific I/O Register and bit locations are listed in the “8-bit Timer/Counter Register Description” on
page 174.
The PRTIM2 bit in “Power Reduction Register - PRR” on page 66 must be written to zero to
enable Timer/Counter2 module.
Timer/Counter
TCNTn
= = 0
OCnA
(Int.Req.)
Waveform
= OCnA
Generation
OCRnA
Fixed OCnB
TOP (Int.Req.)
DATA BUS
Value
Waveform
= OCnB
Generation
OCRnB
TCCRnA TCCRnB
162 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.15.1.1 Registers
The Timer/Counter (TCNT2) and Output Compare Register (OCR2A and OCR2B) are 8-bit reg-
isters. Interrupt request (shorten as Int.Req.) signals are all visible in the Timer Interrupt Flag
Register (TIFR2). All interrupts are individually masked with the Timer Interrupt Mask Register
(TIMSK2). TIFR2 and TIMSK2 are not shown in the figure.
The Timer/Counter can be clocked internally, via the prescaler, or asynchronously clocked from
the TOSC1/2 pins, as detailed later in this section. The asynchronous operation is controlled by
the Asynchronous Status Register (ASSR). The Clock Select logic block controls which clock
source he Timer/Counter uses to increment (or decrement) its value. The Timer/Counter is inac-
tive when no clock source is selected. The output from the Clock Select logic is referred to as the
timer clock (clkT2).
The double buffered Output Compare Register (OCR2A and OCR2B) are compared with the
Timer/Counter value at all times. The result of the compare can be used by the Waveform Gen-
erator to generate a PWM or variable frequency output on the Output Compare pins (OC2A and
OC2B). See “Output Compare Unit” on page 165 for details. The compare match event will also
set the Compare Flag (OCF2A or OCF2B) which can be used to generate an Output Compare
interrupt request.
6.15.1.2 Definitions
Many register and bit references in this document are written in general form. A lower case “n”
replaces the Timer/Counter number, in this case 2. However, when using the register or bit
defines in a program, the precise form must be used, i.e., TCNT2 for accessing Timer/Counter2
counter value and so on.
The definitions below are also used extensively throughout the section.
BOTTOM The counter reaches the BOTTOM when it becomes zero (0x00).
MAX The counter reaches its MAXimum when it becomes 0xFF (decimal 255).
TOP The counter reaches the TOP when it becomes equal to the highest value in the
count sequence. The TOP value can be assigned to be the fixed value 0xFF
(MAX) or the value stored in the OCR2A Register. The assignment is dependent
on the mode of operation.
163
9111E–AUTO–07/08
6.15.3 Counter Unit
The main part of the 8-bit Timer/Counter is the programmable bi-directional counter unit. Figure
6-54 shows a block diagram of the counter and its surrounding environment.
TOSC1
count
clkTn T/C
clear Oscillator
TCNTn Control Logic Prescaler
direction
TOSC2
164 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
OCRnx TCNTn
= (8-bit Comparator)
OCFnx (Int.Req.)
top
bottom
Waveform Generator OCnx
FOCn
WGMn1:0 COMnX1:0
The OCR2x Register is double buffered when using any of the Pulse Width Modulation (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 OCR2x 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 OCR2x Register access may seem complex, but this is not case. When the double buffering
is enabled, the CPU has access to the OCR2x Buffer Register, and if double buffering is dis-
abled the CPU will access the OCR2x directly.
165
9111E–AUTO–07/08
6.15.4.2 Compare Match Blocking by TCNT2 Write
All CPU write operations to the TCNT2 Register will block any compare match that occurs in the
next timer clock cycle, even when the timer is stopped. This feature allows OCR2x to be initial-
ized to the same value as TCNT2 without triggering an interrupt when the Timer/Counter clock is
enabled.
166 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
COMnx1
COMnx0 Waveform
D Q
FOCnx Generator
1
OCnx
OCnx Pin
0
D Q
DATA BUS
PORT
D Q
DDR
clkI/O
The general I/O port function is overridden by the Output Compare (OC2x) from the Waveform
Generator if either of the COM2x1:0 bits are set. However, the OC2x pin direction (input or out-
put) is still controlled by the Data Direction Register (DDR) for the port pin. The Data Direction
Register bit for the OC2x pin (DDR_OC2x) must be set as output before the OC2x value is visi-
ble on the pin. The port override function is independent of the Waveform Generation mode.
The design of the Output Compare pin logic allows initialization of the OC2x state before the out-
put is enabled. Note that some COM2x1:0 bit settings are reserved for certain modes of
operation (see “8-bit Timer/Counter Register Description” on page 174).
167
9111E–AUTO–07/08
6.15.6 Modes of Operation
The mode of operation, i.e., the behavior of the Timer/Counter and the Output Compare pins, is
defined by the combination of the Waveform Generation mode (WGM22:0) and Compare Output
mode (COM2x1:0) bits. The Compare Output mode bits do not affect the counting sequence,
while the Waveform Generation mode bits do. The COM2x1:0 bits control whether the PWM out-
put generated should be inverted or not (inverted or non-inverted PWM). For non-PWM modes
the COM2x1:0 bits control whether the output should be set, cleared, or toggled at a compare
match (see “Compare Match Output Unit” on page 166).
For detailed timing information refer to “Timer/Counter Timing Diagrams” on page 172.
TCNTn
OCn
(COMnx1:0 = 1)
(Toggle)
Period 1 2 3 4
168 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
An interrupt can be generated each time the counter value reaches the TOP value by using the
OCF2A Flag. If the interrupt is enabled, the interrupt handler routine can be used for updating
the TOP value. However, changing TOP to a value close to BOTTOM when the counter is run-
ning with none or a low prescaler value must be done with care since the CTC mode does not
have the double buffering feature. If the new value written to OCR2A is lower than the current
value of TCNT2, the counter will miss the compare match. The counter will then have to count to
its maximum value (0xFF) and wrap around starting at 0x00 before the compare match can
occur.
For generating a waveform output in CTC mode, the OC2A output can be set to toggle its logical
level on each compare match by setting the Compare Output mode bits to toggle mode
(COM2A1:0 = 1). The OC2A value will not be visible on the port pin unless the data direction for
the pin is set to output. The waveform generated will have a maximum frequency of fOC2A =
fclk_I/O/2 when OCR2A is set to zero (0x00). The waveform frequency is defined by the following
equation:
f clk_I/O
f OCnx = ------------------------------------------------------
-
2 ⋅ N ⋅ ( 1 + OCRnx )
The N variable represents the prescale factor (1, 8, 32, 64, 128, 256, or 1024).
As for the Normal mode of operation, the TOV2 Flag is set in the same timer clock cycle that the
counter counts from MAX to 0x00.
169
9111E–AUTO–07/08
Figure 6-58. Fast PWM Mode, Timing Diagram
OCRnx Interrupt
Flag Set
TCNTn
OCn (COMnx1:0 = 2)
OCn (COMnx1:0 = 3)
Period 1 2 3 4 5 6 7
The Timer/Counter Overflow Flag (TOV2) is set each time the counter reaches TOP. If the inter-
rupt is enabled, the interrupt handler routine can be used for updating the compare value.
In fast PWM mode, the compare unit allows generation of PWM waveforms on the OC2x pin.
Setting the COM2x1:0 bits to two will produce a non-inverted PWM and an inverted PWM output
can be generated by setting the COM2x1:0 to three. TOP is defined as 0xFF when WGM2:0 = 3,
and OCR2A when MGM2:0 = 7 (see Table 6-59 on page 174). The actual OC2x value will only
be visible on the port pin if the data direction for the port pin is set as output. The PWM wave-
form is generated by setting (or clearing) the OC2x Register at the compare match between
OCR2x and TCNT2, and clearing (or setting) the OC2x Register at the timer clock cycle the
counter is cleared (changes from TOP to BOTTOM).
The PWM frequency for the output can be calculated by the following equation:
f clk_I/O
f OCnxPWM = --------------------
-
N ⋅ 256
The N variable represents the prescale factor (1, 8, 32, 64, 128, 256, or 1024).
The extreme values for the OCR2A Register represent special cases when generating a PWM
waveform output in the fast PWM mode. If the OCR2A is set equal to BOTTOM, the output will
be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR2A equal to MAX will result
in a constantly high or low output (depending on the polarity of the output set by the COM2A1:0
bits.)
A frequency (with 50% duty cycle) waveform output in fast PWM mode can be achieved by set-
ting OC2x to toggle its logical level on each compare match (COM2x1:0 = 1). The waveform
generated will have a maximum frequency of foc2 = fclk_I/O/2 when OCR2A is set to zero. This fea-
ture is similar to the OC2A toggle in CTC mode, except the double buffer feature of the Output
Compare unit is enabled in the fast PWM mode.
170 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
OCnx Interrupt
Flag Set
OCRnx Update
TOVn Interrupt
Flag Set
TCNTn
OCn (COMnx1:0 = 2)
OCn (COMnx1:0 = 3)
Period 1 2 3
The Timer/Counter Overflow Flag (TOV2) is set each time the counter reaches BOTTOM. The
Interrupt Flag can be used to generate an interrupt each time the counter reaches the BOTTOM
value.
171
9111E–AUTO–07/08
In phase correct PWM mode, the compare unit allows generation of PWM waveforms on the
OC2x pin. Setting the COM2x1:0 bits to two will produce a non-inverted PWM. An inverted PWM
output can be generated by setting the COM2x1:0 to three. TOP is defined as 0xFF when
WGM2:0 = 3, and OCR2A when MGM2:0 = 7 (see Table 6-60 on page 175). The actual OC2x
value will only be visible on the port pin if the data direction for the port pin is set as output. The
PWM waveform is generated by clearing (or setting) the OC2x Register at the compare match
between OCR2x and TCNT2 when the counter increments, and setting (or clearing) the OC2x
Register at compare match between OCR2x and TCNT2 when the counter decrements. The
PWM frequency for the output when using phase correct PWM can be calculated by the follow-
ing equation:
f clk_I/O
f OCnxPCPWM = --------------------
-
N ⋅ 510
The N variable represents the prescale factor (1, 8, 32, 64, 128, 256, or 1024).
The extreme values for the OCR2A Register represent special cases when generating a PWM
waveform output in the phase correct PWM mode. If the OCR2A is set equal to BOTTOM, the
output will be continuously low and if set equal to MAX the output will be continuously high for
non-inverted PWM mode. For inverted PWM the output will have the opposite logic values.
At the very start of period 2 in Figure 6-59 on page 171 OCnx has a transition from high to low
even though there is no Compare Match. The point of this transition is to guarantee symmetry
around BOTTOM. There are two cases that give a transition without Compare Match.
• OCR2A changes its value from MAX, like in Figure 6-59 on page 171. When the OCR2A
value is MAX the OCn pin value is the same as the result of a down-counting compare match.
To ensure symmetry around BOTTOM the OCn value at MAX must correspond to the result
of an up-counting Compare Match.
• The timer starts counting from a value higher than the one in OCR2A, and for that reason
misses the Compare Match and hence the OCn change that would have happened on the
way up.
clkI/O
clkTN
(clkI/O/1)
TOVn
172 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 6-61 shows the same timing data, but with the prescaler enabled.
clkI/O
clkTN
(clkI/O/8)
TOVn
Figure 6-62 shows the setting of OCF2A in all modes except CTC mode.
Figure 6-62. Timer/Counter Timing Diagram, Setting of OCF2A, with Prescaler (fclk_I/O/8)
clkI/O
clkTn
(clkI/O/8)
OCFnx
Figure 6-63 shows the setting of OCF2A and the clearing of TCNT2 in CTC mode.
Figure 6-63. Timer/Counter Timing Diagram, Clear Timer on Compare Match mode, with Pres-
caler (fclk_I/O/8)
clkI/O
clkTN
(clkI/O/8)
TCNTn
TOP - 1 TOP BOTTOM BOTTOM + 1
(CTC)
OCRnx TOP
OCFnx
173
9111E–AUTO–07/08
6.15.8 8-bit Timer/Counter Register Description
Table 6-59 shows the COM2A1:0 bit functionality when the WGM21:0 bits are set to fast PWM
mode.
Note: 1. A special case occurs when OCR2A equals TOP and COM2A1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Fast PWM Mode” on page 169
for more details.
174 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-60 shows the COM2A1:0 bit functionality when the WGM22:0 bits are set to phase cor-
rect PWM mode.
Note: 1. A special case occurs when OCR2A equals TOP and COM2A1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Phase Correct PWM Mode” on
page 171 for more details.
• Bits 5:4 – COM2B1:0: Compare Match Output B Mode
These bits control the Output Compare pin (OC2B) behavior. If one or both of the
COM2B1:0 bits are set, the OC2B output overrides the normal port functionality of the I/O
pin it is connected to. However, note that the Data Direction Register (DDR) bit correspond-
ing to the OC2B pin must be set in order to enable the output driver.
When OC2B is connected to the pin, the function of the COM2B1:0 bits depends on the
WGM22:0 bit setting. Table 6-61 shows the COM2B1:0 bit functionality when the WGM22:0
bits are set to a normal or CTC mode (non-PWM).
Table 6-62 shows the COM2B1:0 bit functionality when the WGM22:0 bits are set to fast PWM
mode.
Note: 1. A special case occurs when OCR2B equals TOP and COM2B1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Phase Correct PWM Mode” on
page 171 for more details.
175
9111E–AUTO–07/08
Table 6-63 shows the COM2B1:0 bit functionality when the WGM22:0 bits are set to phase cor-
rect PWM mode.
Note: 1. A special case occurs when OCR2B equals TOP and COM2B1 is set. In this case, the Com-
pare Match is ignored, but the set or clear is done at TOP. See “Phase Correct PWM Mode” on
page 171 for more details.
• Bits 3, 2 – Res: Reserved Bits
These bits are reserved bits in the ATA6612/ATA6613 and will always read as zero.
• Bits 1:0 – WGM21:0: Waveform Generation Mode
Combined with the WGM22 bit found in the TCCR2B Register, these bits control the counting
sequence of the counter, the source for maximum (TOP) counter value, and what type of wave-
form generation to be used, see Table 6-64. Modes of operation supported by the Timer/Counter
unit are: Normal mode (counter), Clear Timer on Compare Match (CTC) mode, and two types of
Pulse Width Modulation (PWM) modes (see “Modes of Operation” on page 168).
176 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
177
9111E–AUTO–07/08
Table 6-65. Clock Select Bit Description
CS22 CS21 CS20 Description
0 0 0 No clock source (Timer/Counter stopped).
0 0 1 clkT2S/(No prescaling)
0 1 0 clkT2S/8 (From prescaler)
0 1 1 clkT2S/32 (From prescaler)
1 0 0 clkT2S/64 (From prescaler)
1 0 1 clkT2S/128 (From prescaler)
1 1 0 clkT2S/256 (From prescaler)
1 1 1 clkT2S/1024 (From prescaler)
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.
The Timer/Counter Register gives direct access, both for read and write operations, to the
Timer/Counter unit 8-bit counter. Writing to the TCNT2 Register blocks (removes) the Compare
Match on the following timer clock. Modifying the counter (TCNT2) while the counter is running,
introduces a risk of missing a Compare Match between TCNT2 and the OCR2x Registers.
The Output Compare Register A contains an 8-bit value that is continuously compared with the
counter value (TCNT2). A match can be used to generate an Output Compare interrupt, or to
generate a waveform output on the OC2A pin.
The Output Compare Register B contains an 8-bit value that is continuously compared with the
counter value (TCNT2). A match can be used to generate an Output Compare interrupt, or to
generate a waveform output on the OC2B pin.
178 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
179
9111E–AUTO–07/08
• Bit 0 – TOV2: Timer/Counter2 Overflow Flag
The TOV2 bit is set (one) when an overflow occurs in Timer/Counter2. TOV2 is cleared by
hardware when executing the corresponding interrupt handling vector. Alternatively, TOV2
is cleared by writing a logic one to the flag. When the SREG I-bit, TOIE2A (Timer/Counter2
Overflow Interrupt Enable), and TOV2 are set (one), the Timer/Counter2 Overflow interrupt
is executed. In PWM mode, this bit is set when Timer/Counter2 changes counting direction
at 0x00.
180 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
181
9111E–AUTO–07/08
• Bit 5 – AS2: Asynchronous Timer/Counter2
When AS2 is written to zero, Timer/Counter2 is clocked from the I/O clock, clkI/O. When
AS2 is written to one, Timer/Counter2 is clocked from a crystal Oscillator connected to the
Timer Oscillator 1 (TOSC1) pin. When the value of AS2 is changed, the contents of TCNT2,
OCR2A, OCR2B, TCCR2A and TCCR2B might be corrupted.
• Bit 4 – TCN2UB: Timer/Counter2 Update Busy
When Timer/Counter2 operates asynchronously and TCNT2 is written, this bit becomes set.
When TCNT2 has been updated from the temporary storage register, this bit is cleared by
hardware. A logical zero in this bit indicates that TCNT2 is ready to be updated with a new
value.
• Bit 3 – OCR2AUB: Output Compare Register2 Update Busy
When Timer/Counter2 operates asynchronously and OCR2A is written, this bit becomes set.
When OCR2A has been updated from the temporary storage register, this bit is cleared by
hardware. A logical zero in this bit indicates that OCR2A is ready to be updated with a new
value.
• Bit 2 – OCR2BUB: Output Compare Register2 Update Busy
When Timer/Counter2 operates asynchronously and OCR2B is written, this bit becomes set.
When OCR2B has been updated from the temporary storage register, this bit is cleared by
hardware. A logical zero in this bit indicates that OCR2B is ready to be updated with a new
value.
• Bit 1 – TCR2AUB: Timer/Counter Control Register2 Update Busy
When Timer/Counter2 operates asynchronously and TCCR2A is written, this bit becomes
set. When TCCR2A has been updated from the temporary storage register, this bit is
cleared by hardware. A logical zero in this bit indicates that TCCR2A is ready to be updated
with a new value.
• Bit 0 – TCR2BUB: Timer/Counter Control Register2 Update Busy
When Timer/Counter2 operates asynchronously and TCCR2B is written, this bit becomes
set. When TCCR2B has been updated from the temporary storage register, this bit is
cleared by hardware. A logical zero in this bit indicates that TCCR2B is ready to be updated
with a new value.
If a write is performed to any of the five Timer/Counter2 Registers while its update busy flag
is set, the updated value might get corrupted and cause an unintentional interrupt to occur.
The mechanisms for reading TCNT2, OCR2A, OCR2B, TCCR2A and TCCR2B are differ-
ent. When reading TCNT2, the actual timer value is read. When reading OCR2A, OCR2B,
TCCR2A and TCCR2B the value in the temporary storage register is read.
182 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
clkI/O clkT2S
10-BIT T/C PRESCALER
Clear
TOSC1
clkT2S/32
clkT2S/64
clkT2S/128
clkT2S/256
clkT2S/1024
clkT2S/8
AS2
PSRASY 0
CS20
CS21
CS22
The clock source for Timer/Counter2 is named clkT2S. clkT2S is by default connected to the main
system I/O clock clk IO. By setting the AS2 bit in ASSR, Timer/Counter2 is asynchronously
clocked from the TOSC1 pin. This enables use of Timer/Counter2 as a Real Time Counter
(RTC). When AS2 is set, pins TOSC1 and TOSC2 are disconnected from Port C. A crystal can
then be connected between the TOSC1 and TOSC2 pins to serve as an independent clock
source for Timer/Counter2. The Oscillator is optimized for use with a 32.768 kHz crystal. Apply-
ing an external clock source to TOSC1 is not recommended.
For Timer/Counter2, the possible prescaled selections are: clk T2S /8, clk T2S /32, clk T2S /64,
clkT2S/128, clkT2S/256, and clkT2S/1024. Additionally, clkT2S as well as 0 (stop) may be selected.
Setting the PSRASY bit in GTCCR resets the prescaler. This allows the user to operate with a
predictable prescaler.
183
9111E–AUTO–07/08
6.16 Serial Peripheral Interface – SPI
The Serial Peripheral Interface (SPI) allows high-speed synchronous data transfer between the
ATA6612/ATA6613 and peripheral devices or between several AVR devices. The
ATA6612/ATA6613 SPI includes the following features:
• Full-duplex, Three-wire Synchronous Data Transfer
• Master or Slave Operation
• LSB First or MSB First Data Transfer
• Seven Programmable Bit Rates
• End of Transmission Interrupt Flag
• Write Collision Flag Protection
• Wake-up from Idle Mode
• Double Speed (CK/2) Master SPI Mode
The USART can also be used in Master SPI mode (see “USART in SPI Mode” on page 220).
The PRSPI bit in “Power Reduction Register - PRR” on page 66 must be written to zero to
enable SPI module.
CLOCK
SPI CLOCK (MASTER)
SELECT CLOCK S SCK
LOGIC M
SPI2X
SPR0
SPR1
SS
DORD
MSTR
SPE
MSTR
SPI CONTROL SPE
DORD
MSTR
CPHA
CPOL
SPR1
SPR0
WCOL
SPI2X
SPIE
SPIF
SPE
8 8
184 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The interconnection between Master and Slave CPUs with SPI is shown in Figure 6-66. The sys-
tem consists of two shift Registers, and a Master clock generator. The SPI Master initiates the
communication cycle when pulling low the Slave Select SS pin of the desired Slave. Master and
Slave prepare the data to be sent in their respective shift Registers, and the Master generates
the required clock pulses on the SCK line to interchange data. Data is always shifted from Mas-
ter to Slave on the Master Out – Slave In, MOSI, line, and from Slave to Master on the Master In
– Slave Out, MISO, line. After each data packet, the Master will synchronize the Slave by pulling
high the Slave Select, SS, line.
When configured as a Master, the SPI interface has no automatic control of the SS line. This
must be handled by user software before communication can start. When this is done, writing a
byte to the SPI Data Register starts the SPI clock generator, and the hardware shifts the eight
bits into the Slave. After shifting one byte, the SPI clock generator stops, setting the end of
Transmission Flag (SPIF). If the SPI Interrupt Enable bit (SPIE) in the SPCR Register is set, an
interrupt is requested. The Master may continue to shift the next byte by writing it into SPDR, or
signal the end of packet by pulling high the Slave Select, SS line. The last incoming byte will be
kept in the Buffer Register for later use.
When configured as a Slave, the SPI interface will remain sleeping with MISO tri-stated as long
as the SS pin is driven high. In this state, software may update the contents of the SPI Data
Register, SPDR, but the data will not be shifted out by incoming clock pulses on the SCK pin
until the SS pin is driven low. As one byte has been completely shifted, the end of Transmission
Flag, SPIF is set. If the SPI Interrupt Enable bit, SPIE, in the SPCR Register is set, an interrupt
is requested. The Slave may continue to place new data to be sent into SPDR before reading
the incoming data. The last incoming byte will be kept in the Buffer Register for later use.
MOSI MOSI
SHIFT
ENABLE
The system is single buffered in the transmit direction and double buffered in the receive direc-
tion. This means that bytes to be transmitted cannot be written to the SPI Data Register before
the entire shift cycle is completed. When receiving data, however, a received character must be
read from the SPI Data Register before the next character has been completely shifted in. Oth-
erwise, the first byte is lost.
185
9111E–AUTO–07/08
In SPI Slave mode, the control logic will sample the incoming signal of the SCK pin. To ensure
correct sampling of the clock signal, the frequency of the SPI clock should never exceed fosc/4.
When the SPI is enabled, the data direction of the MOSI, MISO, SCK, and SS pins is overridden
according to Table 6-66. For more details on automatic port overrides, refer to “Alternate Port
Functions” on page 95.
Note: 1. See “Alternate Functions of Port B” on page 97 for a detailed description of how to define the
direction of the user defined SPI pins.
The following code examples show how to initialize the SPI as a Master and how to perform a
simple transmission. DDR_SPI in the examples must be replaced by the actual Data Direction
Register controlling the SPI pins. DD_MOSI, DD_MISO and DD_SCK must be replaced by the
actual data direction bits for these pins. E.g. if MOSI is placed on pin PB5, replace DD_MOSI
with DDB5 and DDR_SPI with DDRB.
186 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,r16
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
C Code Example(1)
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
187
9111E–AUTO–07/08
The following code examples show how to initialize the SPI as a Slave and how to perform a
simple reception.
Assembly Code Example(1)
SPI_SlaveInit:
; Set MISO output, all others input
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
; Enable SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
; Wait for reception complete
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Read received data and return
in r16,SPDR
ret
C Code Example(1)
void SPI_SlaveInit(void)
{
/* Set MISO output, all others input */
DDR_SPI = (1<<DD_MISO);
/* Enable SPI */
SPCR = (1<<SPE);
}
char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)))
;
/* Return Data Register */
return SPDR;
}
Note: 1. The example code assumes that the part specific header file is included.
188 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
189
9111E–AUTO–07/08
• Bit 4 – MSTR: Master/Slave Select
This bit selects Master SPI mode when written to one, and Slave SPI mode when written
logic zero. If SS is configured as an input and is driven low while MSTR is set, MSTR will be
cleared, and SPIF in SPSR will become set. The user will then have to set MSTR to
re-enable SPI Master mode.
• Bit 3 – CPOL: Clock Polarity
When this bit is written to one, SCK is high when idle. When CPOL is written to zero, SCK is
low when idle. Refer to Figure 6-67 and Figure 6-68 for an example. The CPOL functionality
is summarized below:
190 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The SPI Data Register is a read/write register used for data transfer between the Register File
and the SPI Shift Register. Writing to the register initiates data transmission. Reading the regis-
ter causes the Shift Register Receive buffer to be read.
191
9111E–AUTO–07/08
6.16.2 Data Modes
There are four combinations of SCK phase and polarity with respect to serial data, which are
determined by control bits CPHA and CPOL. The SPI data transfer formats are shown in Figure
6-67 and Figure 6-68. Data bits are shifted out and latched in on opposite edges of the SCK sig-
nal, ensuring sufficient time for data signals to stabilize. This is clearly seen by summarizing
Table 6-67 and Table 6-68, as done below.
SCK (CPOL = 0)
mode 0
SCK (CPOL = 1)
mode 2
SAMPLE I
MOSI/MISO
CHANGE 0
MOSI PIN
CHANGE 0
MISO PIN
SS
MSB first (DORD = 0) MSB Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 LSB
LSB first (DORD = 1) LSB Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 MSB
SCK (CPOL = 0)
mode 1
SCK (CPOL = 1)
mode 3
SAMPLE I
MOSI/MISO
CHANGE 0
MOSI PIN
CHANGE 0
MISO PIN
SS
MSB first (DORD = 0) MSB Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 LSB
LSB first (DORD = 1) LSB Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 MSB
192 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.17 USART0
The Universal Synchronous and Asynchronous serial Receiver and Transmitter (USART) is a
highly flexible serial communication device. The main features are:
• Full Duplex Operation (Independent Serial Receive and Transmit Registers)
• Asynchronous or Synchronous Operation
• Master or Slave Clocked Synchronous Operation
• High Resolution Baud Rate Generator
• Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits
• Odd or Even Parity Generation and Parity Check Supported by Hardware
• Data OverRun Detection
• Framing Error Detection
• Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter
• Three Separate Interrupts on TX Complete, TX Data Register Empty and RX Complete
• Multi-processor Communication Mode
• Double Speed Asynchronous Communication Mode
The USART can also be used in Master SPI mode (see “USART in SPI Mode” on page 220. The
Power Reduction USART bit, PRUSART0, in “Power Reduction Register - PRR” on page 66
must be disabled by writing a logical zero to it.
6.17.1 Overview
A simplified block diagram of the USART Transmitter is shown in Figure 6-69 on page 194. CPU
accessible I/O Registers and I/O pins are shown in bold.
193
9111E–AUTO–07/08
Figure 6-69. USART Block Diagram(1)
Clock Generator
UBRRn [H:L]
OSC
Transmitter
TX
UDRn(Transmit)
CONTROL
PARITY
GENERATOR
DATA BUS
PIN
TRANSMIT SHIFT REGISTER TxDn
CONTROL
Receiver
CLOCK RX
RECOVERY CONTROL
DATA PIN
RECEIVE SHIFT REGISTER RxDn
RECOVERY CONTROL
PARITY
UDRn(Receive) CHECKER
Note: 1. Refer to Table 6-38 on page 104 for USART0 pin placement.
The dashed boxes in the block diagram separate the three main parts of the USART (listed from
the top): Clock Generator, Transmitter and Receiver. Control Registers are shared by all units.
The Clock Generation logic consists of synchronization logic for external clock input used by
synchronous slave operation, and the baud rate generator. The XCKn (Transfer Clock) pin is
only used by synchronous transfer mode. The Transmitter consists of a single write buffer, a
serial Shift Register, Parity Generator and Control logic for handling different serial frame for-
mats. The write buffer allows a continuous transfer of data without any delay between frames.
The Receiver is the most complex part of the USART module due to its clock and data recovery
units. The recovery units are used for asynchronous data reception. In addition to the recovery
units, the Receiver includes a Parity Checker, Control logic, a Shift Register and a two level
receive buffer (UDRn). The Receiver supports the same frame formats as the Transmitter, and
can detect Frame Error, Data OverRun and Parity Errors.
194 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Sync Edge
xcki Register Detector 0
XCKn UMSELn
xcko 1
Pin
DDR_XCKn UCPOLn 1
rxclk
0
Signal description:
txclk Transmitter clock (Internal Signal).
rxclk Receiver base clock (Internal Signal).
xcki Input from XCK pin (internal Signal). Used for synchronous slave
operation.
xcko Clock output to XCK pin (Internal Signal). Used for synchronous master
operation.
fosc XTAL pin frequency (System Clock).
195
9111E–AUTO–07/08
Table 6-71 contains equations for calculating the baud rate (in bits per second) and for calculat-
ing the UBRRn value for each mode of operation using an internally generated clock source.
f OSC
Asynchronous Normal mode BAUD = -----------------------------------------
-
(U2Xn = 0) 16 ( UBRRn + 1 )
f OSC
UBRRn = -------------------
-–1
8BAUD
f OSC
UBRRn = -------------------
-–1
2BAUD
f OSC
Synchronous Master mode BAUD = --------------------------------------
-
2 ( UBRRn + 1 )
Note: 1. The baud rate is defined to be the transfer rate in bit per second (bps)
BAUD Baud rate (in bits per second, bps)
fOSC System Oscillator clock frequency
UBRRn Contents of the UBRRnH and UBRRnL Registers, (0-4095)
Some examples of UBRRn values for some system clock frequencies are found in Table 6-79 on
page 218 (see “Examples of UBRRn Settings for Commonly Used Oscillator Frequencies” on
page 218).
196 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note that fosc depends on the stability of the system clock source. It is therefore recommended to
add some margin to avoid possible loss of data due to frequency variations.
UCPOL = 1 XCK
RxD / TxD
Sample
UCPOL = 0 XCK
RxD / TxD
Sample
The UCPOLn bit UCRSC selects which XCKn clock edge is used for data sampling and which is
used for data change. As Figure 6-71 shows, when UCPOLn is zero the data will be changed at
rising XCKn edge and sampled at falling XCKn edge. If UCPOLn is set, the data will be changed
at falling XCKn edge and sampled at rising XCKn edge.
197
9111E–AUTO–07/08
6.17.3 Frame Formats
A serial frame is defined to be one character of data bits with synchronization bits (start and stop
bits), and optionally a parity bit for error checking. The USART accepts all 30 combinations of
the following as valid frame formats:
• 1 start bit
• 5, 6, 7, 8, or 9 data bits
• no, even or odd parity bit
• 1 or 2 stop bits
A frame starts with the start bit followed by the least significant data bit. Then the next data bits,
up to a total of nine, are succeeding, ending with the most significant bit. If enabled, the parity bit
is inserted after the data bits, before the stop bits. When a complete frame is transmitted, it can
be directly followed by a new frame, or the communication line can be set to an idle (high) state.
Figure 6-72 illustrates the possible combinations of the frame formats. Bits inside brackets are
optional.
FRAME
(IDLE) St 0 1 2 3 4 [5] [6] [7] [8] [P] Sp1 [Sp2] (St / IDLE)
198 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
P even = d n – 1 ⊕ …⊕ d 3 ⊕ d2 ⊕ d1 ⊕ d0 ⊕ 0
P odd = d n – 1 ⊕ …⊕ d 3 ⊕ d2 ⊕ d1 ⊕ d0 ⊕ 1
199
9111E–AUTO–07/08
Assembly Code Example(1)
USART_Init:
; Set baud rate
out UBRRnH, r17
out UBRRnL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXENn)|(1<<TXENn)
out UCSRnB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<USBSn)|(3<<UCSZn0)
out UCSRnC,r16
ret
C Code Example(1)
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRnH = (unsigned char)(baud>>8);
UBRRnL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRnB = (1<<RXENn)|(1<<TXENn);
/* Set frame format: 8data, 2stop bit */
UCSRnC = (1<<USBSn)|(3<<UCSZn0);
}
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
More advanced initialization routines can be made that include frame format as parameters, dis-
able interrupts and so on. However, many applications use a fixed setting of the baud and
control registers, and for these types of applications the initialization code can be placed directly
in the main routine, or be combined with initialization code for other I/O modules.
200 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The function simply waits for the transmit buffer to be empty by checking the UDREn Flag,
before loading it with new data to be transmitted. If the Data Register Empty interrupt is utilized,
the interrupt routine writes the data into the buffer.
201
9111E–AUTO–07/08
6.17.5.2 Sending Frames with 9 Data Bit
If 9-bit characters are used (UCSZn = 7), the ninth bit must be written to the TXB8 bit in
UCSRnB before the low byte of the character is written to UDRn. The following code examples
show a transmit function that handles 9-bit characters. For the assembly code, the data to be
sent is assumed to be stored in registers R17:R16.
Assembly Code Example(1)(2)
USART_Transmit:
; Wait for empty transmit buffer
sbis UCSRnA,UDREn
rjmp USART_Transmit
; Copy 9th bit from r17 to TXB8
cbi UCSRnB,TXB8
sbrc r17,0
sbi UCSRnB,TXB8
; Put LSB data (r16) into buffer, sends the data
out UDRn,r16
ret
C Code Example(1)(2)
void USART_Transmit( unsigned int data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRnA & (1<<UDREn))) )
;
/* Copy 9th bit to TXB8 */
UCSRnB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRnB |= (1<<TXB8);
/* Put data into buffer, sends the data */
UDRn = data;
}
Notes: 1. These transmit functions are written to be general functions. They can be optimized if the con-
tents of the UCSRnB is static. For example, only the TXB8 bit of the UCSRnB Register is used
after initialization.
2. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The ninth bit can be used for indicating an address frame when using multi processor communi-
cation mode or for other protocol handling as for example synchronization.
202 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
203
9111E–AUTO–07/08
6.17.6.1 Receiving Frames with 5 to 8 Data Bits
The Receiver starts data reception when it detects a valid start bit. Each bit that follows the start
bit will be sampled at the baud rate or XCKn clock, and shifted into the Receive Shift Register
until the first stop bit of a frame is received. A second stop bit will be ignored by the Receiver.
When the first stop bit is received, i.e., a complete serial frame is present in the Receive Shift
Register, the contents of the Shift Register will be moved into the receive buffer. The receive
buffer can then be read by reading the UDRn I/O location.
The following code example shows a simple USART receive function based on polling of the
Receive Complete (RXCn) Flag. When using frames with less than eight bits the most significant
bits of the data read from the UDRn will be masked to zero. The USART has to be initialized
before the function can be used.
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
The function simply waits for data to be present in the receive buffer by checking the RXCn Flag,
before reading the buffer and returning the value.
204 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The following code example shows a simple USART receive function that handles both nine bit
characters and the status bits.
Assembly Code Example(1)
USART_Receive:
; Wait for data to be received
sbis UCSRnA, RXCn
rjmp USART_Receive
; Get status and 9th bit, then data from buffer
in r18, UCSRnA
in r17, UCSRnB
in r16, UDRn
; If error, return -1
andi r18,(1<<FEn)|(1<<DORn)|(1<<UPEn)
breq USART_ReceiveNoError
ldi r17, HIGH(-1)
ldi r16, LOW(-1)
USART_ReceiveNoError:
; Filter the 9th bit, then return
lsr r17
andi r17, 0x01
ret
C Code Example(1)
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/* Wait for data to be received */
while ( !(UCSRnA & (1<<RXCn)) )
;
/* Get status and 9th bit, then data */
/* from buffer */
status = UCSRnA;
resh = UCSRnB;
resl = UDRn;
/* If error, return -1 */
if ( status & (1<<FEn)|(1<<DORn)|(1<<UPEn) )
return -1;
/* Filter the 9th bit, then return */
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
205
9111E–AUTO–07/08
The receive function example reads all the I/O Registers into the Register File before any com-
putation is done. This gives an optimal receive buffer utilization since the buffer location read will
be free to accept new data as early as possible.
206 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. The example code assumes that the part specific header file is included.
For I/O Registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI”
instructions must be replaced with instructions that allow access to extended I/O. Typically
“LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
207
9111E–AUTO–07/08
6.17.7 Asynchronous Data Reception
The USART includes a clock recovery and a data recovery unit for handling asynchronous data
reception. The clock recovery logic is used for synchronizing the internally generated baud rate
clock to the incoming asynchronous serial frames at the RxDn pin. The data recovery logic sam-
ples and low pass filters each incoming bit, thereby improving the noise immunity of the
Receiver. The asynchronous reception operational range depends on the accuracy of the inter-
nal baud rate clock, the rate of the incoming frames, and the frame size in number of bits.
Sample
(U2X = 0) 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3
Sample
(U2X = 1) 0 1 2 3 4 5 6 7 8 1 2
When the clock recovery logic detects a high (idle) to low (start) transition on the RxDn line, the
start bit detection sequence is initiated. Let sample 1 denote the first zero-sample as shown in
the figure. The clock recovery logic then uses samples 8, 9, and 10 for Normal mode, and sam-
ples 4, 5, and 6 for Double Speed mode (indicated with sample numbers inside boxes on the
figure), to decide if a valid start bit is received. If two or more of these three samples have logical
high levels (the majority wins), the start bit is rejected as a noise spike and the Receiver starts
looking for the next high to low-transition. If however, a valid start bit is detected, the clock recov-
ery logic is synchronized and the data recovery can begin. The synchronization process is
repeated for each start bit.
208 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
RxD BIT n
Sample
(U2X = 0) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
Sample
(U2X = 1) 1 2 3 4 5 6 7 8 1
The decision of the logic level of the received bit is taken by doing a majority voting of the logic
value to the three samples in the center of the received bit. The center samples are emphasized
on the figure by having the sample number inside boxes. The majority voting process is done as
follows: If two or all three samples have high levels, the received bit is registered to be a logic 1.
If two or all three samples have low levels, the received bit is registered to be a logic 0. This
majority voting process acts as a low pass filter for the incoming signal on the RxDn pin. The
recovery process is then repeated until a complete frame is received. Including the first stop bit.
Note that the Receiver only uses the first stop bit of a frame.
Figure 6-75 shows the sampling of the stop bit and the earliest possible beginning of the start bit
of the next frame.
Figure 6-75. Stop Bit Sampling and Next Start Bit Sampling
Sample
(U2X = 0) 1 2 3 4 5 6 7 8 9 10 0/1 0/1 0/1
Sample
(U2X = 1) 1 2 3 4 5 6 0/1
The same majority voting is done to the stop bit as done for the other bits in the frame. If the stop
bit is registered to have a logic 0 value, the Frame Error (FEn) Flag will be set.
A new high to low transition indicating the start bit of a new frame can come right after the last of
the bits used for majority voting. For Normal Speed mode, the first low level sample can be at
point marked (A) in Figure 6-75. For Double Speed mode the first low level must be delayed to
(B). (C) marks a stop bit of full length. The early start bit detection influences the operational
range of the Receiver.
209
9111E–AUTO–07/08
6.17.7.3 Asynchronous Operational Range
The operational range of the Receiver is dependent on the mismatch between the received bit
rate and the internally generated baud rate. If the Transmitter is sending frames at too fast or too
slow bit rates, or the internally generated baud rate of the Receiver does not have a similar (see
Table 6-72) base frequency, the Receiver will not be able to synchronize the frames to the start
bit.
The following equations can be used to calculate the ratio of the incoming data rate and internal
receiver baud rate.
( D + 1 )S ( D + 2 )S
R slow = --------------------------------------------- R fast = -----------------------------------
S – 1 + D × S + SF ( D + 1 )S + S M
Table 6-72. Recommended Maximum Receiver Baud Rate Error for Normal Speed Mode
(U2Xn = 0)
D Recommended Max
# (Data+Parity Bit) Rslow (%) Rfast (%) Max Total Error (%) Receiver Error (%)
5 93.20 106.67 +6.67/-6.8 ± 3.0
6 94.12 105.79 +5.79/-5.88 ± 2.5
7 94.81 105.11 +5.11/-5.19 ± 2.0
8 95.36 104.58 +4.58/-4.54 ± 2.0
9 95.81 104.14 +4.14/-4.19 ± 1.5
10 96.17 103.78 +3.78/-3.83 ± 1.5
210 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-73. Recommended Maximum Receiver Baud Rate Error for Double Speed Mode
(U2Xn = 1)
D Recommended Max
# (Data+Parity Bit) Rslow (%) Rfast (%) Max Total Error (%) Receiver Error (%)
5 94.12 105.66 +5.66/-5.88 ± 2.5
6 94.92 104.92 +4.92/-5.08 ± 2.0
7 95.52 104,35 +4.35/-4.48 ± 1.5
8 96.00 103.90 +3.90/-4.00 ± 1.5
9 96.39 103.53 +3.53/-3.61 ± 1.5
10 96.70 103.23 +3.23/-3.30 ± 1.0
The recommendations of the maximum receiver baud rate error was made under the assump-
tion that the Receiver and Transmitter equally divides the maximum total error.
There are two possible sources for the receivers baud rate error. The Receiver’s system clock
(XTAL) will always have some minor instability over the supply voltage range and the tempera-
ture range. When using a crystal to generate the system clock, this is rarely a problem, but for a
resonator the system clock may differ more than 2% depending of the resonators tolerance. The
second source for the error is more controllable. The baud rate generator can not always do an
exact division of the system frequency to get the baud rate wanted. In this case an UBRRn value
that gives an acceptable low error can be used if possible.
211
9111E–AUTO–07/08
6.17.8.1 Using MPCMn
For an MCU to act as a master MCU, it can use a 9-bit character frame format (UCSZn = 7). The
ninth bit (TXB8n) must be set when an address frame (TXB8n = 1) or cleared when a data frame
(TXB = 0) is being transmitted. The slave MCUs must in this case be set to use a 9-bit character
frame format.
The following procedure should be used to exchange data in Multi-processor Communication
mode:
1. All Slave MCUs are in Multi-processor Communication mode (MPCMn in
UCSRnA is set).
2. The Master MCU sends an address frame, and all slaves receive and read this frame.
In the Slave MCUs, the RXCn Flag in UCSRnA will be set as normal.
3. Each Slave MCU reads the UDRn Register and determines if it has been selected. If
so, it clears the MPCMn bit in UCSRnA, otherwise it waits for the next address byte and
keeps the MPCMn setting.
4. The addressed MCU will receive all data frames until a new address frame is received.
The other Slave MCUs, which still have the MPCMn bit set, will ignore the data frames.
5. When the last data frame is received by the addressed MCU, the addressed MCU sets
the MPCMn bit and waits for a new address frame from master. The process then
repeats from 2.
Using any of the 5- to 8-bit character frame formats is possible, but impractical since the
Receiver must change between using n and n+1 character frame formats. This makes
full-duplex operation difficult since the Transmitter and Receiver uses the same character size
setting. If 5- to 8-bit character frames are used, the Transmitter must be set to use two stop bit
(USBSn = 1) since the first stop bit is used for indicating the frame type.
Do not use Read-Modify-Write instructions (SBI and CBI) to set or clear the MPCMn bit. The
MPCMn bit shares the same I/O location as the TXCn Flag and this might accidentally be
cleared when using SBI or CBI instructions.
The USART Transmit Data Buffer Register and USART Receive Data Buffer Registers share the
same I/O address referred to as USART Data Register or UDRn. The Transmit Data Buffer Reg-
ister (TXB) will be the destination for data written to the UDRn Register location. Reading the
UDRn Register location will return the contents of the Receive Data Buffer Register (RXB).
For 5-, 6-, or 7-bit characters the upper unused bits will be ignored by the Transmitter and set to
zero by the Receiver.
212 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The transmit buffer can only be written when the UDREn Flag in the UCSRnA Register is set.
Data written to UDRn when the UDREn Flag is not set, will be ignored by the USART Transmit-
ter. When data is written to the transmit buffer, and the Transmitter is enabled, the Transmitter
will load the data into the Transmit Shift Register when the Shift Register is empty. Then the
data will be serially transmitted on the TxDn pin.
The receive buffer consists of a two level FIFO. The FIFO will change its state whenever the
receive buffer is accessed. Due to this behavior of the receive buffer, do not use Read-Mod-
ify-Write instructions (SBI and CBI) on this location. Be careful when using bit test instructions
(SBIC and SBIS), since these also will change the state of the FIFO.
213
9111E–AUTO–07/08
• Bit 2 – UPEn: USART Parity Error
This bit is set if the next character in the receive buffer had a Parity Error when received and
the Parity Checking was enabled at that point (UPMn1 = 1). This bit is valid until the receive
buffer (UDRn) is read. Always set this bit to zero when writing to UCSRnA.
• Bit 1 – U2Xn: Double the USART Transmission Speed
This bit only has effect for the asynchronous operation. Write this bit to zero when using syn-
chronous operation.
Writing this bit to one will reduce the divisor of the baud rate divider from 16 to 8 effectively
doubling the transfer rate for asynchronous communication.
• Bit 0 – MPCMn: Multi-processor Communication Mode
This bit enables the Multi-processor Communication mode. When the MPCMn bit is written
to one, all the incoming frames received by the USART Receiver that do not contain address
information will be ignored. The Transmitter is unaffected by the MPCMn setting. For more
detailed information see “Multi-processor Communication Mode” on page 211.
214 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. See “USART in SPI Mode” on page 220 for full description of the Master SPI Mode (MSPIM)
operation
• Bits 5:4 – UPMn1:0: Parity Mode
These bits enable and set type of parity generation and check. If enabled, the Transmitter
will automatically generate and send the parity of the transmitted data bits within each
frame. The Receiver will generate a parity value for the incoming data and compare it to the
UPMn setting. If a mismatch is detected, the UPEn Flag in UCSRnA will be set.
215
9111E–AUTO–07/08
Table 6-76. USBS Bit Settings
USBSn Stop Bit(s)
0 1-bit
1 2-bit
• Bit 2:1 – UCSZn1:0: Character Size
The UCSZn1:0 bits combined with the UCSZn2 bit in UCSRnB sets the number of data bits
(Character SiZe) in a frame the Receiver and Transmitter use.
216 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
217
9111E–AUTO–07/08
Table 6-79. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies
fosc = 1.0000 MHz fosc = 1.8432 MHz fosc = 2.0000 MHz
Baud
Rate U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1
(bps) UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error
2400 25 0.2% 51 0.2% 47 0.0% 95 0.0% 51 0.2% 103 0.2%
4800 12 0.2% 25 0.2% 23 0.0% 47 0.0% 25 0.2% 51 0.2%
9600 6 -7.0% 12 0.2% 11 0.0% 23 0.0% 12 0.2% 25 0.2%
14.4k 3 8.5% 8 -3.5% 7 0.0% 15 0.0% 8 -3.5% 16 2.1%
19.2k 2 8.5% 6 -7.0% 5 0.0% 11 0.0% 6 -7.0% 12 0.2%
28.8k 1 8.5% 3 8.5% 3 0.0% 7 0.0% 3 8.5% 8 -3.5%
38.4k 1 -18.6% 2 8.5% 2 0.0% 5 0.0% 2 8.5% 6 -7.0%
57.6k 0 8.5% 1 8.5% 1 0.0% 3 0.0% 1 8.5% 3 8.5%
76.8k – – 1 -18.6% 1 -25.0% 2 0.0% 1 -18.6% 2 8.5%
115.2k – – 0 8.5% 0 0.0% 1 0.0% 0 8.5% 1 8.5%
230.4k – – – – – – 0 0.0% – – – –
250k – – – – – – – – – – 0 0.0%
(1)
Max. 62.5 kbps 125 kbps 115.2 kbps 230.4 kbps 125 kbps 250 kbps
Note: 1. UBRRn = 0, Error = 0.0%
Table 6-80. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies (Continued)
fosc = 3.6864 MHz fosc = 4.0000 MHz fosc = 7.3728 MHz
Baud
Rate U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1
(bps) UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error
2400 95 0.0% 191 0.0% 103 0.2% 207 0.2% 191 0.0% 383 0.0%
4800 47 0.0% 95 0.0% 51 0.2% 103 0.2% 95 0.0% 191 0.0%
9600 23 0.0% 47 0.0% 25 0.2% 51 0.2% 47 0.0% 95 0.0%
14.4k 15 0.0% 31 0.0% 16 2.1% 34 -0.8% 31 0.0% 63 0.0%
19.2k 11 0.0% 23 0.0% 12 0.2% 25 0.2% 23 0.0% 47 0.0%
28.8k 7 0.0% 15 0.0% 8 -3.5% 16 2.1% 15 0.0% 31 0.0%
38.4k 5 0.0% 11 0.0% 6 -7.0% 12 0.2% 11 0.0% 23 0.0%
57.6k 3 0.0% 7 0.0% 3 8.5% 8 -3.5% 7 0.0% 15 0.0%
76.8k 2 0.0% 5 0.0% 2 8.5% 6 -7.0% 5 0.0% 11 0.0%
115.2k 1 0.0% 3 0.0% 1 8.5% 3 8.5% 3 0.0% 7 0.0%
230.4k 0 0.0% 1 0.0% 0 8.5% 1 8.5% 1 0.0% 3 0.0%
250k 0 -7.8% 1 -7.8% 0 0.0% 1 0.0% 1 -7.8% 3 -7.8%
0.5M – – 0 -7.8% – – 0 0.0% 0 -7.8% 1 -7.8%
1M – – – – – – – – – – 0 -7.8%
Max. (1) 230.4 kbps 460.8 kbps 250 kbps 0.5 Mbps 460.8 kbps 921.6 kbps
1. UBRRn = 0, Error = 0.0%
218 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-81. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies (Continued)
fosc = 8.0000 MHz fosc = 11.0592 MHz fosc = 14.7456 MHz
Baud
Rate U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1
(bps) UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error
2400 207 0.2% 416 -0.1% 287 0.0% 575 0.0% 383 0.0% 767 0.0%
4800 103 0.2% 207 0.2% 143 0.0% 287 0.0% 191 0.0% 383 0.0%
9600 51 0.2% 103 0.2% 71 0.0% 143 0.0% 95 0.0% 191 0.0%
14.4k 34 -0.8% 68 0.6% 47 0.0% 95 0.0% 63 0.0% 127 0.0%
19.2k 25 0.2% 51 0.2% 35 0.0% 71 0.0% 47 0.0% 95 0.0%
28.8k 16 2.1% 34 -0.8% 23 0.0% 47 0.0% 31 0.0% 63 0.0%
38.4k 12 0.2% 25 0.2% 17 0.0% 35 0.0% 23 0.0% 47 0.0%
57.6k 8 -3.5% 16 2.1% 11 0.0% 23 0.0% 15 0.0% 31 0.0%
76.8k 6 -7.0% 12 0.2% 8 0.0% 17 0.0% 11 0.0% 23 0.0%
115.2k 3 8.5% 8 -3.5% 5 0.0% 11 0.0% 7 0.0% 15 0.0%
230.4k 1 8.5% 3 8.5% 2 0.0% 5 0.0% 3 0.0% 7 0.0%
250k 1 0.0% 3 0.0% 2 -7.8% 5 -7.8% 3 -7.8% 6 5.3%
0.5M 0 0.0% 1 0.0% – – 2 -7.8% 1 -7.8% 3 -7.8%
1M – – 0 0.0% – – – – 0 -7.8% 1 -7.8%
(1)
Max. 0.5 Mbps 1 Mbps 691.2 kbps 1.3824 Mbps 921.6 kbps 1.8432 Mbps
1. UBRRn = 0, Error = 0.0%
Table 6-82. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies (Continued)
fosc = 16.0000 MHz fosc = 18.4320 MHz fosc = 20.0000 MHz
Baud
Rate U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1 U2Xn = 0 U2Xn = 1
(bps) UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error UBRRn Error
2400 416 -0.1% 832 0.0% 479 0.0% 959 0.0% 520 0.0% 1041 0.0%
4800 207 0.2% 416 -0.1% 239 0.0% 479 0.0% 259 0.2% 520 0.0%
9600 103 0.2% 207 0.2% 119 0.0% 239 0.0% 129 0.2% 259 0.2%
14.4k 68 0.6% 138 -0.1% 79 0.0% 159 0.0% 86 -0.2% 173 -0.2%
19.2k 51 0.2% 103 0.2% 59 0.0% 119 0.0% 64 0.2% 129 0.2%
28.8k 34 -0.8% 68 0.6% 39 0.0% 79 0.0% 42 0.9% 86 -0.2%
38.4k 25 0.2% 51 0.2% 29 0.0% 59 0.0% 32 -1.4% 64 0.2%
57.6k 16 2.1% 34 -0.8% 19 0.0% 39 0.0% 21 -1.4% 42 0.9%
76.8k 12 0.2% 25 0.2% 14 0.0% 29 0.0% 15 1.7% 32 -1.4%
115.2k 8 -3.5% 16 2.1% 9 0.0% 19 0.0% 10 -1.4% 21 -1.4%
230.4k 3 8.5% 8 -3.5% 4 0.0% 9 0.0% 4 8.5% 10 -1.4%
250k 3 0.0% 7 0.0% 4 -7.8% 8 2.4% 4 0.0% 9 0.0%
0.5M 1 0.0% 3 0.0% – – 4 -7.8% – – 4 0.0%
1M 0 0.0% 1 0.0% – – – – – – – –
(1)
Max. 1 Mbps 2 Mbps 1.152 Mbps 2.304 Mbps 1.25 Mbps 2.5 Mbps
1. UBRRn = 0, Error = 0.0%
219
9111E–AUTO–07/08
6.18 USART in SPI Mode
The Universal Synchronous and Asynchronous serial Receiver and Transmitter (USART) can be
set to a master SPI compliant mode of operation. The Master SPI Mode (MSPIM) has the follow-
ing features:
• Full Duplex, Three-wire Synchronous Data Transfer
• Master Operation
• Supports all four SPI Modes of Operation (Mode 0, 1, 2, and 3)
• LSB First or MSB First Data Transfer (Configurable Data Order)
• Queued Operation (Double Buffered)
• High Resolution Baud Rate Generator
• High Speed Operation (fXCKmax = fCK/2)
• Flexible Interrupt Generation
6.18.1 Overview
Setting both UMSELn1:0 bits to one enables the USART in MSPIM logic. In this mode of opera-
tion the SPI master control logic takes direct control over the USART resources. These
resources include the transmitter and receiver shift register and buffers, and the baud rate gen-
erator. The parity generator and checker, the data and clock recovery logic, and the RX and TX
control logic is disabled. The USART RX and TX control logic is replaced by a common SPI
transfer control logic. However, the pin control logic and interrupt generation logic is identical in
both modes of operation.
The I/O register locations are the same in both modes. However, some of the functionality of the
control registers changes when using MSPIM.
220 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. The baud rate is defined to be the transfer rate in bit per second (bps)
BAUD Baud rate (in bits per second, bps)
fOSC System Oscillator clock frequency
UBRRn Contents of the UBRRnH and UBRRnL Registers, (0-4095)
XCK XCK
XCK XCK
UCPHA=0
221
9111E–AUTO–07/08
6.18.4 Frame Formats
A serial frame for the MSPIM is defined to be one character of 8 data bits. The USART in MSPIM
mode has two valid frame formats:
• 8-bit data with MSB first
• 8-bit data with LSB first
A frame starts with the least or most significant data bit. Then the next data bits, up to a total of
eight, are succeeding, ending with the most or least significant bit accordingly. When a complete
frame is transmitted, a new frame can directly follow it, or the communication line can be set to
an idle (high) state.
The UDORDn bit in UCSRnC sets the frame format used by the USART in MSPIM mode. The
Receiver and Transmitter use the same setting. Note that changing the setting of any of these
bits will corrupt all ongoing communication for both the Receiver and Transmitter.
16-bit data transfer can be achieved by writing two data bytes to UDRn. A UART transmit com-
plete interrupt will then signal that the 16-bit value has been shifted out.
222 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: 1. The example code assumes that the part specific header file is included. For I/O Registers
located in extended I/O map, "IN", "OUT", "SBIS", "SBIC", "CBI", and "SBI" instructions must
be replaced with instructions that allow access to extended I/O. Typically "LDS" and "STS"
combined with "SBRS", "SBRC", "SBR", and "CBR".
223
9111E–AUTO–07/08
6.18.5 Data Transfer
Using the USART in MSPI mode requires the Transmitter to be enabled, i.e. the TXENn bit in
the UCSRnB register is set to one. When the Transmitter is enabled, the normal port operation
of the TxDn pin is overridden and given the function as the Transmitter's serial output. Enabling
the receiver is optional and is done by setting the RXENn bit in the UCSRnB register to one.
When the receiver is enabled, the normal pin operation of the RxDn pin is overridden and given
the function as the Receiver's serial input. The XCKn will in both cases be used as the transfer
clock.
After initialization the USART is ready for doing data transfers. A data transfer is initiated by writ-
ing to the UDRn I/O location. This is the case for both sending and receiving data since the
transmitter controls the transfer clock. The data written to UDRn is moved from the transmit buf-
fer to the shift register when the shift register is ready to send a new frame.
Note: To keep the input buffer in sync with the number of data bytes transmitted, the UDRn register must
be read once for each byte transmitted. The input buffer operation is identical to normal USART
mode, i.e. if an overflow occurs the character last received will be lost, not the first data in the buf-
fer. This means that if four bytes are transferred, byte 1 first, then byte 2, 3, and 4, and the UDRn
is not read before all transfers are completed, then byte 3 to be received will be lost, and not byte
1.
The following code examples show a simple USART in MSPIM mode transfer function based on
polling of the Data Register Empty (UDREn) Flag and the Receive Complete (RXCn) Flag. The
USART has to be initialized before the function can be used. For the assembly code, the data to
be sent is assumed to be stored in Register R16 and the data received will be available in the
same register (R16) after the function returns.
The function simply waits for the transmit buffer to be empty by checking the UDREn Flag,
before loading it with new data to be transmitted. The function then waits for data to be present
in the receive buffer by checking the RXCn Flag, before reading the buffer and returning the
value.
224 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
225
9111E–AUTO–07/08
6.18.6 USART MSPIM Register Description
The following section describes the registers used for SPI operation using the USART.
Bit 7 6 5 4 3 2 1 0
RXCn TXCn UDREn - - - - - UCSRnA
Read/Write R/W R/W R/W R R R R R
Initial Value 0 0 0 0 0 1 1 0
226 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Bit 7 6 5 4 3 2 1 0
RXCIEn TXCIEn UDRIE RXENn TXENn - - - UCSRnB
Read/Write R/W R/W R/W R/W R/W R R R
Initial Value 0 0 0 0 0 1 1 0
227
9111E–AUTO–07/08
6.18.6.4 USART MSPIM Control and Status Register n C - UCSRnC
Bit 7 6 5 4 3 2 1 0
UMSELn1 UMSELn0 - - - UDORDn UCPHAn UCPOLn UCSRnC
Read/Write R/W R/W R R R R/W R/W R/W
Initial Value 0 0 0 0 0 1 1 0
228 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
229
9111E–AUTO–07/08
6.19 2-wire Serial Interface
6.19.1 Features
• Simple Yet Powerful and Flexible Communication Interface, only two Bus Lines Needed
• Both Master and Slave Operation Supported
• Device can Operate as Transmitter or Receiver
• 7-bit Address Space Allows up to 128 Different Slave Addresses
• Multi-master Arbitration Support
• Up to 400 kHz Data Transfer Speed
• Slew-rate Limited Output Drivers
• Noise Suppression Circuitry Rejects Spikes on Bus Lines
• Fully Programmable Slave Address with General Call Support
• Address Recognition Causes Wake-up When AVR is in Sleep Mode
SDA
SCL
The PRTWI bit in “Power Reduction Register - PRR” on page 66 must be written to zero to
enable the 2-wire Serial Interface.
230 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
SDA
SCL
Data Change
231
9111E–AUTO–07/08
Figure 6-79. START, REPEATED START and STOP Conditions
SDA
SCL
SDA
SCL
1 2 7 8 9
START
232 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
SDA from
Transmitter
SDA from
Receiver
SCL from
Master
1 2 7 8 9
STOP, REPEATED
SLA+R/W Data Byte START or Next
Data Byte
Addr MSB Addr LSB R/W ACK Data MSB Data LSB ACK
SDA
SCL
1 2 7 8 9 1 2 7 8 9
233
9111E–AUTO–07/08
6.19.4 Multi-master Bus Systems, Arbitration and Synchronization
The TWI protocol allows bus systems with several masters. Special concerns have been taken
in order to ensure that transmissions will proceed as normal, even if two or more masters initiate
a transmission at the same time. Two problems arise in multi-master systems:
• An algorithm must be implemented allowing only one of the masters to complete the
transmission. All other masters should cease transmission when they discover that they have
lost the selection process. This selection process is called arbitration. When a contending
master discovers that it has lost the arbitration process, it should immediately switch to Slave
mode to check whether it is being addressed by the winning master. The fact that multiple
masters have started transmission at the same time should not be detectable to the slaves,
i.e. the data being transferred on the bus must not be corrupted.
• Different masters may use different SCL frequencies. A scheme must be devised to
synchronize the serial clocks from all masters, in order to let the transmission proceed in a
lockstep fashion. This will facilitate the arbitration process.
The wired-ANDing of the bus lines is used to solve both these problems. The serial clocks from
all masters will be wired-ANDed, yielding a combined clock with a high period equal to the one
from the Master with the shortest high period. The low period of the combined clock is equal to
the low period of the Master with the longest low period. Note that all masters listen to the SCL
line, effectively starting to count their SCL high and low time-out periods when the combined
SCL line goes high or low, respectively.
SCL from
Master A
SCL from
Master B
SCL Bus
Line
TBlow TBhigh
234 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Arbitration is carried out by all masters continuously monitoring the SDA line after outputting
data. If the value read from the SDA line does not match the value the Master had output, it has
lost the arbitration. Note that a Master can only lose arbitration when it outputs a high SDA value
while another Master outputs a low value. The losing Master should immediately go to Slave
mode, checking if it is being addressed by the winning Master. The SDA line should be left high,
but losing masters are allowed to generate a clock signal until the end of the current data or
address packet. Arbitration will continue until only one Master remains, and this may take many
bits. If several masters are trying to address the same Slave, arbitration will continue into the
data packet.
SDA from
Master B
SDA Line
Synchronized
SCL Line
235
9111E–AUTO–07/08
6.19.5 Overview of the TWI Module
The TWI module is comprised of several submodules, as shown in Figure 6-85. All registers
drawn in a thick line are accessible through the AVR data bus.
SCL SDA
START / STOP
Spike Suppression Prescaler
Control
TWI Unit
(TWAR) (TWSR) (TWCR)
236 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
237
9111E–AUTO–07/08
6.19.5.5 Control Unit
The Control unit monitors the TWI bus and generates responses corresponding to settings in the
TWI Control Register (TWCR). When an event requiring the attention of the application occurs
on the TWI bus, the TWI Interrupt Flag (TWINT) is asserted. In the next clock cycle, the TWI Sta-
tus Register (TWSR) is updated with a status code identifying the event. The TWSR only
contains relevant status information when the TWI Interrupt Flag is asserted. At all other times,
the TWSR contains a special status code indicating that no relevant status information is avail-
able. As long as the TWINT Flag is set, the SCL line is held low. This allows the application
software to complete its tasks before allowing the TWI transmission to continue.
The TWINT Flag is set in the following situations:
• After the TWI has transmitted a START/REPEATED START condition.
• After the TWI has transmitted SLA+R/W.
• After the TWI has transmitted an address byte.
• After the TWI has lost arbitration.
• After the TWI has been addressed by own slave address or general call.
• After the TWI has received a data byte.
• After a STOP or REPEATED START has been received while still addressed as a Slave.
• When a bus error has occurred due to an illegal START or STOP condition.
The TWCR is used to control the operation of the TWI. It is used to enable the TWI, to initiate a
Master access by applying a START condition to the bus, to generate a Receiver acknowledge,
to generate a stop condition, and to control halting of the bus while the data to be written to the
bus are written to the TWDR. It also indicates a write collision if data is attempted written to
TWDR while the register is inaccessible.
• Bit 7 – TWINT: TWI Interrupt Flag
This bit is set by hardware when the TWI has finished its current job and expects application
software response. If the I-bit in SREG and TWIE in TWCR are set, the MCU will jump to the
TWI Interrupt Vector.
238 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
While the TWINT Flag is set, the SCL low period is stretched. The TWINT Flag must be
cleared by software by writing a logic one to it. Note that this flag is not automatically cleared
by hardware when executing the interrupt routine. Also note that clearing this flag starts the
operation of the TWI, so all accesses to the TWI Address Register (TWAR), TWI Status
Register (TWSR), and TWI Data Register (TWDR) must be complete before clearing this
flag.
• Bit 6 – TWEA: TWI Enable Acknowledge Bit
The TWEA bit controls the generation of the acknowledge pulse. If the TWEA bit is written to
one, the ACK pulse is generated on the TWI bus if the following conditions are met:
The device’s own slave address has been received.
A general call has been received, while the TWGCE bit in the TWAR is set.
A data byte has been received in Master Receiver or Slave Receiver mode.
By writing the TWEA bit to zero, the device can be virtually disconnected from the 2-wire
Serial Bus temporarily. Address recognition can then be resumed by writing the TWEA bit to
one again.
• Bit 5 – TWSTA: TWI START Condition Bit
The application writes the TWSTA bit to one when it desires to become a Master on the
2-wire Serial Bus. The TWI hardware checks if the bus is available, and generates a START
condition on the bus if it is free. However, if the bus is not free, the TWI waits until a STOP
condition is detected, and then generates a new START condition to claim the bus Master
status. TWSTA must be cleared by software when the START condition has been
transmitted.
• Bit 4 – TWSTO: TWI STOP Condition Bit
Writing the TWSTO bit to one in Master mode will generate a STOP condition on the 2-wire
Serial Bus. When the STOP condition is executed on the bus, the TWSTO bit is cleared
automatically. In Slave mode, setting the TWSTO bit can be used to recover from an error
condition. This will not generate a STOP condition, but the TWI returns to a well-defined
unaddressed Slave mode and releases the SCL and SDA lines to a high impedance state.
• Bit 3 – TWWC: TWI Write Collision Flag
The TWWC bit is set when attempting to write to the TWI Data Register – TWDR when
TWINT is low. This flag is cleared by writing the TWDR Register when TWINT is high.
• Bit 2 – TWEN: TWI Enable Bit
The TWEN bit enables TWI operation and activates the TWI interface. When TWEN is writ-
ten to one, the TWI takes control over the I/O pins connected to the SCL and SDA pins,
enabling the slew-rate limiters and spike filters. If this bit is written to zero, the TWI is
switched off and all TWI transmissions are terminated, regardless of any ongoing operation.
• Bit 1 – Res: Reserved Bit
This bit is a reserved bit and will always read as zero.
• Bit 0 – TWIE: TWI Interrupt Enable
When this bit is written to one, and the I-bit in SREG is set, the TWI interrupt request will be
activated for as long as the TWINT Flag is high.
239
9111E–AUTO–07/08
6.19.6.3 TWI Status Register – TWSR
Bit 7 6 5 4 3 2 1 0
TWS7 TWS6 TWS5 TWS4 TWS3 – TWPS1 TWPS0 TWSR
Read/Write R R R R R R R/W R/W
Initial Value 1 1 1 1 1 0 0 0
To calculate bit rates, see “Bit Rate Generator Unit” on page 237. The value of TWPS1..0 is
used in the equation.
In Transmit mode, TWDR contains the next byte to be transmitted. In Receive mode, the TWDR
contains the last byte received. It is writable while the TWI is not in the process of shifting a byte.
This occurs when the TWI Interrupt Flag (TWINT) is set by hardware. Note that the Data Regis-
ter cannot be initialized by the user before the first interrupt occurs. The data in TWDR remains
stable as long as TWINT is set. While data is shifted out, data on the bus is simultaneously
shifted in. TWDR always contains the last byte present on the bus, except after a wake up from
a sleep mode by the TWI interrupt. In this case, the contents of TWDR is undefined. In the case
of a lost bus arbitration, no data is lost in the transition from Master to Slave. Handling of the
ACK bit is controlled automatically by the TWI logic, the CPU cannot access the ACK bit directly.
• Bits 7..0 – TWD: TWI Data Register
These eight bits constitute the next data byte to be transmitted, or the latest data byte
received on the 2-wire Serial Bus.
240 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The TWAR should be loaded with the 7-bit Slave address (in the seven most significant bits of
TWAR) to which the TWI will respond when programmed as a Slave Transmitter or Receiver,
and not needed in the Master modes. In multi master systems, TWAR must be set in masters
which can be addressed as Slaves by other Masters.
The LSB of TWAR is used to enable recognition of the general call address (0x00). There is an
associated address comparator that looks for the slave address (or general call address if
enabled) in the received serial address. If a match is found, an interrupt request is generated.
• Bits 7..1 – TWA: TWI (Slave) Address Register
These seven bits constitute the slave address of the TWI unit.
• Bit 0 – TWGCE: TWI General Call Recognition Enable Bit
If set, this bit enables the recognition of a General Call given over the 2-wire Serial Bus.
TWAR0
Address
Match
Address
Bit 0
TWAMR0
Address Bit Comparator 0
241
9111E–AUTO–07/08
6.19.7 Using the TWI
The AVR TWI is byte-oriented and interrupt based. Interrupts are issued after all bus events, like
reception of a byte or transmission of a START condition. Because the TWI is interrupt-based,
the application software is free to carry on other operations during a TWI byte transfer. Note that
the TWI Interrupt Enable (TWIE) bit in TWCR together with the Global Interrupt Enable bit in
SREG allow the application to decide whether or not assertion of the TWINT Flag should gener-
ate an interrupt request. If the TWIE bit is cleared, the application must poll the TWINT Flag in
order to detect actions on the TWI bus.
When the TWINT Flag is asserted, the TWI has finished an operation and awaits application
response. In this case, the TWI Status Register (TWSR) contains a value indicating the current
state of the TWI bus. The application software can then decide how the TWI should behave in
the next TWI bus cycle by manipulating the TWCR and TWDR Registers.
Figure 6-87 is a simple example of how the application can interface to the TWI hardware. In this
example, a Master wishes to transmit a single data byte to a Slave. This description is quite
abstract, a more detailed explanation follows later in this section. A simple code example imple-
menting the desired behavior is also presented.
writes to TWCR to TWDR, and loads appropriate control and ACK received.
Application loads data into TWDR, and
Action
initiate signals into TWCR, makin sure that Application loads appropriate control
loads appropriate control signals into
transmission of TWINT is written to one, signals to send STOP into TWCR,
TWCR, making sure that TWINT is
START and TWSTA is written to zero. making sure that TWINT is written to one
written to one
Indicates
4. TWINT set.
Hardware
1. The first step in a TWI transmission is to transmit a START condition. This is done by
writing a specific value into TWCR, instructing the TWI hardware to transmit a START
condition. Which value to write is described later on. However, it is important that the
TWINT bit is set in the value written. Writing a one to TWINT clears the flag. The TWI
will not start any operation as long as the TWINT bit in TWCR is set. Immediately after
the application has cleared TWINT, the TWI will initiate transmission of the START
condition.
2. When the START condition has been transmitted, the TWINT Flag in TWCR is set, and
TWSR is updated with a status code indicating that the START condition has success-
fully been sent.
242 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
3. The application software should now examine the value of TWSR, to make sure that the
START condition was successfully transmitted. If TWSR indicates otherwise, the appli-
cation software might take some special action, like calling an error routine. Assuming
that the status code is as expected, the application must load SLA+W into TWDR.
Remember that TWDR is used both for address and data. After TWDR has been
loaded with the desired SLA+W, a specific value must be written to TWCR, instructing
the TWI hardware to transmit the SLA+W present in TWDR. Which value to write is
described later on. However, it is important that the TWINT bit is set in the value written.
Writing a one to TWINT clears the flag. The TWI will not start any operation as long as
the TWINT bit in TWCR is set. Immediately after the application has cleared TWINT,
the TWI will initiate transmission of the address packet.
4. When the address packet has been transmitted, the TWINT Flag in TWCR is set, and
TWSR is updated with a status code indicating that the address packet has success-
fully been sent. The status code will also reflect whether a Slave acknowledged the
packet or not.
5. The application software should now examine the value of TWSR, to make sure that the
address packet was successfully transmitted, and that the value of the ACK bit was as
expected. If TWSR indicates otherwise, the application software might take some spe-
cial action, like calling an error routine. Assuming that the status code is as expected,
the application must load a data packet into TWDR. Subsequently, a specific value
must be written to TWCR, instructing the TWI hardware to transmit the data packet
present in TWDR. Which value to write is described later on. However, it is important
that the TWINT bit is set in the value written. Writing a one to TWINT clears the flag.
The TWI will not start any operation as long as the TWINT bit in TWCR is set. Immedi-
ately after the application has cleared TWINT, the TWI will initiate transmission of the
data packet.
6. When the data packet has been transmitted, the TWINT Flag in TWCR is set, and
TWSR is updated with a status code indicating that the data packet has successfully
been sent. The status code will also reflect whether a Slave acknowledged the packet
or not.
7. The application software should now examine the value of TWSR, to make sure that the
data packet was successfully transmitted, and that the value of the ACK bit was as
expected. If TWSR indicates otherwise, the application software might take some spe-
cial action, like calling an error routine. Assuming that the status code is as expected,
the application must write a specific value to TWCR, instructing the TWI hardware to
transmit a STOP condition. Which value to write is described later on. However, it is
important that the TWINT bit is set in the value written. Writing a one to TWINT clears
the flag. The TWI will not start any operation as long as the TWINT bit in TWCR is set.
Immediately after the application has cleared TWINT, the TWI will initiate transmission
of the STOP condition. Note that TWINT is NOT set after a STOP condition has been
sent.
243
9111E–AUTO–07/08
Even though this example is simple, it shows the principles involved in all TWI transmissions.
These can be summarized as follows:
• When the TWI has finished an operation and expects application response, the TWINT Flag
is set. The SCL line is pulled low until TWINT is cleared.
• When the TWINT Flag is set, the user must update all TWI Registers with the value relevant
for the next TWI bus cycle. As an example, TWDR must be loaded with the value to be
transmitted in the next bus cycle.
• After all TWI Register updates and other pending application software tasks have been
completed, TWCR is written. When writing TWCR, the TWINT bit should be set. Writing a
one to TWINT clears the flag. The TWI will then commence executing whatever operation
was specified by the TWCR setting.
In the following an assembly and C implementation of the example is given. Note that the code
below assumes that several definitions have been made, for example by using include-files.
244 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Table 6-89.
Assembly Code Example C Example Comments
ldi r16, (1<<TWINT)|(1<<TWSTA)| TWCR = (1<<TWINT)|(1<<TWSTA)|
1 (1<<TWEN) (1<<TWEN) Send START condition
out TWCR, r16
wait1: while (!(TWCR & (1<<TWINT)))
in r16,TWCR ; Wait for TWINT Flag set. This
2 indicates that the START condition
sbrs r16,TWINT has been transmitted
rjmp wait1
in r16,TWSR if ((TWSR & 0xF8) != START) Check value of TWI Status
andi r16, 0xF8 ERROR(); Register. Mask prescaler bits. If
cpi r16, START status different from START go to
ERROR
brne ERROR
3
ldi r16, SLA_W TWDR = SLA_W;
out TWDR, r16 TWCR = (1<<TWINT) | (1<<TWEN); Load SLA_W into TWDR Register.
Clear TWINT bit in TWCR to start
ldi r16, (1<<TWINT) | (1<<TWEN) transmission of address
out TWCR, r16
wait2: while (!(TWCR & (1<<TWINT))) Wait for TWINT Flag set. This
in r16,TWCR ; indicates that the SLA+W has been
4
sbrs r16,TWINT transmitted, and ACK/NACK has
been received.
rjmp wait2
in r16,TWSR if ((TWSR & 0xF8) != Check value of TWI Status
andi r16, 0xF8 MT_SLA_ACK) Register. Mask prescaler bits. If
cpi r16, MT_SLA_ACK ERROR(); status different from MT_SLA_ACK
go to ERROR
brne ERROR
5
ldi r16, DATA TWDR = DATA;
out TWDR, r16 TWCR = (1<<TWINT) | (1<<TWEN); Load DATA into TWDR Register.
Clear TWINT bit in TWCR to start
ldi r16, (1<<TWINT) | (1<<TWEN) transmission of data
out TWCR, r16
wait3: while (!(TWCR & (1<<TWINT))) Wait for TWINT Flag set. This
in r16,TWCR ; indicates that the DATA has been
6
sbrs r16,TWINT transmitted, and ACK/NACK has
been received.
rjmp wait3
in r16,TWSR if ((TWSR & 0xF8) != Check value of TWI Status
andi r16, 0xF8 MT_DATA_ACK) Register. Mask prescaler bits. If
cpi r16, MT_DATA_ACK ERROR(); status different from
7 MT_DATA_ACK go to ERROR
brne ERROR
ldi r16, (1<<TWINT)|(1<<TWEN)| TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO) (1<<TWSTO); Transmit STOP condition
out TWCR, r16
245
9111E–AUTO–07/08
6.19.8 Transmission Modes
The TWI can operate in one of four major modes. These are named Master Transmitter (MT),
Master Receiver (MR), Slave Transmitter (ST) and Slave Receiver (SR). Several of these
modes can be used in the same application. As an example, the TWI can use MT mode to write
data into a TWI EEPROM, MR mode to read the data back from the EEPROM. If other masters
are present in the system, some of these might transmit data to the TWI, and then SR mode
would be used. It is the application software that decides which modes are legal.
The following sections describe each of these modes. Possible status codes are described
along with figures detailing data transmission in each of the modes. These figures contain the
following abbreviations:
S: START condition
Rs: REPEATED START condition
R: Read bit (high level at SDA)
W: Write bit (low level at SDA)
A: Acknowledge bit (low level at SDA)
A: Not acknowledge bit (high level at SDA)
Data: 8-bit data byte
P: STOP condition
SLA: Slave Address
In Figure 6-89 on page 249 to Figure 6-95 on page 259, circles are used to indicate that the
TWINT Flag is set. The numbers in the circles show the status code held in TWSR, with the
prescaler bits masked to zero. At these points, actions must be taken by the application to con-
tinue or complete the TWI transfer. The TWI transfer is suspended until the TWINT Flag is
cleared by software.
When the TWINT Flag is set, the status code in TWSR is used to determine the appropriate soft-
ware action. For each status code, the required software action and details of the following serial
transfer are given in Table 6-90 on page 248 to Table 6-93 on page 258. Note that the prescaler
bits are masked to zero in these tables.
246 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Device 1 Device 2
MASTER SLAVE Device 3 ........ Device n R1 R2
TRANSMITTER RECEIVER
SDA
SCL
TWEN must be set to enable the 2-wire Serial Interface, TWSTA must be written to one to trans-
mit a START condition and TWINT must be written to one to clear the TWINT Flag. The TWI will
then test the 2-wire Serial Bus and generate a START condition as soon as the bus becomes
free. After a START condition has been transmitted, the TWINT Flag is set by hardware, and the
status code in TWSR will be 0x08 (see Table 6-90 on page 248). In order to enter MT mode,
SLA+W must be transmitted. This is done by writing SLA+W to TWDR. Thereafter the TWINT bit
should be cleared (by writing it to one) to continue the transfer. This is accomplished by writing
the following value to TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 0 0 X 1 0 X
When SLA+W have been transmitted and an acknowledgement bit has been received, TWINT is
set again and a number of status codes in TWSR are possible. Possible status codes in Master
mode are 0x18, 0x20, or 0x38. The appropriate action to be taken for each of these status codes
is detailed in Table 6-90 on page 248.
When SLA+W has been successfully transmitted, a data packet should be transmitted. This is
done by writing the data byte to TWDR. TWDR must only be written when TWINT is high. If not,
the access will be discarded, and the Write Collision bit (TWWC) will be set in the TWCR Regis-
ter. After updating TWDR, the TWINT bit should be cleared (by writing it to one) to continue the
transfer. This is accomplished by writing the following value to TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 0 0 X 1 0 X
This scheme is repeated until the last byte has been sent and the transfer is ended by generat-
ing a STOP condition or a repeated START condition. A STOP condition is generated by writing
the following value to TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 0 1 X 1 0 X
247
9111E–AUTO–07/08
A REPEATED START condition is generated by writing the following value to TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 1 0 X 1 0 X
After a repeated START condition (state 0x10) the 2-wire Serial Interface can access the same
Slave again, or a new Slave without transmitting a STOP condition. Repeated START enables
the Master to switch between Slaves, Master Transmitter mode and Master Receiver mode with-
out losing control of the bus.
248 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Successfull
transmission S SLA W A DATA A P
to a slave
receiver
Next transfer
started with a RS SLA W
repeated start
condition
$10
Not acknowledge R
received after the A P
slave address
$20
MR
Not acknowledge
received after a data A P
byte
$30
$38 $38
To corresponding
$68 $78 $B0 states in slave mode
249
9111E–AUTO–07/08
Figure 6-90. Data Transfer in Master Receiver Mode
VCC
Device 1 Device 2
MASTER SLAVE Device 3 ........ Device n R1 R2
RECEIVER TRANSMITTER
SDA
SCL
TWEN must be written to one to enable the 2-wire Serial Interface, TWSTA must be written to
one to transmit a START condition and TWINT must be set to clear the TWINT Flag. The TWI
will then test the 2-wire Serial Bus and generate a START condition as soon as the bus
becomes free. After a START condition has been transmitted, the TWINT Flag is set by hard-
ware, and the status code in TWSR will be 0x08 (see Table 6-90 on page 248). In order to enter
MR mode, SLA+R must be transmitted. This is done by writing SLA+R to TWDR. Thereafter the
TWINT bit should be cleared (by writing it to one) to continue the transfer. This is accomplished
by writing the following value to TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 0 0 X 1 0 X
When SLA+R have been transmitted and an acknowledgement bit has been received, TWINT is
set again and a number of status codes in TWSR are possible. Possible status codes in Master
mode are 0x38, 0x40, or 0x48. The appropriate action to be taken for each of these status codes
is detailed in Table 6-91 on page 251. Received data can be read from the TWDR Register
when the TWINT Flag is set high by hardware. This scheme is repeated until the last byte has
been received. After the last byte has been received, the MR should inform the ST by sending a
NACK after the last received data byte. The transfer is ended by generating a STOP condition or
a repeated START condition. A STOP condition is generated by writing the following value to
TWCR:
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 1 X 0 1 X 1 0 X
250 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
After a repeated START condition (state 0x10) the 2-wire Serial Interface can access the same
Slave again, or a new Slave without transmitting a STOP condition. Repeated START enables
the Master to switch between Slaves, Master Transmitter mode and Master Receiver mode with-
out losing control over the bus.
Data byte has been received; Read data byte or 0 1 1 X STOP condition will be transmitted and TWSTO
0x58 Flag will be reset
NOT ACK has been returned
Read data byte 1 1 1 X STOP condition followed by a START condition
will be transmitted and TWSTO Flag will be reset
251
9111E–AUTO–07/08
Figure 6-91. Formats and States in the Master Receiver Mode
MR
Successfull
reception S SLA R A DATA A DATA A P
from a slave
receiver
$08 $40 $50 $58
Next transfer
started with a RS SLA R
repeated start
condition
$10
Not acknowledge W
received after the A P
slave address
$48
MT
Arbitration lost in slave Other master Other master
address or data byte A or A A
continues continues
$38 $38
To corresponding
$68 $78 $B0
states in slave mode
Device 1 Device 2
SLAVE MASTER Device 3 ........ Device n R1 R2
RECEIVER TRANSMITTER
SDA
SCL
252 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
To initiate the Slave Receiver mode, TWAR and TWCR must be initialized as follows:
TWAR TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
value Device’s Own Slave Address
The upper 7 bits are the address to which the 2-wire Serial Interface will respond when
addressed by a Master. If the LSB is set, the TWI will respond to the general call address (0x00),
otherwise it will ignore the general call address.
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 0 1 0 0 0 1 0 X
TWEN must be written to one to enable the TWI. The TWEA bit must be written to one to enable
the acknowledgement of the device’s own slave address or the general call address. TWSTA
and TWSTO must be written to zero.
When TWAR and TWCR have been initialized, the TWI waits until it is addressed by its own
slave address (or the general call address if enabled) followed by the data direction bit. If the
direction bit is “0” (write), the TWI will operate in SR mode, otherwise ST mode is entered. After
its own slave address and the write bit have been received, the TWINT Flag is set and a valid
status code can be read from TWSR. The status code is used to determine the appropriate soft-
ware action. The appropriate action to be taken for each status code is detailed in Table 6-92 on
page 254. The Slave Receiver mode may also be entered if arbitration is lost while the TWI is in
the Master mode (see states 0x68 and 0x78).
If the TWEA bit is reset during a transfer, the TWI will return a “Not Acknowledge” (“1”) to SDA
after the next received data byte. This can be used to indicate that the Slave is not able to
receive any more bytes. While TWEA is zero, the TWI does not acknowledge its own slave
address. However, the 2-wire Serial Bus is still monitored and address recognition may resume
at any time by setting TWEA. This implies that the TWEA bit may be used to temporarily isolate
the TWI from the 2-wire Serial Bus.
In all sleep modes other than Idle mode, the clock system to the TWI is turned off. If the TWEA
bit is set, the interface can still acknowledge its own slave address or the general call address by
using the 2-wire Serial Bus clock as a clock source. The part will then wake up from sleep and
the TWI will hold the SCL clock low during the wake up and until the TWINT Flag is cleared (by
writing it to one). Further data reception will be carried out as normal, with the AVR clocks run-
ning as normal. Observe that if the AVR is set up with a long start-up time, the SCL line may be
held low for a long time, blocking other data transmissions.
Note that the 2-wire Serial Interface Data Register – TWDR does not reflect the last byte present
on the bus when waking up from these Sleep modes.
253
9111E–AUTO–07/08
Table 6-92. Status Codes for Slave Receiver Mode
Status Code Application Software Response
(TWSR) To TWCR
Prescaler Status of the 2-wire Serial
Bits Bus and 2-wire Serial
are 0 Interface Hardware To/from TWDR STA STO TWINT TWEA Next Action Taken by TWI Hardware
Own SLA+W has been No TWDR action or X 0 1 0 Data byte will be received and NOT ACK will be
0x60 received; returned
ACK has been returned No TWDR action X 0 1 1 Data byte will be received and ACK will be returned
Arbitration lost in SLA+R/W as No TWDR action or X 0 1 0 Data byte will be received and NOT ACK will be
Master; own SLA+W has been returned
0x68
received; ACK has been
No TWDR action X 0 1 1 Data byte will be received and ACK will be returned
returned
General call address has been No TWDR action or X 0 1 0 Data byte will be received and NOT ACK will be
0x70 received; ACK has been returned
returned No TWDR action X 0 1 1 Data byte will be received and ACK will be returned
Arbitration lost in SLA+R/W as No TWDR action or X 0 1 0 Data byte will be received and NOT ACK will be
Master; General call address returned
0x78
has been received; ACK has No TWDR action X 0 1 1 Data byte will be received and ACK will be returned
been returned
Previously addressed with own Read data byte or X 0 1 0 Data byte will be received and NOT ACK will be
SLA+W; data has been returned
0x80
received; ACK has been
Read data byte X 0 1 1 Data byte will be received and ACK will be returned
returned
Read data byte or 0 0 1 0 Switched to the not addressed Slave mode;
no recognition of own SLA or GCA
Read data byte or 0 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”
Previously addressed with own Read data byte or 1 0 1 0 Switched to the not addressed Slave mode;
SLA+W; data has been no recognition of own SLA or GCA;
0x88
received; NOT ACK has been a START condition will be transmitted when the bus
returned becomes free
Read data byte 1 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”;
a START condition will be transmitted when the bus
becomes free
254 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
255
9111E–AUTO–07/08
Figure 6-93. Formats and States in the Slave Receiver Mode
Reception of the own
slave address and one or S SLA W A DATA A DATA A P or S
more data bytes. All are
acknowledged
$60 $80 $80 $A0
$88
$68
$98
$78
Device 1 Device 2
SLAVE MASTER Device 3 ........ Device n R1 R2
TRANSMITTER RECEIVER
SDA
SCL
256 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
To initiate the Slave Transmitter mode, TWAR and TWCR must be initialized as follows:
TWAR TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
value Device’s Own Slave Address
The upper seven bits are the address to which the 2-wire Serial Interface will respond when
addressed by a Master. If the LSB is set, the TWI will respond to the general call address (0x00),
otherwise it will ignore the general call address.
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
value 0 1 0 0 0 1 0 X
TWEN must be written to one to enable the TWI. The TWEA bit must be written to one to enable
the acknowledgement of the device’s own slave address or the general call address. TWSTA
and TWSTO must be written to zero.
When TWAR and TWCR have been initialized, the TWI waits until it is addressed by its own
slave address (or the general call address if enabled) followed by the data direction bit. If the
direction bit is “1” (read), the TWI will operate in ST mode, otherwise SR mode is entered. After
its own slave address and the write bit have been received, the TWINT Flag is set and a valid
status code can be read from TWSR. The status code is used to determine the appropriate soft-
ware action. The appropriate action to be taken for each status code is detailed in Table 6-93 on
page 258. The Slave Transmitter mode may also be entered if arbitration is lost while the TWI is
in the Master mode (see state 0xB0).
If the TWEA bit is written to zero during a transfer, the TWI will transmit the last byte of the trans-
fer. State 0xC0 or state 0xC8 will be entered, depending on whether the Master Receiver
transmits a NACK or ACK after the final byte. The TWI is switched to the not addressed Slave
mode, and will ignore the Master if it continues the transfer. Thus the Master Receiver receives
all “1” as serial data. State 0xC8 is entered if the Master demands additional data bytes (by
transmitting ACK), even though the Slave has transmitted the last byte (TWEA zero and expect-
ing NACK from the Master).
While TWEA is zero, the TWI does not respond to its own slave address. However, the 2-wire
Serial Bus is still monitored and address recognition may resume at any time by setting TWEA.
This implies that the TWEA bit may be used to temporarily isolate the TWI from the 2-wire Serial
Bus.
In all sleep modes other than Idle mode, the clock system to the TWI is turned off. If the TWEA
bit is set, the interface can still acknowledge its own slave address or the general call address by
using the 2-wire Serial Bus clock as a clock source. The part will then wake up from sleep and
the TWI will hold the SCL clock will low during the wake up and until the TWINT Flag is cleared
(by writing it to one). Further data transmission will be carried out as normal, with the AVR clocks
running as normal. Observe that if the AVR is set up with a long start-up time, the SCL line may
be held low for a long time, blocking other data transmissions.
Note that the 2-wire Serial Interface Data Register – TWDR does not reflect the last byte present
on the bus when waking up from these sleep modes.
257
9111E–AUTO–07/08
Table 6-93. Status Codes for Slave Transmitter Mode
Status Code Application Software Response
(TWSR) To TWCR
Prescaler Status of the 2-wire Serial
Bits Bus and 2-wire Serial
are 0 Interface Hardware To/from TWDR STA STO TWINT TWEA Next Action Taken by TWI Hardware
Load data byte or X 0 1 0 Last data byte will be transmitted and NOT ACK
Own SLA+R has been
should be received
0xA8 received;
Load data byte X 0 1 1 Data byte will be transmitted and ACK should be
ACK has been returned
received
Arbitration lost in SLA+R/W as Load data byte or X 0 1 0 Last data byte will be transmitted and NOT ACK
Master; own SLA+R has been should be received
0xB0
received; ACK has been Load data byte X 0 1 1 Data byte will be transmitted and ACK should be
returned received
Load data byte or X 0 1 0 Last data byte will be transmitted and NOT ACK
Data byte in TWDR has been should be received
0xB8 transmitted; ACK has been
Load data byte X 0 1 1 Data byte will be transmitted and ACK should be
received
received
No TWDR action or 0 0 1 0 Switched to the not addressed Slave mode;
no recognition of own SLA or GCA
No TWDR action or 0 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”
No TWDR action or 1 0 1 0 Switched to the not addressed Slave mode;
Data byte in TWDR has been
no recognition of own SLA or GCA;
0xC0 transmitted; NOT ACK has
been received a START condition will be transmitted when the
bus becomes free
No TWDR action 1 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”;
a START condition will be transmitted when the
bus becomes free
No TWDR action or 0 0 1 0 Switched to the not addressed Slave mode;
no recognition of own SLA or GCA
No TWDR action or 0 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”
No TWDR action or 1 0 1 0 Switched to the not addressed Slave mode;
Last data byte in TWDR has
no recognition of own SLA or GCA;
0xC8 been transmitted (TWEA =
“0”); ACK has been received a START condition will be transmitted when the
bus becomes free
No TWDR action 1 0 1 1 Switched to the not addressed Slave mode;
own SLA will be recognized;
GCA will be recognized if TWGCE = “1”;
a START condition will be transmitted when the
bus becomes free
258 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
$B0
$C8
259
9111E–AUTO–07/08
6.19.8.6 Combining Several TWI Modes
In some cases, several TWI modes must be combined in order to complete the desired action.
Consider for example reading data from a serial EEPROM. Typically, such a transfer involves
the following steps:
1. The transfer must be initiated.
2. The EEPROM must be instructed what location should be read.
3. The reading must be performed.
4. The transfer must be finished.
Note that data is transmitted both from Master to Slave and vice versa. The Master must instruct
the Slave what location it wants to read, requiring the use of the MT mode. Subsequently, data
must be read from the Slave, implying the use of the MR mode. Thus, the transfer direction must
be changed. The Master must keep control of the bus during all these steps, and the steps
should be carried out as an atomical operation. If this principle is violated in a multi master sys-
tem, another Master can alter the data pointer in the EEPROM between steps 2 and 3, and the
Master will read the wrong data location. Such a change in transfer direction is accomplished by
transmitting a REPEATED START between the transmission of the address byte and reception
of the data. After a REPEATED START, the Master keeps ownership of the bus. The following
figure shows the flow in this transfer.
260 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
SDA
SCL
Own No 38 TWI bus will be released and not addressed slave mode will be entered
Address / General Call
A START condition will be transmitted when the bus becomes free
received
Yes
Write 68/78 Data byte will be received and NOT ACK will be returned
Direction
Data byte will be received and ACK will be returned
Read Last data byte will be transmitted and NOT ACK should be received
B0 Data byte will be transmitted and ACK should be received
261
9111E–AUTO–07/08
6.20 Analog Comparator
The Analog Comparator compares the input values on the positive pin AIN0 and negative pin
AIN1. When the voltage on the positive pin AIN0 is higher than the voltage on the negative pin
AIN1, the Analog Comparator output, ACO, is set. The comparator’s output can be set to trigger
the Timer/Counter1 Input Capture function. In addition, the comparator can trigger a separate
interrupt, exclusive to the Analog Comparator. The user can select Interrupt triggering on com-
parator output rise, fall or toggle. A block diagram of the comparator and its surrounding logic is
shown in Figure 6-99.
The Power Reduction ADC bit, PRADC, in “Power Reduction Register - PRR” on page 66 must
be disabled by writing a logical zero to be able to use the ADC input MUX.
ACBG
ACD
ACIE
AIN0
ANALOG
INTERRUPT COMPARATOR
SELECT IRQ
ACI
AIN1
ACME
ADEN
TO T/C1 CAPTURE
TRIGGER MUX
ACO
ADC MULTIPLEXER
OUTPUT (1)
262 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
263
9111E–AUTO–07/08
Table 6-95. ACIS1/ACIS0 Settings
ACIS1 ACIS0 Interrupt Mode
0 0 Comparator Interrupt on Output Toggle.
0 1 Reserved
1 0 Comparator Interrupt on Falling Output Edge.
1 1 Comparator Interrupt on Rising Output Edge.
When changing the ACIS1/ACIS0 bits, the Analog Comparator Interrupt must be disabled by
clearing its Interrupt Enable bit in the ACSR Register. Otherwise an interrupt can occur when the
bits are changed.
264 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
6.21.1 Features
• 10-bit Resolution
• 0.5 LSB Integral Non-linearity
• ±2 LSB Absolute Accuracy
• 13 - 260 µs Conversion Time
• Up to 15 kSPS at Maximum Resolution
• 6 Multiplexed Single Ended Input Channels
• 2 Additional Multiplexed Single Ended Input Channels (TQFP and QFN Package only)
• Optional Left Adjustment for ADC Result Readout
• 0 - VCC ADC Input Voltage Range
• Selectable 1.1V ADC Reference Voltage
• Free Running or Single Conversion Mode
• Interrupt on ADC Conversion Complete
• Sleep Mode Noise Canceler
The ATA6612/ATA6613 features a 10-bit successive approximation ADC. The ADC is con-
nected to an 8-channel Analog Multiplexer which allows eight single-ended voltage inputs
constructed from the pins of Port A. The single-ended voltage inputs refer to 0V (GND).
The ADC contains a Sample and Hold circuit which ensures that the input voltage to the ADC is
held at a constant level during conversion. A block diagram of the ADC is shown in Figure 6-100
on page 266.
The ADC has a separate analog supply voltage pin, AVCC. AVCC must not differ more than ±
0.3V from VCC. See the paragraph “ADC Noise Canceler” on page 272 on how to connect this
pin.
Internal reference voltages of nominally 1.1V or AVCC are provided On-chip. The voltage refer-
ence may be externally decoupled at the AREF pin by a capacitor for better noise performance.
The Power Reduction ADC bit, PRADC, in “Power Reduction Register - PRR” on page 66 must
be disabled by writing a logical zero to enable the ADC.
265
9111E–AUTO–07/08
Figure 6-100. Analog to Digital Converter Block Schematic Operation
ADC CONVERSION
COMPLETE IRQ
ADIE
ADIF
15 0
ADC MULTIPLEXER ADC CTRL. & STATUS ADC DATA REGISTER
SELECT (ADMUX) REGISTER (ADCSRA) (ADCH/ADCL)
ADLAR
REFS1
MUX3
MUX2
MUX1
MUX0
REFS0
ADPS2
ADPS1
ADPS0
ADEN
ADSC
ADFR
ADIF
ADC[9:0]
MUX DECODER
PRESCALER
CHANNEL SELECTION
CONVERSION LOGIC
AVCC
INTERNAL 1.1V
REFERENCE SAMPLE and HOLD
COMPARATOR
AREF
10-BIT DAC -
+
GND
BANDGAP
REFERENCE
ADC7
ADC6
ADC4
ADC3
ADC2
ADC1
ADC0
The ADC converts an analog input voltage to a 10-bit digital value through successive approxi-
mation. The minimum value represents GND and the maximum value represents the voltage on
the AREF pin minus 1 LSB. Optionally, AVCC or an internal 1.1V reference voltage may be con-
nected to the AREF pin by writing to the REFSn bits in the ADMUX Register. The internal
voltage reference may thus be decoupled by an external capacitor at the AREF pin to improve
noise immunity.
The analog input channel is selected by writing to the MUX bits in ADMUX. Any of the ADC input
pins, as well as GND and a fixed bandgap voltage reference, can be selected as single ended
inputs to the ADC. The ADC is enabled by setting the ADC Enable bit, ADEN in ADCSRA. Volt-
age reference and input channel selections will not go into effect until ADEN is set. The ADC
does not consume power when ADEN is cleared, so it is recommended to switch off the ADC
before entering power saving sleep modes.
266 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
The ADC generates a 10-bit result which is presented in the ADC Data Registers, ADCH and
ADCL. By default, the result is presented right adjusted, but can optionally be presented left
adjusted by setting the ADLAR bit in ADMUX.
If the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, then ADCH, to ensure that the content of the Data
Registers belongs to the same conversion. Once ADCL is read, ADC access to Data Registers
is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is
read, neither register is updated and the result from the conversion is lost. When ADCH is read,
ADC access to the ADCH and ADCL Registers is re-enabled.
The ADC has its own interrupt which can be triggered when a conversion completes. When ADC
access to the Data Registers is prohibited between reading of ADCH and ADCL, the interrupt
will trigger even if the result is lost.
START CLKADC
ADIF ADATE
SOURCE 1
. CONVERSION
. LOGIC
.
. EDGE
SOURCE n DETECTOR
ADSC
267
9111E–AUTO–07/08
Using the ADC Interrupt Flag as a trigger source makes the ADC start a new conversion as soon
as the ongoing conversion has finished. The ADC then operates in Free Running mode, con-
stantly sampling and updating the ADC Data Register. The first conversion must be started by
writing a logical one to the ADSC bit in ADCSRA. In this mode the ADC will perform successive
conversions independently of whether the ADC Interrupt Flag, ADIF is cleared or not.
If Auto Triggering is enabled, single conversions can be started by writing ADSC in ADCSRA to
one. ADSC can also be used to determine if a conversion is in progress. The ADSC bit will be
read as one during a conversion, independently of how the conversion was started.
CK/128
CK/64
CK/32
CK/16
CK/2
CK/4
CK/8
ADPS0
ADPS1
ADPS2
By default, the successive approximation circuitry requires an input clock frequency between 50
kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate.
The ADC module contains a prescaler, which generates an acceptable ADC clock frequency
from any CPU frequency above 100 kHz. The prescaling is set by the ADPS bits in ADCSRA.
The prescaler starts counting from the moment the ADC is switched on by setting the ADEN bit
in ADCSRA. The prescaler keeps running for as long as the ADEN bit is set, and is continuously
reset when ADEN is low.
When initiating a single ended conversion by setting the ADSC bit in ADCSRA, the conversion
starts at the following rising edge of the ADC clock cycle.
A normal conversion takes 13 ADC clock cycles. The first conversion after the ADC is switched
on (ADEN in ADCSRA is set) takes 25 ADC clock cycles in order to initialize the analog circuitry.
The actual sample-and-hold takes place 1.5 ADC clock cycles after the start of a normal conver-
sion and 13.5 ADC clock cycles after the start of an first conversion. When a conversion is
complete, the result is written to the ADC Data Registers, and ADIF is set. In Single Conversion
mode, ADSC is cleared simultaneously. The software may then set ADSC again, and a new
conversion will be initiated on the first rising ADC clock edge.
268 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When Auto Triggering is used, the prescaler is reset when the trigger event occurs. This assures
a fixed delay from the trigger event to the start of conversion. In this mode, the sample-and-hold
takes place two ADC clock cycles after the rising edge on the trigger source signal. Three addi-
tional CPU clock cycles are used for synchronization logic.
In Free Running mode, a new conversion will be started immediately after the conversion com-
pletes, while ADSC remains high. For a summary of conversion times (see Table 6-97 on page
270).
Figure 6-103. ADC Timing Diagram, First Conversion (Single Conversion Mode)
Next
First Conversion Conversion
Cycle Number 1 2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3
ADC Clock
ADEN
ADSC
ADIF
Cycle Number 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3
ADC Clock
ADSC
ADIF
269
9111E–AUTO–07/08
Figure 6-105. ADC Timing Diagram, Auto Triggered Conversion
One Conversion Next Conversion
Cycle Number 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2
ADC Clock
Trigger
Source
ADATE
ADIF
11 12 13 1 2 3 4
Cycle Number
ADC Clock
ADSC
ADIF
270 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
271
9111E–AUTO–07/08
If the user has a fixed voltage source connected to the AREF pin, the user may not use the other
reference voltage options in the application, as they will be shorted to the external voltage. If no
external voltage is applied to the AREF pin, the user may switch between AVCC and 1.1V as ref-
erence selection. The first ADC conversion result after switching reference voltage source may
be inaccurate, and the user is advised to discard this result.
272 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
IIH
ADCn
1..100 kW
CS/H = 14 pF
IIL
VCC/2
273
9111E–AUTO–07/08
Figure 6-108. ADC Power Connections
PC4 (ADC4/SDA)
PC5 (ADC5/SCL)
PC3 (ADC3)
PC2 (ADC2)
VCC
PC1 (ADC1)
PC0 (ADC0)
ADC7
GND
10 mH
AREF
ADC6
100 nF
AVCC
PB5
274 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Ideal ADC
Actual ADC
Offset
Error
VREF Input Voltage
• Gain error: After adjusting for offset, the gain error is found as the deviation of the last
transition (0x3FE to 0x3FF) compared to the ideal transition (at 1.5 LSB below maximum).
Ideal value: 0 LSB
Ideal ADC
Actual ADC
• Integral Non-linearity (INL): After adjusting for offset and gain error, the INL is the maximum
deviation of an actual transition compared to an ideal transition for any code. Ideal value: 0
LSB.
Ideal ADC
Actual ADC
• Differential Non-linearity (DNL): The maximum deviation of the actual code width (the interval
between two adjacent transitions) from the ideal code width (1 LSB). Ideal value: 0 LSB.
275
9111E–AUTO–07/08
Figure 6-112. Differential Non-linearity (DNL)
Output Code
0x3FF
1 LSB
DNL
0x000
• Quantization Error: Due to the quantization of the input voltage into a finite number of codes,
a range of input voltages (1 LSB wide) will code to the same value. Always ±0.5 LSB.
• Absolute accuracy: The maximum deviation of an actual (unadjusted) transition compared to
an ideal transition for any code. This is the compound effect of offset, gain error, differential
error, non-linearity, and quantization error. Ideal value: ±0.5 LSB.
276 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
where VIN is the voltage on the selected input pin and VREF the selected voltage reference (see
Table 6-98 on page 277 and Table 6-99 on page 278). 0x000 represents analog ground, and
0x3FF represents the selected reference voltage minus one LSB.
277
9111E–AUTO–07/08
Table 6-99. Input Channel Selections
MUX3..0 Single Ended Input
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7
1000 (reserved)
1001 (reserved)
1010 (reserved)
1011 (reserved)
1100 (reserved)
1101 (reserved)
1110 1.1V (VBG)
1111 0V (GND)
278 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
279
9111E–AUTO–07/08
6.21.6.3 The ADC Data Register – ADCL and ADCH
ADLAR = 0
Bit 15 14 13 12 11 10 9 8
– – – – – – ADC9 ADC8 ADCH
ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 ADCL
7 6 5 4 3 2 1 0
Read/Write R R R R R R R R
R R R R R R R R
Initial Value 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ADLAR = 1
Bit 15 14 13 12 11 10 9 8
ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCH
ADC1 ADC0 – – – – – – ADCL
7 6 5 4 3 2 1 0
Read/Write R R R R R R R R
R R R R R R R R
Initial Value 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
When an ADC conversion is complete, the result is found in these two registers.
When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if
the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read
ADCH. Otherwise, ADCL must be read first, then ADCH.
The ADLAR bit in ADMUX, and the MUXn bits in ADMUX affect the way the result is read from
the registers. If ADLAR is set, the result is left adjusted. If ADLAR is cleared (default), the result
is right adjusted.
• ADC9:0: ADC Conversion Result
These bits represent the result from the conversion, as detailed in “ADC Conversion Result”
on page 277.
280 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
281
9111E–AUTO–07/08
6.22 debugWIRE On-chip Debug System
6.22.1 Features
• Complete Program Flow Control
• Emulates All On-chip Functions, Both Digital and Analog, except RESET Pin
• Real-time Operation
• Symbolic Debugging Support (Both at C and Assembler Source Level, or for Other HLLs)
• Unlimited Number of Program Break Points (Using Software Break Points)
• Non-intrusive Operation
• Electrical Characteristics Identical to Real Device
• Automatic Configuration System
• High-Speed Operation
• Programming of Non-volatile Memories
6.22.2 Overview
The debugWIRE On-chip debug system uses a One-wire, bi-directional interface to control the
program flow, execute AVR instructions in the CPU and to program the different non-volatile
memories.
VCC
dW dW(RESE)
GND
Figure 6-113 shows the schematic of a target MCU, with debugWIRE enabled, and the emulator
connector. The system clock is not affected by debugWIRE and will always be the clock source
selected by the CKSEL Fuses.
282 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When designing a system where debugWIRE will be used, the following observations must be
made for correct operation:
• Pull-up resistors on the dW/(RESET) line must not be smaller than 10kΩ. The pull-up resistor
is not required for debugWIRE functionality.
• Connecting the RESET pin directly to VCC will not work.
• Capacitors connected to the RESET pin must be disconnected when using debugWire.
• All external reset sources must be disconnected.
The DWDR Register provides a communication channel from the running program in the MCU
to the debugger. This register is only accessible by the debugWIRE and can therefore not be
used as a general purpose register in the normal operations.
283
9111E–AUTO–07/08
6.23 Boot Loader Support – Read-While-Write Self-Programming, ATA6612 and ATA6613
In ATA6612 and ATA6613, the Boot Loader Support provides a real Read-While-Write Self-Pro-
gramming mechanism for downloading and uploading program code by the MCU itself. This
feature allows flexible application software updates controlled by the MCU using a Flash-resi-
dent Boot Loader program. The Boot Loader program can use any available data interface and
associated protocol to read code and write (program) that code into the Flash memory, or read
the code from the program memory. The program code within the Boot Loader section has the
capability to write into the entire Flash, including the Boot Loader memory. The Boot Loader can
thus even modify itself, and it can also erase itself from the code if the feature is not needed any-
more. The size of the Boot Loader memory is configurable with fuses and the Boot Loader has
two separate sets of Boot Lock bits which can be set independently. This gives the user a
unique flexibility to select different levels of protection.
284 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
285
9111E–AUTO–07/08
Figure 6-114. Read-While-Write versus No Read-While-Write
Read-While-Write
(RWW) Section
Z-pointer
Addresses NRWW
Section
Z-pointer
Addresses RWW No Read-While-Write
Section (NRWW) Section
CPU is Halted
During the Operation
Code Located in
NRWW Section
Can be Read During
the Operation
286 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Read-While-Write Section
Application Flash Section Application Flash Section
No Read-While-Write Section
No Read-While-Write Section
End RWW End RWW
Start NRWW Start NRWW
End Application
End Application Start Boot Loader
Start Boot Loader Boot Loader Flash Section
Boot Loader Flash Section
Flashend Flashend
Read-While-Write Section
No Read-While-Write Section
End RWW
Start NRWW Start NRWW, Start Boot Loader
Application Flash Section
End Application
Boot Loader Flash Section
Start Boot Loader
Boot Loader Flash Section
Flashend Flashend
Note: 1. The parameters in the figure above are given in Table 6-107 on page 298.
287
9111E–AUTO–07/08
6.23.4 Boot Loader Lock Bits
If no Boot Loader capability is needed, the entire Flash is available for application code. The
Boot Loader has two separate sets of Boot Lock bits which can be set independently. This gives
the user a unique flexibility to select different levels of protection.
The user can select:
• To protect the entire Flash from a software update by the MCU.
• To protect only the Boot Loader Flash section from a software update by the MCU.
• To protect only the Application Flash section from a software update by the MCU.
• Allow software update in the entire Flash.
See Table 6-103 and Table 6-104 for further details. The Boot Lock bits can be set in software
and in Serial or Parallel Programming mode, but they can be cleared by a Chip Erase command
only. The general Write Lock (Lock Bit mode 2) does not control the programming of the Flash
memory by SPM instruction. Similarly, the general Read/Write Lock (Lock Bit mode 1) does not
control reading nor writing by LPM/SPM, if it is attempted.
Table 6-104. Boot Lock Bit1 Protection Modes (Boot Loader Section)(1)
BLB1 Mode BLB12 BLB11 Protection
No restrictions for SPM or LPM accessing the Boot Loader
1 1 1
section.
2 1 0 SPM is not allowed to write to the Boot Loader section.
SPM is not allowed to write to the Boot Loader section, and LPM
executing from the Application section is not allowed to read from
3 0 0 the Boot Loader section. If Interrupt Vectors are placed in the
Application section, interrupts are disabled while executing from
the Boot Loader section.
LPM executing from the Application section is not allowed to read
from the Boot Loader section. If Interrupt Vectors are placed in the
4 0 1
Application section, interrupts are disabled while executing from
the Boot Loader section.
288 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
289
9111E–AUTO–07/08
• Bit 3 – BLBSET: Boot Lock Bit Set
If this bit is written to one at the same time as SELFPRGEN, the next SPM instruction within
four clock cycles sets Boot Lock bits and Memory Lock bits, according to the data in R0. The
data in R1 and the address in the Z-pointer are ignored. The BLBSET bit will automatically
be cleared upon completion of the Lock bit set, or if no SPM instruction is executed within
four clock cycles.
An LPM instruction within three cycles after BLBSET and SELFPRGEN are set in the
SPMCSR Register, will read either the Lock bits or the Fuse bits (depending on Z0 in the
Z-pointer) into the destination register. See “Reading the Fuse and Lock Bits from Software”
on page 294 for details.
• Bit 2 – PGWRT: Page Write
If this bit is written to one at the same time as SELFPRGEN, the next SPM instruction within
four clock cycles executes Page Write, with the data stored in the temporary buffer. The
page address is taken from the high part of the Z-pointer. The data in R1 and R0 are
ignored. The PGWRT bit will auto-clear upon completion of a Page Write, or if no SPM
instruction is executed within four clock cycles. The CPU is halted during the entire Page
Write operation if the NRWW section is addressed.
• Bit 1 – PGERS: Page Erase
If this bit is written to one at the same time as SELFPRGEN, the next SPM instruction within
four clock cycles executes Page Erase. The page address is taken from the high part of the
Z-pointer. The data in R1 and R0 are ignored. The PGERS bit will auto-clear upon comple-
tion of a Page Erase, or if no SPM instruction is executed within four clock cycles. The CPU
is halted during the entire Page Write operation if the NRWW section is addressed.
• Bit 0 – SELFPRGEN: Self Programming Enable
This bit enables the SPM instruction for the next four clock cycles. If written to one together
with either RWWSRE, BLBSET, PGWRT or PGERS, the following SPM instruction will have
a special meaning, see description above. If only SELFPRGEN is written, the following SPM
instruction will store the value in R1:R0 in the temporary page buffer addressed by the
Z-pointer. The LSB of the Z-pointer is ignored. The SELFPRGEN bit will auto-clear upon
completion of an SPM instruction, or if no SPM instruction is executed within four clock
cycles. During Page Erase and Page Write, the SELFPRGEN bit remains high until the
operation is completed.
Writing any other combination than “10001”, “01001”, “00101”, “00011” or “00001” in the
lower five bits will have no effect.
290 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Since the Flash is organized in pages (see Table 6-123 on page 306), the Program Counter can
be treated as having two different sections. One section, consisting of the least significant bits, is
addressing the words within a page, while the most significant bits are addressing the pages.
This is1 shown in Figure 6-116. Note that the Page Erase and Page Write operations are
addressed independently. Therefore it is of major importance that the Boot Loader software
addresses the same page in both the Page Erase and Page Write operation. Once a program-
ming operation is initiated, the address is latched and the Z-pointer can be used for other
operations.
The only SPM operation that does not use the Z-pointer is Setting the Boot Loader Lock bits.
The content of the Z-pointer is ignored and will have no effect on the operation. The LPM
instruction does also use the Z-pointer to store the address. Since this instruction addresses the
Flash byte-by-byte, also the LSB (bit Z0) of the Z-pointer is used.
PCMSB PAGEMSB
PROGRAM
PCPAGE PCWORD
COUNTER
01
02
PAGEEND
Note: 1. The different variables used in Figure 6-116 are listed in Table 6-109 on page 298.
291
9111E–AUTO–07/08
6.23.7 Self-Programming the Flash
The program memory is updated in a page by page fashion. Before programming a page with
the data stored in the temporary page buffer, the page must be erased. The temporary page buf-
fer is filled one word at a time using SPM and the buffer can be filled either before the Page
Erase command or between a Page Erase and a Page Write operation:
Alternative 1, fill the buffer before a Page Erase
• Fill temporary page buffer
• Perform a Page Erase
• Perform a Page Write
Alternative 2, fill the buffer after Page Erase
• Perform a Page Erase
• Fill temporary page buffer
• Perform a Page Write
If only a part of the page needs to be changed, the rest of the page must be stored (for example
in the temporary page buffer) before the erase, and then be rewritten. When using alternative 1,
the Boot Loader provides an effective Read-Modify-Write feature which allows the user software
to first read the page, do the necessary changes, and then write back the modified data. If alter-
native 2 is used, it is not possible to read the old data while loading since the page is already
erased. The temporary page buffer can be accessed in a random sequence. It is essential that
the page address used in both the Page Erase and Page Write operation is addressing the same
page. See “Simple Assembly Code Example for a Boot Loader” on page 296 for an assembly
code example.
292 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
See Table 6-103 on page 288 and Table 6-104 on page 288 for how the different settings of the
Boot Loader bits affect the Flash access.
293
9111E–AUTO–07/08
If bits 5..2 in R0 are cleared (zero), the corresponding Boot Lock bit will be programmed if an
SPM instruction is executed within four cycles after BLBSET and SELFPRGEN are set in
SPMCSR. The Z-pointer is don’t care during this operation, but for future compatibility it is rec-
ommended to load the Z-pointer with 0x0001 (same as used for reading the lOck bits). For future
compatibility it is also recommended to set bits 7, 6, 1, and 0 in R0 to “1” when writing the Lock
bits. When programming the Lock bits the entire Flash can be read during the operation.
The algorithm for reading the Fuse Low byte is similar to the one described above for reading
the Lock bits. To read the Fuse Low byte, load the Z-pointer with 0x0000 and set the BLBSET
and SELFPRGEN bits in SPMCSR. When an LPM instruction is executed within three cycles
after the BLBSET and SELFPRGEN bits are set in the SPMCSR, the value of the Fuse Low byte
(FLB) will be loaded in the destination register as shown below. Refer to Table 6-116 on page
302 for a detailed description and mapping of the Fuse Low byte.
Bit 7 6 5 4 3 2 1 0
Rd FLB7 FLB6 FLB5 FLB4 FLB3 FLB2 FLB1 FLB0
Similarly, when reading the Fuse High byte, load 0x0003 in the Z-pointer. When an LPM instruc-
tion is executed within three cycles after the BLBSET and SELFPRGEN bits are set in the
SPMCSR, the value of the Fuse High byte (FHB) will be loaded in the destination register as
shown below. Refer to Table 6-117 on page 302 for detailed description and mapping of the
Fuse High byte.
Bit 7 6 5 4 3 2 1 0
Rd FHB7 FHB6 FHB5 FHB4 FHB3 FHB2 FHB1 FHB0
294 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
When reading the Extended Fuse byte, load 0x0002 in the Z-pointer. When an LPM instruction
is executed within three cycles after the BLBSET and SELFPRGEN bits are set in the SPMCSR,
the value of the Extended Fuse byte (EFB) will be loaded in the destination register as shown
below. Refer to Table 6-116 on page 302 for detailed description and mapping of the Extended
Fuse byte.
Bit 7 6 5 4 3 2 1 0
Rd – – – – EFB3 EFB2 EFB1 EFB0
Fuse and Lock bits that are programmed, will be read as zero. Fuse and Lock bits that are
unprogrammed, will be read as one.
295
9111E–AUTO–07/08
6.23.7.12 Simple Assembly Code Example for a Boot Loader
;-the routine writes one page of data from RAM to Flash
; the first data location in RAM is pointed to by the Y pointer
; the first data location in Flash is pointed to by the Z-pointer
;-error handling is not included
;-the routine must be placed inside the Boot space
; (at least the Do_spm sub routine). Only code inside NRWW section can
; be read during Self-Programming (Page Erase and Page Write).
;-registers used: r0, r1, temp1 (r16), temp2 (r17), looplo (r24),
; loophi (r25), spmcrval (r20)
; storing and restoring of registers is not included in the routine
; register usage can be optimized at the expense of code size
;-It is assumed that either the interrupt table is moved to the Boot
; loader section or that the interrupts are disabled.
.equ PAGESIZEB = PAGESIZE*2 ;PAGESIZEB is page size in BYTES, not words
.org SMALLBOOTSTART
Write_page:
; Page Erase
ldi spmcrval, (1<<PGERS) | (1<<SELFPRGEN)
call Do_spm
296 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Do_spm:
; check for previous SPM complete
Wait_spm:
in temp1, SPMCSR
sbrc temp1, SELFPRGEN
rjmp Wait_spm
; input: spmcrval determines SPM action
; disable interrupts if enabled, store status
in temp2, SREG
cli
; check that no EEPROM write access is present
Wait_ee:
sbic EECR, EEPE
rjmp Wait_ee
; SPM timed sequence
out SPMCSR, spmcrval
spm
; restore SREG (to enable interrupts if originally enabled)
out SREG, temp2
ret
297
9111E–AUTO–07/08
6.23.7.13 ATA6612 Boot Loader Parameters
In Table 6-107 through Table 6-109 on page 298, the parameters used in the description of the
self programming are given.
Note: The different BOOTSZ Fuse configurations are shown in Figure 6-115 on page 287.
For details about these two section, see “NRWW – No Read-While-Write Section” on page 285
and “RWW – Read-While-Write Section” on page 285.
Table 6-109. Explanation of Different Variables used in Figure 6-116 on page 291 and the
Mapping to the Z-pointer, ATA6612
Corresponding
Variable Z-value(1) Description
Most significant bit in the Program Counter. (The
PCMSB 11
Program Counter is 12 bits PC[11:0])
Most significant bit which is used to address the words
PAGEMSB 4 within one page (32 words in a page requires 5 bits PC
[4:0]).
Bit in Z-register that is mapped to PCMSB. Because
ZPCMSB Z12
Z0 is not used, the ZPCMSB equals PCMSB + 1.
Bit in Z-register that is mapped to PAGEMSB. Because
ZPAGEMSB Z5
Z0 is not used, the ZPAGEMSB equals PAGEMSB + 1.
Program counter page address: Page select, for page
PCPAGE PC[11:5] Z12:Z6
erase and page write
Program counter word address: Word select, for filling
PCWORD PC[4:0] Z5:Z1 temporary buffer (must be zero during page write
operation)
298 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Note: The different BOOTSZ Fuse configurations are shown in Figure 6-115 on page 287.
For details about these two section, see “NRWW – No Read-While-Write Section” on page 285
and “RWW – Read-While-Write Section” on page 285.
Table 6-112. Explanation of Different Variables used in Figure 6-116 on page 291 and the
Mapping to the Z-pointer, ATA6613
Corresponding
Variable Z-value(1) Description
Most significant bit in the Program Counter. (The
PCMSB 12
Program Counter is 12 bits PC[11:0])
Most significant bit which is used to address the
PAGEMSB 5 words within one page (64 words in a page
requires 6 bits PC [5:0])
Bit in Z-register that is mapped to PCMSB. Because
ZPCMSB Z13
Z0 is not used, the ZPCMSB equals PCMSB + 1.
Bit in Z-register that is mapped to PAGEMSB. Because
ZPAGEMSB Z6
Z0 is not used, the ZPAGEMSB equals PAGEMSB + 1.
Program counter page address: Page select, for page
PCPAGE PC[12:6] Z13:Z7
erase and page write
Program counter word address: Word select, for filling
PCWORD PC[5:0] Z6:Z1 temporary buffer (must be zero during page write
operation)
299
9111E–AUTO–07/08
6.24 Memory Programming
Notes: 1. Program the Fuse bits and Boot Lock bits before programming the LB1 and LB2.
2. “1” means unprogrammed, “0” means programmed
300 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
301
9111E–AUTO–07/08
Table 6-116. Extended Fuse Byte for ATA6612/ATA6613
Extended Fuse Byte Bit No Description Default Value
– 7 – 1
– 6 – 1
– 5 – 1
– 4 – 1
– 3 – 1
Select Boot Size
BOOTSZ1 2 0 (programmed)(1)
(see Table 113 for details)
Select Boot Size
BOOTSZ0 1 0 (programmed)(1)
(see Table 113 for details)
BOOTRST 0 Select Reset Vector 1 (unprogrammed)
Note: 1. The default value of BOOTSZ1..0 results in maximum Boot Size. See Table 6-119 on page
305 for details.
Notes: 1. See “Alternate Functions of Port C” on page 101 for description of RSTDISBL Fuse.
2. The SPIEN Fuse is not accessible in serial programming mode.
3. See “Watchdog Timer Control Register - WDTCSR” on page 78 for details.
4. See Table 6-21 on page 71 for BODLEVEL Fuse decoding.
302 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
303
9111E–AUTO–07/08
6.24.4 Calibration Byte
The ATA6612/ATA6613 has a byte calibration value for the internal RC Oscillator. This byte
resides in the high byte of address 0x000 in the signature address space. During reset, this byte
is automatically written into the OSCCAL Register to ensure correct frequency of the calibrated
RC Oscillator.
WR PD3 AVCC
XA1 PD6
PAGEL PD7
+12 V RESET
BS2 PC2
XTAL1
GND
304 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
305
9111E–AUTO–07/08
Table 6-123. No. of Words in a Page and No. of Pages in the Flash
No. of
Device Flash Size Page Size PCWORD Pages PCPAGE PCMSB
4K words
ATA6612 32 words PC[4:0] 128 PC[11:5] 11
(8K bytes)
8K words
ATA6613 64 words PC[5:0] 128 PC[12:6] 12
(16K bytes)
Table 6-124. No. of Words in a Page and No. of Pages in the EEPROM
EEPROM Page No. of
Device Size Size PCWORD Pages PCPAGE EEAMSB
ATA6612 512 bytes 4 bytes EEA[1:0] 128 EEA[8:2] 8
ATA6613 512 bytes 4 bytes EEA[1:0] 128 EEA[8:2] 8
306 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
307
9111E–AUTO–07/08
C. Load Data Low Byte
1. Set XA1, XA0 to “01”. This enables data loading.
2. Set DATA = Data low byte (0x00 - 0xFF).
3. Give XTAL1 a positive pulse. This loads the data byte.
D. Load Data High Byte
1. Set BS1 to “1”. This selects high data byte.
2. Set XA1, XA0 to “01”. This enables data loading.
3. Set DATA = Data high byte (0x00 - 0xFF).
4. Give XTAL1 a positive pulse. This loads the data byte.
E. Latch Data
1. Set BS1 to “1”. This selects high data byte.
2. Give PAGEL a positive pulse. This latches the data bytes (see Figure 6-119 on page
309 for signal waveforms).
F. Repeat B through E until the entire buffer is filled or until all data within the page is loaded.
While the lower bits in the address are mapped to words within the page, the higher bits address
the pages within the FLASH. This is illustrated in Figure 6-118 on page 309. Note that if less
than eight bits are required to address words in the page (pagesize < 256), the most significant
bit(s) in the address low byte are used to address the page when performing a Page Write.
G. Load Address High byte
1. Set XA1, XA0 to “00”. This enables address loading.
2. Set BS1 to “1”. This selects high address.
3. Set DATA = Address high byte (0x00 - 0xFF).
4. Give XTAL1 a positive pulse. This loads the address high byte.
H. Program Page
1. Give WR a negative pulse. This starts programming of the entire page of data.
RDY/BSY goes low.
2. Wait until RDY/BSY goes high (see Figure 6-119 on page 309 for signal waveforms).
I. Repeat B through H until the entire Flash is programmed or until all data has been
programmed.
J. End Page Programming
1. 1. Set XA1, XA0 to “10”. This enables command loading.
2. Set DATA to “0000 0000”. This is the command for No Operation.
3. Give XTAL1 a positive pulse. This loads the command, and the internal write signals
are reset.
308 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
01
02
PAGEEND
Note: 1. PCPAGE and PCWORD are listed in Table 6-123 on page 306.
A B C D E B C D E G H
0x10 ADDR. LOW DATA LOW DATA HIGH XX ADDR. LOW DATA LOW DATA HIGH XX ADDR. HIGH XX
DATA
XA1
XA0
BS1
XTAL1
WR
RDY/BSY
RESET +12V
OE
PAGEL
BS2
Note: 1. “XX” is do not care. The letters refer to the programming description above.
309
9111E–AUTO–07/08
6.24.7.5 Programming the EEPROM
The EEPROM is organized in pages (see Table 6-124 on page 306). When programming the
EEPROM, the program data is latched into a page buffer. This allows one page of data to be
programmed simultaneously. The programming algorithm for the EEPROM data memory is as
follows (refer to “Programming the Flash” on page 307 for details on Command, Address and
Data loading):
1. A: Load Command “0001 0001”.
2. G: Load Address High Byte (0x00 - 0xFF).
3. B: Load Address Low Byte (0x00 - 0xFF).
4. C: Load Data (0x00 - 0xFF).
5. E: Latch data (give PAGEL a positive pulse).
K: Repeat 3 through 5 until the entire buffer is filled.
L: Program EEPROM page
1. Set BS1 to “0”.
2. Give WR a negative pulse. This starts programming of the EEPROM page. RDY/BSY
goes low.
3. Wait until to RDY/BSY goes high before programming the next page (see Figure 6-120
for signal waveforms).
A G B C E B C E L
0x11 ADDR. HIGH ADDR. LOW DATA XX ADDR. LOW DATA XX
DATA
XA1
XA0
BS1
XTAL1
WR
RDY/BSY
RESET +12V
OE
PAGEL
BS2
310 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
311
9111E–AUTO–07/08
Figure 6-121. Programming the FUSES Waveforms
Write Fuse Low byte Write Fuse high byte Write Extended Fuse byte
A C A C A C
0x40 DATA XX 0x40 DATA XX 0x40 DATA XX
DATA
XA1
XA0
BS1
BS2
XTAL1
WR
RDY/BSY
RESET +12V
OE
PAGEL
312 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 6-122. Mapping Between BS1, BS2 and the Fuse and Lock Bits During Read
0
Extended Fuse Byte 1
DATA
BS2
Lock Bits 0
1
BS1
Fuse High Byte 1
BS2
Figure 6-123. Parallel Programming Timing, Including some General Timing Requirements
tXLWL
tXHXL
XTAL1
tDVXH tXLDX
Data & Contol
(DATA, XA0/1, BS1, BS2)
tWLWH
WR tPLWL
WLRL
RDY/BSY
tWLRH
313
9111E–AUTO–07/08
Figure 6-124. Parallel Programming Timing, Loading Sequence with Timing Requirements(1)
LOAD ADDRESS LOAD DATA LOAD DATA LOAD DATA LOAD ADDRESS
(LOW BYTE) (LOW BYTE) (HIGH BYTE) (LOW BYTE)
BS1
PAGEL
DATA ADDR0 (Low Byte) DATA (Low Byte) DATA (High Byte) ADDR1 (Low Byte)
XA0
XA1
Note: 1. The timing requirements shown in Figure 6-123 on page 313 (i.e., tDVXH, tXHXL, and tXLDX) also
apply to loading operation.
Figure 6-125. Parallel Programming Timing, Reading Sequence (within the Same Page) with
Timing Requirements(1)
LOAD ADDRESS READ DATA READ DATA LOAD ADDRESS
(LOW BYTE) (LOW BYTE) (HIGH BYTE) (LOW BYTE)
tXLOL
XTAL1
tBVDV
BS1
tOLDV
OE tOHDZ
DATA ADDR0 (Low Byte) DATA (Low Byte) DATA (High Byte) ADDR1 (Low Byte)
XA0
XA1
Note: 1. The timing requirements shown in Figure 6-123 on page 313 (i.e., tDVXH, tXHXL, and tXLDX) also
apply to reading operation.
314 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
315
9111E–AUTO–07/08
Figure 6-126. Serial Programming and Verify(1)
+2.7V to 5.5V
VCC
+2.7V to 5.5V(2)
MOSI AVCC
MISO
SCK
XTAL1
RESET
GND
Notes: 1. If the device is clocked by the internal Oscillator, it is no need to connect a clock source to the
XTAL1 pin.
2. VCC - 0.3V < AVCC < VCC + 0.3V, however, AVCC should always be within 1.8V - 5.5V
When programming the EEPROM, an auto-erase cycle is built into the self-timed programming
operation (in the Serial mode ONLY) and there is no need to first execute the Chip Erase
instruction. The Chip Erase operation turns the content of every memory location in both the
Program and EEPROM arrays into 0xFF.
Depending on CKSEL Fuses, a valid clock must be present. The minimum low and high periods
for the serial clock (SCK) input are defined as follows:
Low: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz
High: > 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck >= 12 MHz
316 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
3. The serial programming instructions will not work if the communication is out of syn-
chronization. When in sync. the second byte (0x53), will echo back when issuing the
third byte of the Programming Enable instruction. Whether the echo is correct or not, all
four bytes of the instruction must be transmitted. If the 0x53 did not echo back, give
RESET a positive pulse and issue a new Programming Enable command.
4. The Flash is programmed one page at a time. The memory page is loaded one byte at
a time by supplying the 6 LSB of the address and data together with the Load Program
Memory Page instruction. To ensure correct loading of the page, the data low byte must
be loaded before data high byte is applied for a given address. The Program Memory
Page is stored by loading the Write Program Memory Page instruction with the 8 MSB
of the address. If polling is not used, the user must wait at least tWD_FLASH before issuing
the next page (see Table 6-127 on page 318). Accessing the serial programming inter-
face before the Flash write operation completes can result in incorrect programming.
5. The EEPROM array is programmed one byte at a time by supplying the address and
data together with the appropriate Write instruction. An EEPROM memory location is
first automatically erased before new data is written. If polling is not used, the user must
wait at least tWD_EEPROM before issuing the next byte (see Table 6-127 on page 318). In
a chip erased device, no 0xFFs in the data file(s) need to be programmed.
6. Any memory location can be verified by using the Read instruction which returns the
content at the selected address at serial output MISO.
7. At the end of the programming session, RESET can be set high to commence normal
operation.
8. Power-off sequence (if needed):
Set RESET to “1”.
Turn VCC power off.
317
9111E–AUTO–07/08
Table 6-127. Minimum Wait Delay Before Writing the Next Flash or EEPROM Location
Symbol Minimum Wait Delay
tWD_FLASH 4.5 ms
tWD_EEPROM 3.6 ms
tWD_ERASE 9.0 ms
SAMPLE
318 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
319
9111E–AUTO–07/08
6.25 Electrical Characteristics
6.25.2 DC Characteristics
Tcase = -40°C to +125°C, VCC = 2.7V to 5.5V (unless otherwise noted)
Symbol Parameter Condition Min.(5) Typ. Max.(5) Units
Input Low Voltage, Except
VIL VCC = 2.7V - 5.5V -0.5 0.3VCC(1) V
XTAL1 and Reset pin
Input Low Voltage,
VIL1 VCC = 2.7V - 5.5V -0.5 0.1VCC(1) V
XTAL1 pin
Input Low Voltage, RESET
VIL2 VCC = 2.7V - 5.5V -0.5 0.1VCC(1) V
pin
Input High Voltage, Except
VIH VCC = 2.7V - 5.5V 0.6VCC(2) VCC + 0.5 V
XTAL1 and RESET pins
Input High Voltage, XTAL1
VIH1 VCC = 2.7V - 5.5V 0.7VCC(2) VCC + 0.5 V
pin
Input High Voltage, RESET
VIH2 VCC = 2.7V - 5.5V 0.9VCC(2) VCC + 0.5 V
pin
IOL = 20mA, VCC = 5V 0.8
VOL Output Low Voltage(3) V
IOL = 5mA, VCC = 3V 0.5
IOH = -20mA, VCC = 5V 4.1
VOH Output High Voltage(4) V
IOH = -10mA, VCC = 3V 2.3
Input Leakage VCC = 5.5V, pin low
IIL 50 nA
Current I/O Pin (absolute value)
Input Leakage VCC = 5.5V, pin high
IIH 50 nA
Current I/O Pin (absolute value)
RRST Reset Pull-up Resistor Vcc = 5.0V, Vin = 0V 30 60 kΩ
RPU I/O Pin Pull-up Resistor 20 50 kΩ
320 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
321
9111E–AUTO–07/08
6.25.3 External Clock Drive Waveforms
VIH1
VIL1
tCLCX
tCLCL
16 MHz
8 MHz
Safe Operating Area
322 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 6-130. Dichotomic Algorithm Used for LIN Slave Clock Re-synchronization
Measuring
actual TBit
Y
-2% < Delta(TBit) < 2% STOP:
Oscillator
Calibrated
Decrement
OSCCAL Delta(TBit) > 2%
Increment
Delta(TBit) < -2%
OSCCAL
323
9111E–AUTO–07/08
6.26.2.1 RC Oscillator Precision for LIN Slave implementation
For LIN slave devices, the precision of the RC oscillator before and after re-synchronization are
described in the Table 6-130.
324 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
V CC – 0,4V 1000ns
fSCL ≤100 kHz ---------------------------- ------------------- Ω
3mA Cb
Rp Value of Pull-up resistor
V CC – 0,4V 300ns
fSCL > 100 kHz ---------------------------- ---------------- Ω
3mA Cb
Bus free time between a STOP and START fSCL ≤100 kHz 4.7 – µs
tBUF
condition fSCL > 100 kHz 1.3 – µs
Notes: 1. In ATA6612/ATA6613, this parameter is characterized and not 100% tested.
2. Required only for fSCL > 100 kHz.
3. Cb = capacitance of one bus line in pF.
4. fCK = CPU clock frequency
5. This requirement applies to all ATA6612/ATA6613 2-wire Serial Interface operation. Other devices connected to the 2-wire
Serial Bus need only obey the general fSCL requirement.
6. The actual low period generated by the ATA6612/ATA6613 2-wire Serial Interface is (1/fSCL - 2/fCK), thus fCK must be
greater than 6 MHz for the low time requirement to be strictly met at fSCL = 100 kHz.
7. The actual low period generated by the ATA6612/ATA6613 2-wire Serial Interface is (1/fSCL - 2/fCK), thus the low time
requirement will not be strictly met for fSCL > 308 kHz when fCK = 8 MHz. Still, ATA6612/ATA6613 devices connected to the
bus may communicate at full speed (400 kHz) with other ATA6612/ATA6613 devices, as well as any other device with a
proper tLOW acceptance margin.
325
9111E–AUTO–07/08
Figure 7-1. 2-wire Serial Bus Timing
tof tHIGH tr
tLOW tLOW
SCL
tSU;STA tHD;STA tHD;DAT tSU;DAT
tSU;STO
SDA
tBUF
326 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
SS
6 1
SCK
(CPOL = 0)
2 2
SCK
(CPOL = 1)
4 5 3
MISO
MSB ... LSB
(Data Input)
7 8
MOSI
MSB ... LSB
(Data Output)
SS
10 16
9
SCK
(CPOL = 0)
11 11
SCK
(CPOL = 1)
13 14 12
MOSI
MSB ... LSB
(Data Input)
15 17
MISO
MSB ... LSB X
(Data Output)
327
9111E–AUTO–07/08
7.2 ADC Characteristics
328 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 7-4. Active Supply Current versus Frequency (1 MHz to 20 MHz), Temp = 125°C
20
18
16
5.5 V
14
5.0 V
ICC(mA)
12
4.5 V
10
8 3.3 V
3.0 V
6
2.7 V
4
0
0 2 4 6 8 10 12 14 16 18 20
Frequency (MHz)
Figure 7-5. Idle Supply Current versus Frequency (1 MHz to 20 MHz), Temp = 125°C
6
4
5.5 V
ICC(mA)
5.0 V
4.5 V
2 3.3 V
3.0 V
2.7 V
0
0 2 4 6 8 10 12 14 16 18 20
Frequency (MHz)
329
9111E–AUTO–07/08
7.3.1.1 Power-down Supply Current
Figure 7-6. Power-down Supply Current versus VCC (Watchdog Timer Disabled)
5 125
85
ICC (uA)
4
25
3 -40
0
3 3.5 4 4.5 5 5.5
V CC (V)
Figure 7-7. Power-down Supply Current versus VCC (Watchdog Timer Enabled)
5 125
85
ICC (uA)
4
25
3 -40
0
2.5 3 3.5 4 4.5 5 5.5
V CC (V)
330 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 7-8. I/O Pin Pull-up Resistor Current vs. Input Voltage (VCC = 5V)
160
125
140
120
-40
100
IOP (uA)
80
60
40
20
0
0 1 2 3 4 5 6
V OP (V)
Figure 7-9. Output Low Voltage vs. Output Low Current (VCC = 5V)
0.8
0.7
0.6 125 ˚C
85 ˚C
0.5
25 ˚C
Vol (V)
0.4
-40 ˚C
0.3
0.2
0.1
0
0 2 4 6 8 10 12 14 16 18 20
IOL (mA)
331
9111E–AUTO–07/08
Figure 7-10. Output Low Voltage vs. Output Low Current (VCC = 3V)
1.2
1 125 ˚C
85 ˚C
0.8
IOL (mA)
25 ˚C
0.6
-40 ˚C
0.4
0.2
0
0 2 4 6 8 10 12 14 16 18 20
VOL (V)
Figure 7-11. Output High Voltage vs. Output High Current (VCC = 5V)
5.2
4.8
Voh (V)
4.6
-40 ˚C
25 ˚C
4.4 85 ˚C
125 ˚C
4.2
4
0 2 4 6 8 10 12 14 16 18 20
IOH (mA)
332 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 7-12. Output High Voltage vs. Output High Current (VCC = 3V)
3.5
2.5
-40 ˚C
25 ˚C
Current (V)
2 85 ˚C
125 ˚C
1.5
0.5
0
0 2 4 6 8 10 12 14 16 18 20
IOH (mA)
Figure 7-13. Reset Pull-Up Resistor Current vs. Reset Pin Voltage (VCC = 5V)
160
125
140
120
-40
100
IOP (uA)
80
60
40
20
0
0 1 2 3 4 5 6
V OP (V)
333
9111E–AUTO–07/08
7.3.1.3 Pin Driver Strength
Figure 7-14. Output Low Voltage versus Output Low Current (VCC = 5V)
0.8
0.7
0.6 125 ˚C
85 ˚C
0.5
25 ˚C
Vol (V)
0.4
-40 ˚C
0.3
0.2
0.1
0
0 2 4 6 8 10 12 14 16 18 20
IOL (mA)
Figure 7-15. Output Low Voltage versus Output Low Current (VCC = 3V)
1.2
1 125 ˚C
85 ˚C
0.8
IOL (mA)
25 ˚C
0.6
-40 ˚C
0.4
0.2
0
0 2 4 6 8 10 12 14 16 18 20
VOL (V)
334 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 7-16. Output High Voltage versus Output High Current (VCC = 5V)
5.2
4.8
Voh (V)
4.6
-40 ˚C
25 ˚C
4.4 85 ˚C
125 ˚C
4.2
4
0 2 4 6 8 10 12 14 16 18 20
IOH (mA)
Figure 7-17. Output High Voltage versus Output High Current (VCC = 3V)
3.5
2.5
-40 ˚C
25 ˚C
Current (V)
2 85 ˚C
125 ˚C
1.5
0.5
0
0 2 4 6 8 10 12 14 16 18 20
IOH (mA)
335
9111E–AUTO–07/08
7.3.1.4 Pin Thresholds and Hysteresis
Figure 7-18. I/O Pin Input Threshold versus VCC (VIH, I/O Pin Read as 1)
3.5
2.5 125
85
Vih (V)
25
2
-40
1.5
1
2 2.5 3 3.5 4 4.5 5 5.5
V CC (V)
Figure 7-19. I/O Pin Input Threshold versus VCC (VIL, I/O Pin Read as 0)
3
125 ˚C
-40 ˚C
2.5
2
Vil (V)
1.5
0.5
0
2 2.5 3 3.5 4 4.5 5 5.5 6
V CC (V)
336 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Figure 7-20. Reset Input Threshold Voltage versus VCC (VIH, Reset Pin Read as 1)
3.5
-40 ˚C
2.5 25 ˚C
Threshold (V)
85 ˚C
125 ˚C
2
1.5
0.5
0
2 2.5 3 3.5 4 4.5 5 5.5
V CC (V)
Figure 7-21. Reset Input Threshold Voltage versus VCC (VIL, Reset Pin Read as 0)
2.5 125 ˚C
85 ˚C
25 ˚C
-40 ˚C
2
Threshold (V)
1.5
0.5
0
2 2.5 3 3.5 4 4.5 5 5.5
VCC (V)
337
9111E–AUTO–07/08
7.3.1.5 Internal Oscillator Speed
130
128
126
-40 ˚C
124 25 ˚C
122
FRC (kHz)
120
85 ˚C
118 125 ˚C
116
114
112
110
2.5 3 3.5 4 4.5 5 5.5
V CC (V)
8.4
8.3
8.2
5.0 V
8.1
FRC (MHz)
2.7 V
8
7.9
7.8
7.7
7.6
-40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120
Temperature
338 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
8.4
8.2
125 ˚C
85 ˚C
8 25 ˚C
-40 ˚C
FRC (MHz)
7.8
7.6
7.4
7.2
7
2.5 3 3.5 4 4.5 5 5.5
V CC (V)
Figure 7-25. Calibrated 8 MHz RC Oscillator Frequency vs. OSCAL Value (for ATA6613)
16
125 ˚C
85 ˚C
14
25 ˚C
-40 ˚C
12
FRC (MHz)
10
2
0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240
OSCCAL (X1)
339
9111E–AUTO–07/08
Figure 7-26. Calibrated 8 MHz RC Oscillator Frequency vs. OSCAL Value (for ATA6612 only)
14 125 ˚C
85 ˚C
25 ˚C
12 -40 ˚C
10
FRC (MHz)
2
0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240
OSCCAL (X1)
4.5
Threshold (V)
Rising VCC
4.4
4.3
Falling VCC
4.2
4.1
4
-55 -45 -35 -25 -15 -5 5 15 25 35 45 55 65 75 85 95 105 115 125
Temperature (C)
340 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
2.9
Threshold (V)
2.8
Rising VCC
2.7
Falling VCC
2.6
2.5
2.4
-50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120
Temperature (C)
1.095
Bandgap Voltage (V)
1.09
85 ˚C
25 ˚C
125 ˚C
1.085
1.08
-40 ˚C
1.075
2.5 3 3.5 4 4.5 5 5.5
VCC (V)
341
9111E–AUTO–07/08
7.3.1.7 Peripheral Units
-0.20
-0.40
4V IDLE
-0.80
4V STD
-1.00
-1.20
-1.40
-1.60
-50 0 50 100 150
Temperature
2.00
Error (LSB)
1.50
4V IDLE
4V STD
1.00
0.50
0.00
-50 0 50 100 150
Temperature
342 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
0.35
0.30
Error (LSB)
0.25 4V IDLE
0.20
4V STD
0.15
0.10
0.05
0.00
-50 0 50 100 150
Temperature
0.60
0.50
Error (LSB)
0.40
4V IDLE
4V STD
0.30
0.20
0.10
0.00
-50 0 50 100 150
Temperature
343
9111E–AUTO–07/08
7.4 Register Summary
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page
(0xFF) Reserved – – – – – – – –
(0xFE) Reserved – – – – – – – –
(0xFD) Reserved – – – – – – – –
(0xFC) Reserved – – – – – – – –
(0xFB) Reserved – – – – – – – –
(0xFA) Reserved – – – – – – – –
(0xF9) Reserved – – – – – – – –
(0xF8) Reserved – – – – – – – –
(0xF7) Reserved – – – – – – – –
(0xF6) Reserved – – – – – – – –
(0xF5) Reserved – – – – – – – –
(0xF4) Reserved – – – – – – – –
(0xF3) Reserved – – – – – – – –
(0xF2) Reserved – – – – – – – –
(0xF1) Reserved – – – – – – – –
(0xF0) Reserved – – – – – – – –
(0xEF) Reserved – – – – – – – –
(0xEE) Reserved – – – – – – – –
(0xED) Reserved – – – – – – – –
(0xEC) Reserved – – – – – – – –
(0xEB) Reserved – – – – – – – –
(0xEA) Reserved – – – – – – – –
(0xE9) Reserved – – – – – – – –
(0xE8) Reserved – – – – – – – –
(0xE7) Reserved – – – – – – – –
(0xE6) Reserved – – – – – – – –
(0xE5) Reserved – – – – – – – –
(0xE4) Reserved – – – – – – – –
(0xE3) Reserved – – – – – – – –
(0xE2) Reserved – – – – – – – –
(0xE1) Reserved – – – – – – – –
(0xE0) Reserved – – – – – – – –
Note: 1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses
should never be written.
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI
instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The
CBI and SBI instructions work with registers 0x00 to 0x1F only.
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O
Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATA6612/ATA6613 is
a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for
the IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and
LD/LDS/LDD instructions can be used.
5. Only valid for ATA6612/ATA6613
344 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
345
9111E–AUTO–07/08
7.4 Register Summary (Continued)
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page
(0xBF) Reserved – – – – – – – –
(0xBE) Reserved – – – – – – – –
(0xBD) TWAMR TWAM6 TWAM5 TWAM4 TWAM3 TWAM2 TWAM1 TWAM0 – 241
(0xBC) TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE 238
(0xBB) TWDR 2-wire Serial Interface Data Register 240
(0xBA) TWAR TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE 241
(0xB9) TWSR TWS7 TWS6 TWS5 TWS4 TWS3 – TWPS1 TWPS0 240
(0xB8) TWBR 2-wire Serial Interface Bit Rate Register 238
(0xB7) Reserved – – – – – – –
(0xB6) ASSR – EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB 181
(0xB5) Reserved – – – – – – – –
(0xB4) OCR2B Timer/Counter2 Output Compare Register B 178
(0xB3) OCR2A Timer/Counter2 Output Compare Register A 178
(0xB2) TCNT2 Timer/Counter2 (8-bit) 178
(0xB1) TCCR2B FOC2A FOC2B – – WGM22 CS22 CS21 CS20 177
(0xB0) TCCR2A COM2A1 COM2A0 COM2B1 COM2B0 – – WGM21 WGM20 174
(0xAF) Reserved – – – – – – – –
(0xAE) Reserved – – – – – – – –
(0xAD) Reserved – – – – – – – –
(0xAC) Reserved – – – – – – – –
(0xAB) Reserved – – – – – – – –
(0xAA) Reserved – – – – – – – –
(0xA9) Reserved – – – – – – – –
(0xA8) Reserved – – – – – – – –
(0xA7) Reserved – – – – – – – –
(0xA6) Reserved – – – – – – – –
(0xA5) Reserved – – – – – – – –
(0xA4) Reserved – – – – – – – –
(0xA3) Reserved – – – – – – – –
(0xA2) Reserved – – – – – – – –
(0xA1) Reserved – – – – – – – –
(0xA0) Reserved – – – – – – – –
(0x9F) Reserved – – – – – – – –
Note: 1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses
should never be written.
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI
instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The
CBI and SBI instructions work with registers 0x00 to 0x1F only.
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O
Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATA6612/ATA6613 is
a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for
the IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and
LD/LDS/LDD instructions can be used.
5. Only valid for ATA6612/ATA6613
346 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
347
9111E–AUTO–07/08
7.4 Register Summary (Continued)
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page
(0x7D) Reserved – – – – – – – –
(0x7C) ADMUX REFS1 REFS0 ADLAR – MUX3 MUX2 MUX1 MUX0 277
(0x7B) ADCSRB – ACME – – – ADTS2 ADTS1 ADTS0 281
(0x7A) ADCSRA ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 278
(0x79) ADCH ADC Data Register High byte 280
(0x78) ADCL ADC Data Register Low byte 280
(0x77) Reserved – – – – – – – –
(0x76) Reserved – – – – – – – –
(0x75) Reserved – – – – – – – –
(0x74) Reserved – – – – – – – –
(0x73) Reserved – – – – – – – –
(0x72) Reserved – – – – – – – –
(0x71) Reserved – – – – – – – –
(0x70) TIMSK2 – – – – – OCIE2B OCIE2A TOIE2 179
(0x6F) TIMSK1 – – ICIE1 – – OCIE1B OCIE1A TOIE1 160
(0x6E) TIMSK0 – – – – – OCIE0B OCIE0A TOIE0 130
(0x6D) PCMSK2 PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16 112
(0x6C) PCMSK1 – PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8 112
(0x6B) PCMSK0 PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 112
(0x6A) Reserved – – – – – – – –
(0x69) EICRA – – – – ISC11 ISC10 ISC01 ISC00 109
(0x68) PCICR – – – – – PCIE2 PCIE1 PCIE0
(0x67) Reserved – – – – – – – –
(0x66) OSCCAL Oscillator Calibration Register 58
(0x65) Reserved – – – – – – – –
(0x64) PRR PRTWI PRTIM2 PRTIM0 – PRTIM1 PRSPI PRUSART0 PRADC 66
(0x63) Reserved – – – – – – – –
(0x62) Reserved – – – – – – – –
(0x61) CLKPR CLKPCE – – – CLKPS3 CLKPS2 CLKPS1 CLKPS0 61
(0x60) WDTCSR WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 78
Note: 1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses
should never be written.
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI
instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The
CBI and SBI instructions work with registers 0x00 to 0x1F only.
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O
Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATA6612/ATA6613 is
a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for
the IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and
LD/LDS/LDD instructions can be used.
5. Only valid for ATA6612/ATA6613
348 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
349
9111E–AUTO–07/08
7.4 Register Summary (Continued)
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page
0x1F (0x3F) EECR – – EEPM1 EEPM0 EERIE EEMPE EEPE EERE 45
0x1E (0x3E) GPIOR0 General Purpose I/O Register 0 50
0x1D (0x3D) EIMSK – – – – – – INT1 INT0 110
0x1C (0x3C) EIFR – – – – – – INTF1 INTF0 110
0x1B (0x3B) PCIFR – – – – – PCIF2 PCIF1 PCIF0
0x1A (0x3A) Reserved – – – – – – – –
0x19 (0x39) Reserved – – – – – – – –
0x18 (0x38) Reserved – – – – – – – –
0x17 (0x37) TIFR2 – – – – – OCF2B OCF2A TOV2 179
0x16 (0x36) TIFR1 – – ICF1 – – OCF1B OCF1A TOV1 161
0x15 (0x35) TIFR0 – – – – – OCF0B OCF0A TOV0
0x14 (0x34) Reserved – – – – – – – –
0x13 (0x33) Reserved – – – – – – – –
0x12 (0x32) Reserved – – – – – – – –
0x11 (0x31) Reserved – – – – – – – –
0x10 (0x30) Reserved – – – – – – – –
0x0F (0x2F) Reserved – – – – – – – –
0x0E (0x2E) Reserved – – – – – – – –
0x0D (0x2D) Reserved – – – – – – – –
0x0C (0x2C) Reserved – – – – – – – –
0x0B (0x2B) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 107
0x0A (0x2A) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 108
0x09 (0x29) PIND PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 108
0x08 (0x28) PORTC – PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 107
0x07 (0x27) DDRC – DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 107
0x06 (0x26) PINC – PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 107
0x05 (0x25) PORTB PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 107
0x04 (0x24) DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 107
0x03 (0x23) PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 107
0x02 (0x22) Reserved – – – – – – – –
0x01 (0x21) Reserved – – – – – – – –
0x0 (0x20) Reserved – – – – – – – –
Note: 1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses
should never be written.
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI
instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The
CBI and SBI instructions work with registers 0x00 to 0x1F only.
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O
Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATA6612/ATA6613 is
a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for
the IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and
LD/LDS/LDD instructions can be used.
5. Only valid for ATA6612/ATA6613
350 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
351
9111E–AUTO–07/08
7.5 Instruction Set Summary (Continued)
Mnemonics Operands Description Operation Flags #Clocks
SBRS Rr, b Skip if Bit in Register is Set if (Rr(b)=1) PC ←PC + 2 or 3 None 1/2/3
SBIC P, b Skip if Bit in I/O Register Cleared if (P(b)=0) PC ←PC + 2 or 3 None 1/2/3
SBIS P, b Skip if Bit in I/O Register is Set if (P(b)=1) PC ←PC + 2 or 3 None 1/2/3
BRBS s, k Branch if Status Flag Set if (SREG(s) = 1) then PC ←PC+k + 1 None 1/2
BRBC s, k Branch if Status Flag Cleared if (SREG(s) = 0) then PC ←PC+k + 1 None 1/2
BREQ k Branch if Equal if (Z = 1) then PC ←PC + k + 1 None 1/2
BRNE k Branch if Not Equal if (Z = 0) then PC ←PC + k + 1 None 1/2
BRCS k Branch if Carry Set if (C = 1) then PC ←PC + k + 1 None 1/2
BRCC k Branch if Carry Cleared if (C = 0) then PC ←PC + k + 1 None 1/2
BRSH k Branch if Same or Higher if (C = 0) then PC ←PC + k + 1 None 1/2
BRLO k Branch if Lower if (C = 1) then PC ←PC + k + 1 None 1/2
BRMI k Branch if Minus if (N = 1) then PC ←PC + k + 1 None 1/2
BRPL k Branch if Plus if (N = 0) then PC ←PC + k + 1 None 1/2
BRGE k Branch if Greater or Equal, Signed if (N ⊕ V= 0) then PC ←PC + k + 1 None 1/2
BRLT k Branch if Less Than Zero, Signed if (N ⊕ V= 1) then PC ←PC + k + 1 None 1/2
BRHS k Branch if Half Carry Flag Set if (H = 1) then PC ←PC + k + 1 None 1/2
BRHC k Branch if Half Carry Flag Cleared if (H = 0) then PC ←PC + k + 1 None 1/2
BRTS k Branch if T Flag Set if (T = 1) then PC ←PC + k + 1 None 1/2
BRTC k Branch if T Flag Cleared if (T = 0) then PC ←PC + k + 1 None 1/2
BRVS k Branch if Overflow Flag is Set if (V = 1) then PC ←PC + k + 1 None 1/2
BRVC k Branch if Overflow Flag is Cleared if (V = 0) then PC ←PC + k + 1 None 1/2
BRIE k Branch if Interrupt Enabled if ( I = 1) then PC ←PC + k + 1 None 1/2
BRID k Branch if Interrupt Disabled if ( I = 0) then PC ←PC + k + 1 None 1/2
BIT AND BIT-TEST INSTRUCTIONS
SBI P,b Set Bit in I/O Register I/O(P,b) ←1 None 2
CBI P,b Clear Bit in I/O Register I/O(P,b) ←0 None 2
LSL Rd Logical Shift Left Rd(n+1) ←Rd(n), Rd(0) ←0 Z,C,N,V 1
LSR Rd Logical Shift Right Rd(n) ←Rd(n+1), Rd(7) ←0 Z,C,N,V 1
ROL Rd Rotate Left Through Carry Rd(0)←C,Rd(n+1)←Rd(n),C ←Rd(7) Z,C,N,V 1
ROR Rd Rotate Right Through Carry Rd(7)←C,Rd(n)←Rd(n+1),C←Rd(0) Z,C,N,V 1
ASR Rd Arithmetic Shift Right Rd(n) ←Rd(n+1), n=0..6 Z,C,N,V 1
SWAP Rd Swap Nibbles Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) None 1
BSET s Flag Set SREG(s) ←1 SREG(s) 1
BCLR s Flag Clear SREG(s) ←0 SREG(s) 1
BST Rr, b Bit Store from Register to T T ←Rr(b) T 1
BLD Rd, b Bit load from T to Register Rd(b) ←T None 1
SEC Set Carry C ←1 C 1
CLC Clear Carry C ←0 C 1
SEN Set Negative Flag N ←1 N 1
CLN Clear Negative Flag N ←0 N 1
SEZ Set Zero Flag Z ←1 Z 1
CLZ Clear Zero Flag Z ←0 Z 1
SEI Global Interrupt Enable I ←1 I 1
Note: 1. These instructions are only available in ATA6613
352 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
353
9111E–AUTO–07/08
7.5 Instruction Set Summary (Continued)
Mnemonics Operands Description Operation Flags #Clocks
PUSH Rr Push Register on Stack STACK ←Rr None 2
POP Rd Pop Register from Stack Rd ←STACK None 2
MCU CONTROL INSTRUCTIONS
NOP No Operation None 1
SLEEP Sleep (see specific descr. for Sleep function) None 1
WDR Watchdog Reset (see specific descr. for WDR/timer) None 1
BREAK Break For On-chip Debug Only None N/A
Note: 1. These instructions are only available in ATA6613
354 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
8. Application
Figure 8-1. Typical LIN Slave Application
C1
100 nF
48
47
46
45
44
43
42
41
40
39
38
37
PB4
PB3
PB2
PB1
PB0
PD7
PD6
PD5
PB7
PB6
VDD2
GND2
1 36
100 nF PB5 VDD1 C2
2 35
AVDD GND1 100 nF
3 34 220 pF
ADC6 PD4
4 33
AREF PD3 LIN
5 32
GND4 LIN
6 31
ADC7 ATA6612/ATA6613 GND
7 30
PC0 WAKE
8 29
PC1 NTRIG
9 28
PC2 EN VBAT
10 27
PC3 VS
11 26
PC4 VCC PVCC
12 25 GND
WD_OSC
PC5 PVCC
MODE
KL_15
NRES
RXD
TDX
PC6
PD0
PD1
PD2
INH
TM
+
13
14
15
16
17
18
19
20
21
22
23
24
100 nF 22 µF
+
100 nF 100 nF 10 µF
10 kΩ
51 kΩ
KL_15
1
INH DEBUG PB4 PVCC
PB5 PB3
51 kΩ 10 kΩ PC6
ISP
Note: All open pins of the SiP can be used for application-specific purposes.
AVR: Internal clock, no ADC application, TXD, RXD, NRES, EN and NTRIG connected for LIN
Slave. The connection between the LIN-SBC and the AVR requires the software being pro-
grammed correspondingly.
SBC: LIN slave operation with watchdog, 5V regulator and KL15 wake up
RF emissions: Best results for RF emissions will be achieved by connecting the blocking capaci-
tors of the microcontroller supply (C1 and C2) between the microcontroller pins and the
GND/PVCC line. See also Figure 8-1.
355
9111E–AUTO–07/08
Figure 8-2. Typical LIN Master Application
1
PB4 PVCC
22 pF 22 pF PB5 PB3
XTAL C1 PC6
48 100 nF ISP
47
46
45
44
43
42
41
40
39
38
37
PB4
PB3
PB2
PB1
PB0
PD7
PD6
PD5
PB7
PB6
VDD2
GND2
1 36
100 nF PB5 VDD1 C2
2 35
AVDD GND1 100 nF
3 34 220 pF
100 nF ADC6 PD4
4 33
AREF PD3 LIN
5 32
GND4 LIN
6 31
ADC7 ATA6612/ATA6613 GND 33 kΩ WAKE
7 30
PC0 WAKE
8 29 10 nF
PC1 NTRIG
9 28 10 kΩ
PC2 EN VBAT
10 27
PC3 VS
11 26
PC4 VCC PVCC
12 25 GND
WD_OSC
PC5 PVCC
MODE
KL_15
NRES
RXD
1 kΩ
TDX
PC6
PD0
PD1
PD2
INH
TM
+
13
14
15
16
17
18
19
20
21
22
23
24
100 nF 22 µF
+
100 nF 10 µF
ADC6 ADC7 10 kΩ
Note: All open pins of the SiP can be used for application-specific purposes.
AVR: TXD, RXD, NRES and EN connected for LIN Master. The connection between the LIN-SBC
and the AVR requires the software being programmed correspondingly. Analog Digital Converter
active with port ADC6 and ADC7; system clock from external crystal.
LIN-SBC: Master application, 1k Master resistance connected via diode to VBAT, local wake up
via pin WAKE; watchdog is disabled.
RF emissions: Best results for RF emissions will be achieved by connecting the blocking capaci-
tors of the microcontroller supply (C1 and C2) between the microcontroller pins and the
GND/PVCC line. See also Figure 8-2.
356 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
C1
100 nF
48
47
46
45
44
43
42
41
40
39
38
37
PB4
PB3
PB2
PB1
PB0
PD7
PD6
PD5
PB7
PB6
VDD2
GND2
1 36
100 nF PB5 VDD1 C2
2 35
AVDD GND1 100 nF 220 pF
3 34
ADC6 PD4
4 33
AREF PD3 LIN
5 32
GND4 LIN
6 31
ADC7 ATA6612/ATA6613 GND
7 30
PC0 WAKE
8 29
PC1 NTRIG
9 28
PC2 EN VBAT
10 27
PC3 VS
11 26
PC4 VCC PVCC
12 25 GND
WD_OSC
PC5 PVCC
MODE
KL_15
NRES
RXD
TDX
PC6
PD0
PD1
PD2
INH
TM
+
13
14
15
16
17
18
19
20
21
22
23
24
100 nF 22 µF
+
100 nF 10 µF
10 kΩ
1
INH PB4 PVCC
PB5 PB3
PC6
ISP
Note: All open pins of the SiP can be used for application-specific purposes.
AVR: Internal clock, no ADC application, TXD, RXD, NRES and EN connected for LIN Slave. The
connection between the LIN-SBC and the AVR requires the software being programmed corre-
spondingly.
SBC: LIN slave operation with 5V regulator
RF emissions: Best results for RF emissions will be achieved by connecting the blocking capaci-
tors of the microcontroller supply (C1 and C2) between the microcontroller pins and the
GND/PVCC line. See also Figure 8-3.
357
9111E–AUTO–07/08
Figure 8-4. Typical LIN Master Application
LIN Master Pull-up Switched Off during Sleep Mode
1
PB4 PVCC
22 pF 22 pF PB5 PB3
XTAL C1 PC6
100 nF ISP
48
47
46
45
44
43
42
41
40
39
38
37
PB4
PB3
PB2
PB1
PB0
PD7
PD6
PD5
PB7
PB6
VDD2
GND2
1 36
100 nF PB5 VDD1 C2
2 35
AVDD GND1 100 nF
3 34 220 pF
100 nF ADC6 PD4 10 kΩ
4 33
AREF PD3 LIN
5 32
GND4 LIN
6 31
ADC7 ATA6612/ATA6613 GND 33 kΩ WAKE
7 30
PC0 WAKE
8 29 10 nF
PC1 NTRIG
9 28 10 kΩ
PC2 EN VBAT
10 27
PC3 VS
11 26
PC4 VCC PVCC
12 25 GND
WD_OSC
PC5 PVCC
MODE
KL_15
NRES
RXD
1 kΩ
TDX
PC6
PD0
PD1
PD2
INH
TM
+
13
14
15
16
17
18
19
20
21
22
23
24
100 nF 22 µF
+
100 nF 10 µF
ADC6 ADC7
10 kΩ
Note: All open pins of the SiP can be used for application-specific purposes.
AVR: TXD, RXD, NRES and EN connected for LIN Master. The connection between the LIN-SBC
and the AVR requires the software being programmed correspondingly. Analog Digital Converter
active with port ADC6 and ADC7; system clock from external crystal.
LIN-SBC: Master application, 1k Master resistance connected via diode to VBAT, local wake up
via pin WAKE; watchdog is disabled.
RF emissions: Best results for RF emissions will be achieved by connecting the blocking capaci-
tors of the microcontroller supply (C1 and C2) between the microcontroller pins and the
GND/PVCC line. See also Figure 8-4.
358 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
9. Ordering Information
Extended Type Number Program Memory Package MOQ
ATA6612P-PLQW 8 kB flash QFN48, 7× 7 4,000 pieces
ATA6612P-PLPW 8 kB flash QFN48, 7× 7 1,000 pieces
ATA6613P-PLQW 16 kB flash QFN48, 7× 7 4,000 pieces
ATA6613P-PLPW 16 kB flash QFN48, 7× 7 1,000 pieces
Package: QFN 48 - 7 x 7
Exposed pad 5.8 x 5.8
Dimensions in mm
Not indicated tolerances ± 0.05 7
1 max. 5.8
+0
0.05-0.05 5.5
48 37 48
1 36 1
technical drawings
according to DIN
specifications
12 25 12
0.23
24 13
0.4±0.1
0.5 nom.
Drawing-No.: 6.543-5089.03-4
Issue: 1; 22.01.03
359
9111E–AUTO–07/08
11. Errata
11.1 ATA6612
• Interrupts may be lost when writing the timer registers in the asynchronous timer
• Flash security
1. Interrupts may be lost when writing the timer registers in the asynchronous timer
If one of the timer registers which is synchronized to the asynchronous timer2 clock is written in
the cycle before an overflow interrupt occurs, the interrupt may be lost.
Problem Fix/Workaround
Always check that the Timer2 Timer/Counter register, TCNT2, does not have the value 0xFF
before writing the Timer2 Control Register, TCCR2, or Output Compare Register, OCR2.
2. Flash security
Problem Fix/Workaround
Improved security functions in Flash memory.
11.2 ATA6613
• Interrupts may be lost when writing the timer registers in the asynchronous timer
• Flash security
1. Interrupts may be lost when writing the timer registers in the asynchronous timer
If one of the timer registers which is synchronized to the asynchronous timer2 clock is written in
the cycle before an overflow interrupt occurs, the interrupt may be lost.
Problem Fix/Workaround
Always check that the Timer2 Timer/Counter register, TCNT2, does not have the value 0xFF
before writing the Timer2 Control Register, TCCR2, or Output Compare Register, OCR2.
2. Flash security
Problem Fix/Workaround
Improved security functions in Flash memory.
360 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
Please note that the following page numbers referred to in this section refer to the specific revision
mentioned, not to this document.
Revision No. History
• Table 2-2 “Maximum Ratings of the SiP” on page 4 changed
• Section 4 “Absolute Maximum Ratings” on page 20 changed
• Figure 8-1 “Typical LIN Slave Application” on page 355 changed
9111E-AUTO-07/08 • Figure 8-2 “Typical LIN Master Application” on page 356 changed
• Figure 8-3 “LIN Slave Application with Minimum External Components”
on page 357 changed
• Figure 8-4 “Typical LIN Master Application LIN Master Pull-up Switched
Off during Sleep Mode” on page 358 added
• Figure 3-1 “Block Diagram” on page 6 changed
• Section 3.3 “Functional Description” on pages 7 to 18 changed
9111D-AUTO-06/08
• Section 6.5.3.2 “The EEPROM Address Register – EEARH and EEARL”
on page 45 changed
9111C-AUTO-02/08 • Figure 8-2 “Typical LIN Master Application” on page 356 changed
• Section 5 “Electrical Characteristics” on pages 21 to 26 changed
• Section 6.6.6 “Calibrated Internal RC Oscillator” on page 57 changed
9111B-AUTO-11/07
• Figure 8-3 “LIN Slave Application with Minimum External Components
on page 357 added
361
9111E–AUTO–07/08
13. Table of Contents
General Features....................................................................................... 1
1 Description ............................................................................................... 1
362 ATA6612/ATA6613
9111E–AUTO–07/08
ATA6612/ATA6613
363
9111E–AUTO–07/08
Headquarters International
Product Contact
Literature Requests
www.atmel.com/literature
Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any
intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN ATMEL’S TERMS AND CONDI-
TIONS OF SALE LOCATED ON ATMEL’S WEB SITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY
WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDEN-
TAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF
THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no
representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications
and product descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided
otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life.
© 2008 Atmel Corporation. All rights reserved. Atmel®, Atmel logo and combinations thereof, AVR ®, AVR Studio ® and others are registered
trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others.
9111E–AUTO–07/08