Asoanwslsd
Asoanwslsd
Asoanwslsd
Introduction
® ®
The ATtiny1614 is a memberare members of the tinyAVR 1-series of microcontrollers, using the AVR 8-
bit processor with hardware multiplier, running at up to 20 MHz and with 16 KB Flash, 2 KB of SRAM, and
256 bytes of EEPROM in a 14-pin package. The tinyAVR 1-series uses the latest technologies with a
flexible and low-power architecture including Event System and SleepWalking, accurate analog features
and advanced peripherals. Capacitive touch interfaces with proximity sensing and driven shield are
®
supported with the integrated QTouch peripheral touch controller.
Features
• CPU:
®
– AVR 8-bit CPU
– Running at up to 20 MHz
– Single-cycle I/O access
– Two-level interrupt controller
– Two-cycle hardware multiplier
• Memories:
– 16 KB In-system self-programmable Flash memory
– 256 bytes EEPROM
– 2 KB SRAM
– Write/erase endurance:
• Flash 10,000 cycles
• EEPROM 100,000 cycles
– Data retention: 20 years at 85°C
• System:
– Power-on Reset (POR)
– Brown-out Detection (BOD)
– Internal and external clock options:
• 16/20 MHz low-power RC oscillator
• 32.768 kHz Ultra Low-Power (ULP) internal RC oscillator with ±10% accuracy, ±2%
calibration step size
• 32.768 kHz external crystal oscillator
• External clock input
– Single pin programming and debugging interface (UPDI)
– Three Sleep modes:
• Idle with all peripherals running for immediate wake-up
Introduction......................................................................................................................1
Features.......................................................................................................................... 1
®
1. tinyAVR 1-series Overview.................................................................................... 10
1.1. Configuration Summary..............................................................................................................10
2. Ordering Information................................................................................................12
3. Block Diagram......................................................................................................... 13
4. Pinout...................................................................................................................... 14
4.1. 14-Pin SOIC............................................................................................................................... 14
6. Memories.................................................................................................................16
6.1. Overview.................................................................................................................................... 16
6.2. Memory Map.............................................................................................................................. 17
6.3. In-System Reprogrammable Flash Program Memory................................................................17
6.4. SRAM Data Memory.................................................................................................................. 18
6.5. EEPROM Data Memory............................................................................................................. 18
6.6. User Row....................................................................................................................................18
6.7. Signature Bytes.......................................................................................................................... 19
6.8. I/O Memory.................................................................................................................................19
6.9. Memory Section Access from CPU and UPDI on Locked Device..............................................20
6.10. Configuration and User Fuses (FUSE).......................................................................................21
8. AVR CPU................................................................................................................. 48
8.1. Features..................................................................................................................................... 48
8.2. Overview.................................................................................................................................... 48
8.3. Architecture................................................................................................................................ 48
8.4. Arithmetic Logic Unit (ALU)........................................................................................................ 50
8.5. Functional Description................................................................................................................51
8.6. Register Summary - CPU...........................................................................................................56
8.7. Register Description................................................................................................................... 56
9.2. Overview.................................................................................................................................... 61
9.3. Functional Description................................................................................................................62
9.4. Register Summary - NVMCTRL................................................................................................. 69
9.5. Register Description................................................................................................................... 69
24. USART - Universal Synchronous and Asynchronous Receiver and Transmitter.. 336
24.1. Features................................................................................................................................... 336
24.2. Overview.................................................................................................................................. 336
24.3. Functional Description..............................................................................................................340
24.4. Register Summary - USART.................................................................................................... 356
24.5. Register Description................................................................................................................. 356
35. Conventions...........................................................................................................555
35.1. Numerical Notation...................................................................................................................555
35.2. Memory Size and Type.............................................................................................................555
35.3. Frequency and Time.................................................................................................................555
35.4. Registers and Bits.................................................................................................................... 556
40. Errata.....................................................................................................................615
40.1. ATtiny1614 Errata ....................................................................................................................615
Legal Notice.................................................................................................................621
Trademarks................................................................................................................. 622
2 KB ATtiny212 ATtiny214
Pins
8 14 20 24
Devices with different Flash memory size typically also have different SRAM and EEPROM.
Related Links
6. Memories
ATtiny1614
USART 1
SPI 1
TWI (I2C) 1
ADC 2
ADC channels 10+4
DAC 3
AC 3
Peripheral Touch Controller (PTC)(1) 1
PTC number of self-capacitance channels(1) 6XY
PTC number of mutual-capacitance channels(1) 9
Custom Logic/Configurable Lookup Tables 1
Window Watchdog 1
Event System channels 6
General purpose I/O 12
External interrupts 12
CRCSCAN 1
Note:
1. The PTC takes control over the ADC0 while the PTC is used.
2. Ordering Information
Find available ordering options online at microchipdirect.com, or contact your local sales representative.
3. Block Diagram
Figure 3-1. ATtiny1614 Block Diagram
analog peripherals
® analog peripherals
digital peripherals
analog peripherals
core components
Flash
M M M
S
SDA
SCL TWI0
4. Pinout
VDD 1 14 GND
PA4 2 13 PA3/EXTCLK
PA5 3 12 PA2
PA6 4 11 PA1
PA7 5 10 PA0/RESET/UPDI
TOSC1/PB3 6 9 PB0
TOSC2/PB2 7 8 PB1
Analog function
Note:
1. Pin names are of type Pxn, with x being the PORT instance (A, B) and n the pin number. Notation
for signals is PORTx_PINn. All pins can be used as event input.
2. All pins can be used for external interrupt, where pins Px2 and Px6 of each port have full
asynchronous detection.
3. Every PTC line can be configured as X- or Y-line.
6. Memories
6.1 Overview
The main memories are SRAM data memory, EEPROM data memory, and Flash program memory. In
addition, the peripheral registers are located in the I/O memory space.
Table 6-1. Physical Properties of EEPROM
Property ATtiny1614
Size 256 bytes
Page size 32 bytes
Number of pages 8
Start address 0x1400
Property ATtiny1614
Size 2 KB
Start address 0x3800
Property ATtiny1614
Size 16 KB
Page size 64 bytes
Number of pages 256
Start address 0x8000
Related Links
6.2 Memory Map
6.5 EEPROM Data Memory
6.4 SRAM Data Memory
6.3 In-System Reprogrammable Flash Program Memory
9. NVMCTRL - Nonvolatile Memory Controller
(Reserved)
Internal SRAM
0x3800 – 0x3FFF
2KB
(Reserved)
Flash Application
16KB Code
APPEND
App Data 0xBFFF
(Reserved)
0xFFFF
BO OT
BOOTEND>0: 0x8000+BOOTEND*256
AP PL ICA TIO N
FLASH
CO DE
APPEND>0: 0x8000+APPEND*256
AP PL ICA TIO N
DA TA
FLASHEND
Related Links
1.1 Configuration Summary
9. NVMCTRL - Nonvolatile Memory Controller
Related Links
6.2 Memory Map
9. NVMCTRL - Nonvolatile Memory Controller
33. UPDI - Unified Program and Debug Interface
Related Links
33.3.6 System Information Block
6.9 Memory Section Access from CPU and UPDI on Locked Device
The device can be locked so that the memories cannot be read using the UPDI. The locking protects both
the Flash (all BOOT, APPCODE, and APPDATA sections), SRAM, and the EEPROM including the FUSE
data. This prevents successful reading of application data or code using the debugger interface. Regular
memory access from within the application still is enabled.
The device is locked by writing any non-valid value to the LOCKBIT bit field in FUSE.LOCKBIT.
Table 6-5. Memory Access in Unlocked Mode (FUSE.LOCKBIT Valid)(1)
Note:
1. Read operations marked No in the tables may appear to be successful, but the data is corrupt.
Hence, any attempt of code validation through the UPDI will fail on these memory sections.
2. In Locked mode, the USERROW can be written blindly using the fuse Write command, but the
current USERROW values cannot be read out.
Important: The only way to unlock a device is a CHIPERASE, which will erase all device
memories to factory default so that no application data is retained.
Related Links
6.10.3 Fuse Summary - FUSE
6.10.4.9 LOCKBIT
33. UPDI - Unified Program and Debug Interface
33.3.7 Enabling of KEY Protected Interfaces
6.10.2.1 Device ID n
Name: DEVICEIDn
Offset: 0x00 + n*0x01 [n=0..2]
Reset: [Device ID]
Property: -
Each device has a device ID identifying the device and its properties; such as memory sizes, pin count,
and die revision. This can be used to identify a device and hence, the available features by software. The
Device ID consists of three bytes: SIGROW.DEVICEID[2:0].
Bit 7 6 5 4 3 2 1 0
DEVICEID[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: SERNUMn
Offset: 0x03 + n*0x01 [n=0..9]
Reset: [device serial number]
Property: -
Each device has an individual serial number, representing a unique ID. This can be used to identify a
specific device in the field. The serial number consists of ten bytes: SIGROW.SERNUM[9:0].
Bit 7 6 5 4 3 2 1 0
SERNUM[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: TEMPSENSEn
Offset: 0x20 + n*0x01 [n=0..1]
Reset: [Temperature sensor calibration value]
Property: -
These registers contain correction factors for temperature measurements by the ADC.
SIGROW.TEMPSENSE0 is a correction factor for the gain/slope (unsigned), SIGROW.TEMPSENSE1 is
a correction factor for the offset (signed).
Bit 7 6 5 4 3 2 1 0
TEMPSENSE[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: OSC16ERR3V
Offset: 0x22
Reset: [Oscillator frequency error value]
Property: -
Bit 7 6 5 4 3 2 1 0
OSC16ERR3V[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: OSC16ERR5V
Offset: 0x23
Reset: [Oscillator frequency error value]
Property: -
Bit 7 6 5 4 3 2 1 0
OSC16ERR5V[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: OSC20ERR3V
Offset: 0x24
Reset: [Oscillator frequency error value]
Property: -
Bit 7 6 5 4 3 2 1 0
OSC20ERR3V[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: OSC20ERR5V
Offset: 0x25
Reset: [Oscillator frequency error value]
Property: -
Bit 7 6 5 4 3 2 1 0
OSC20ERR5V[7:0]
Access R R R R R R R R
Reset x x x x x x x x
Name: WDTCFG
Offset: 0x00
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
WINDOW[3:0] PERIOD[3:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Name: BODCFG
Offset: 0x01
Reset: -
Property: -
The settings of the BOD will be reloaded from this Fuse after a Power-on Reset. For all other Resets, the
BOD configuration remains unchanged.
Bit 7 6 5 4 3 2 1 0
LVL[2:0] SAMPFREQ ACTIVE[1:0] SLEEP[1:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Value Description
0x0 Sample frequency is 1 kHz
0x1 Sample frequency is 125 Hz
Value Description
0x0 Disabled
0x1 Enabled
0x2 Sampled
0x3 Enabled with wake-up halted until BOD is ready
Value Description
0x0 Disabled
0x1 Enabled
Value Description
0x2 Sampled
0x3 Reserved
Name: OSCCFG
Offset: 0x02
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
OSCLOCK FREQSEL[1:0]
Access R R R
Reset 0 1 0
Value Description
0 Calibration registers of the 20 MHz oscillator are accessible
1 Calibration registers of the 20 MHz oscillator are locked
Value Description
0x1 Run at 16 MHz with corresponding factory calibration
0x2 Run at 20 MHz with corresponding factory calibration
Other Reserved
Name: TCD0CFG
Offset: 0x04
Reset: -
Property: -
The bit values of this fuse register are written to the corresponding bits in the TCD.FAULTCTRL register
of TCD0 at start-up.
The CMPEN and CMP settings of the TCD will only be reloaded from the FUSE values after a Power-on
Reset. For all other resets, the corresponding TCD settings of the device will remain unchanged.
Bit 7 6 5 4 3 2 1 0
CMPDEN CMPCEN CMPBEN CMPAEN CMPD CMPC CMPB CMPA
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Value Description
0 Compare x output on Pin is disabled
1 Compare x output on Pin is enabled
Value Description
0 Compare x default state is 0
1 Compare x default state is 1
Name: SYSCFG0
Offset: 0x05
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
CRCBOOTDIS CRCAPPDIS RESERVED TOUTDIS RSTPINCFG[1:0] RESERVED EESAVE
Access R R R R R R R R
Reset 1 1 1 1 0 1 1 0
Value Description
0 Boot section undergoing a CRC before Reset releases
1 No CRC of the boot section before Reset releases
Value Description
0 Application code section undergoing a CRC before Reset releases
1 No CRC of the application code section before Reset releases
Bit 5 – RESERVED
Value Description
0x0 GPIO
0x1 UPDI
0x2 RESET
0x3 reserved
Bit 1 – RESERVED
Value Description
0 EEPROM erased during chip erase
1 EEPROM not erased under chip erase
Related Links
27. CRCSCAN - Cyclic Redundancy Check Memory Scan
Name: SYSCFG1
Offset: 0x06
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
SUT[2:0]
Access R R R
Reset 1 1 1
Value Description
0x0 0 ms
0x1 1 ms
0x2 2 ms
0x3 4 ms
0x4 8 ms
0x5 16 ms
0x6 32 ms
0x7 64 ms
Name: APPEND
Offset: 0x07
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
APPEND[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Name: BOOTEND
Offset: 0x08
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
BOOTEND[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
6.10.4.9 Lockbits
Name: LOCKBIT
Offset: 0x0A
Reset: -
Property: -
Bit 7 6 5 4 3 2 1 0
LOCKBIT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Value Description
0xC5 Valid key - the device is open
other Invalid - the device is locked
Related Links
6.9 Memory Section Access from CPU and UPDI on Locked Device
Related Links
9. NVMCTRL - Nonvolatile Memory Controller
16. PORT - I/O Pin Configuration
23. RTC - Real-Time Counter
25. SPI - Serial Peripheral Interface
24. USART - Universal Synchronous and Asynchronous Receiver and Transmitter
26. TWI - Two-Wire Interface
27. CRCSCAN - Cyclic Redundancy Check Memory Scan
20. TCA - 16-bit Timer/Counter Type A
21. TCB - 16-bit Timer/Counter Type B
22. TCD - 12-Bit Timer/Counter Type D
29. AC - Analog Comparator
30. ADC - Analog-to-Digital Converter
Name: REVID
Offset: 0x01
Reset: [revision ID]
Property: -
Bit 7 6 5 4 3 2 1 0
REVID[7:0]
Access R R R R R R R R
Reset
8. AVR CPU
8.1 Features
• 8-Bit, High-Performance AVR RISC CPU:
– 135 instructions
– Hardware multiplier
• 32 8-Bit Registers Directly Connected to the Arithmetic Logic Unit (ALU)
• Stack in RAM
• Stack Pointer Accessible in I/O Memory Space
• Direct Addressing of up to 64 KB of Unified Memory:
– Entire Flash accessible with all LD/ST instructions
• True 16/24-Bit Access to 16/24-Bit I/O Registers
• Efficient Support for 8-, 16-, and 32-Bit Arithmetic
• Configuration Change Protection for System Critical Features
8.2 Overview
All AVR devices use the 8-bit AVR CPU. The CPU is able to access memories, perform calculations,
control peripherals, and execute instructions in the program memory. Interrupt handling is described in a
separate section.
Related Links
6. Memories
9. NVMCTRL - Nonvolatile Memory Controller
13. CPUINT - CPU Interrupt Controller
8.3 Architecture
In order to maximize performance and parallelism, the AVR CPU uses a Harvard architecture with
separate buses for program and data. Instructions in the program memory are executed with single-level
pipelining. While one instruction is being executed, the next instruction is prefetched from the program
memory. This enables instructions to be executed on every clock cycle.
Instruction
Decode
STATUS
Register ALU
The Arithmetic Logic Unit (ALU) supports arithmetic and logic operations between registers or between a
constant and a register. Also, single-register operations can be executed in the ALU. After an arithmetic
operation, the STATUS register is updated to reflect information about the result of the operation.
The ALU is directly connected to the fast-access register file. The 32 8-bit general purpose working
registers all have single clock cycle access time allowing single-cycle arithmetic logic unit operation
between registers or between a register and an immediate. Six of the 32 registers can be used as three
16-bit Address Pointers for program and data space addressing, enabling efficient address calculations.
The program memory bus is connected to Flash, and the first program memory Flash address is 0x0000.
The data memory space is divided into I/O registers, SRAM, EEPROM, and Flash.
All I/O Status and Control registers reside in the lowest 4 KB addresses of the data memory. This is
referred to as the I/O memory space. The lowest 64 addresses are accessed directly with single-cycle
IN/OUT instructions, or as the data space locations from 0x00 to 0x3F. These addresses can be accessed
using load (LD/LDS/LDD) and store (ST/STS/STD) instructions. The lowest 32 addresses can even be
accessed with single-cycle SBI/CBI instructions and SBIS/SBIC instructions. The rest is the extended
I/O memory space, ranging from 0x0040 to 0x0FFF. The I/O registers here must be accessed as data
space locations using load and store instructions.
Data addresses 0x1000 to 0x1800 are reserved for memory mapping of fuses, the NVM controller and
EEPROM. The addresses from 0x1800 to 0x7FFF are reserved for other memories, such as SRAM.
The Flash is mapped in the data space from 0x8000 and above. The Flash can be accessed with all load
and store instructions by using addresses above 0x8000. The LPM instruction accesses the Flash similar
to the code space, where the Flash starts at address 0x0000.
For a summary of all AVR instructions, refer to the Instruction Set Summary section. For details of all AVR
instructions, refer to http://www.microchip.com/design-centers/8-bit.
Related Links
9. NVMCTRL - Nonvolatile Memory Controller
6. Memories
34. Instruction Set Summary
clkCPU
1st Instruction Fetch
1st Instruction Execute
2nd Instruction Fetch
2nd Instruction Execute
3rd Instruction Fetch
3rd Instruction Execute
4th Instruction Fetch
The following figure 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 in the destination register.
Figure 8-3. Single Cycle ALU Operation
T1 T2 T3 T4
clkCPU
Total Execution Time
CPU.SREG is updated after all ALU operations, as specified in the Instruction Set Summary. This will in
many cases remove the need for using the dedicated compare instructions, resulting in faster and more
compact code. CPU.SREG is not automatically stored/restored when entering/returning from an Interrupt
Service Routine. Maintaining the Status register between context switches must, therefore, be handled by
user-defined software. CPU.SREG is accessible in the I/O memory space.
Related Links
34. Instruction Set Summary
8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers
In order to write to registers protected by CCP, these steps are required:
1. The software writes the signature that enables change of protected I/O registers to the CCP bit field
in the CPU.CCP register.
2. Within four instructions, the software must write the appropriate data to the protected register.
Most protected registers also contain a write enable/change enable/lock bit. This bit must be written
to '1' in the same operation as the data are written.
The protected change is immediately disabled if the CPU performs write operations to the I/O
register or data memory, if load or store accesses to Flash, NVMCTRL, EEPROM are conducted,
or if the SLEEP instruction is executed.
Name: CCP
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CCP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SP
Offset: 0x0D
Reset: Top of stack
Property: -
The CPU.SP holds the Stack Pointer (SP) that points to the top of the stack. After Reset, the Stack
Pointer points to the highest internal SRAM address.
Only the number of bits required to address the available data memory including external memory (up to
64 KB) is implemented for each device. Unused bits will always read as zero.
The CPU.SPL and CPU.SPH register pair represents the 16-bit value, CPU.SP. The low byte [7:0] (suffix
L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01.
To prevent corruption when updating the SP from software, a write to CPU.SPL will automatically disable
interrupts for the next four instructions or until the next I/O memory write.
Bit 15 14 13 12 11 10 9 8
SP[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset
Bit 7 6 5 4 3 2 1 0
SP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset
Name: SREG
Offset: 0x0F
Reset: 0x00
Property: -
The Status register contains information about the result of the most recently executed arithmetic or logic
instruction. For details about the bits in this register and how they are affected by the different
instructions, see the Instruction Set Summary.
Bit 7 6 5 4 3 2 1 0
I T H S V N Z C
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
9.1 Features
• Unified Memory
• In-System Programmable
• Self-Programming and Boot Loader Support
• Configurable Sections for Write Protection:
– Boot section for boot loader code or application code
– Application code section for application code
– Application data section for application code or data storage
• Signature Row for Factory-Programmed Data:
– ID for each device type
– Serial number for each device
– Calibration bytes for factory calibrated peripherals
• User Row for Application Data:
– 32 bytes in size
– Can be read and written from software
– Can be written from UPDI on locked device
– Content is kept after chip erase
9.2 Overview
The NVM Controller (NVMCTRL) is the interface between the device, the Flash, and the EEPROM. The
Flash and EEPROM are reprogrammable memory blocks that retain their values even when not powered.
The Flash is mainly used for program storage and can be used for data storage. The EEPROM is used
for data storage and can be programmed while the CPU is running the program from the Flash.
NVMCTRL
Signature Row
User Row
Related Links
9.2.2.1 Clocks
9.2.2.5 Debug Operation
9.2.2.3 Interrupts
9.2.2.1 Clocks
This peripheral always runs on the CPU clock (CLK_CPU). It will request this clock also in sleep modes if
a write/erase is ongoing.
Related Links
10. CLKCTRL - Clock Controller
9.3.1.1 Flash
The Flash is divided into a set of pages. A page is the basic unit addressed when programming the Flash.
It is only possible to write or erase a whole page at a time. One page consists of several words.
The Flash can be divided into three sections in blocks of 256 bytes for different security. The three
different sections are BOOT, Application Code (APPCODE), and Application Data (APPDATA).
Figure 9-2. Flash Sections
FLASHSTART : 0x8000
BOOT
BOOTEND>0: 0x8000+BOOTEND*256
APPLICATION
CODE
APPEND>0: 0x8000+APPEND*256
APPLICATION
DATA
Section Sizes
The sizes of these sections are set by the Boot Section End fuse (FUSE.BOOTEND) and Application
Code Section End fuse (FUSE.APPEND).
The fuses select the section sizes in blocks of 256 bytes. The BOOT section stretches from the start of
the Flash until BOOTEND. The APPCODE section runs from BOOTEND until APPEND. The remaining
area is the APPDATA section. If APPEND is written to 0, the APPCODE section runs from BOOTEND to
the end of Flash (removing the APPDATA section). If BOOTEND and APPEND are written to 0, the entire
Flash is regarded as BOOT section. APPEND should either be set to 0 or a value greater or equal than
BOOTEND.
Table 9-2. Setting Up Flash Sections
Note:
• See also the BOOTEND and APPEND descriptions.
• Interrupt vectors are by default located after the BOOT section. This can be changed in the
interrupt controller.
Before programming a Flash page with the data in the page buffer, the Flash page must be erased. The
page buffer is also erased when the device enters a sleep mode. Programming an unerased Flash page
will corrupt its content.
The Flash can either be written with the erase and write separately, or one command handling both:
Alternative 1:
• Fill the page buffer
• Write the page buffer to Flash with the Erase/Write Page command
Alternative 2:
• Write to a location on the page to set up the address
• Perform an Erase Page command
• Fill the page buffer
• Perform a Write Page command
The NVM command set supports both a single erase and write operation, and split Page Erase and Page
Write commands. This split commands enable shorter programming time for each command, and the
erase operations can be done during non-time-critical programming execution.
The EEPROM programming is similar, but only the bytes updated in the page buffer will be written or
erased in the EEPROM.
9.3.2.4 Commands
Reading of the Flash/EEPROM and writing of the page buffer is handled with normal load/store
instructions. Other operations, such as writing and erasing the memory arrays, are handled by commands
in the NVM.
To execute a command in the NVM:
1. Confirm that any previous operation is completed by reading the Busy Flags (EEBUSY and
FBUSY) in the NVMCTRL.STATUS register.
2. Write the NVM command unlock to the Configuration Change Protection register in the CPU
(CPU.CCP).
3. Write the desired command value to the CMD bits in the Control A register (NVMCTRL.CTRLA)
within the next four instructions.
9.3.2.4.1 Write Command
The Write command of the Flash controller writes the content of the page buffer to the Flash or EEPROM.
If the write is to the Flash, the CPU will stop executing code as long as the Flash is busy with the write
operation. If the write is to the EEPROM, the CPU can continue executing code while the operation is
ongoing.
The page buffer will be automatically cleared after the operation is finished.
9.3.2.4.2 Erase Command
The Erase command erases the current page. There must be one byte written in the page buffer for the
Erase command to take effect.
For erasing the Flash, first, write to one address in the desired page, then execute the command. The
whole page in the Flash will then be erased. The CPU will be halted while the erase is ongoing.
For the EEPROM, only the bytes written in the page buffer will be erased when the command is
executed. To erase a specific byte, write to its corresponding address before executing the command. To
erase a whole page all the bytes in the page buffer have to be updated before executing the command.
The CPU can continue running code while the operation is ongoing.
The page buffer will automatically be cleared after the operation is finished.
9.3.2.4.3 Erase-Write Operation
The Erase/Write command is a combination of the Erase and Write command, but without clearing the
page buffer after the Erase command: The erase/write operation first erases the selected page, then it
writes the content of the page buffer to the same page.
When executed on the Flash, the CPU will be halted when the operations are ongoing. When executed
on EEPROM, the CPU can continue executing code.
The page buffer will automatically be cleared after the operation is finished.
9.3.2.4.4 Page Buffer Clear Command
The Page Buffer Clear command clears the page buffer. The contents of the page buffer will be all 1’s
after the operation. The CPU will be halted when the operation executes (seven CPU cycles).
9.3.2.4.5 Chip Erase Command
The Chip Erase command erases the Flash and the EEPROM. The EEPROM is unaltered if the
EEPROM Save During Chip Erase (EESAVE) fuse in FUSE.SYSCFG0 is set. The Flash will not be
protected by Boot Section Lock (BOOTLOCK) or Application Code Section Write Protection (APCWP) in
NVMCTRL.CTRLB. The memory will be all 1’s after the operation.
9.3.2.4.6 EEPROM Erase Command
The EEPROM Erase command erases the EEPROM. The EEPROM will be all 1’s after the operation.
The CPU will be halted while the EEPROM is being erased.
9.3.2.4.7 Fuse Write Command
The Fuse Write command writes the fuses. It can only be used by the UPDI, the CPU cannot start this
command.
Follow this procedure to use this command:
• Write the address of the fuse to the Address register (NVMCTRL.ADDR)
• Write the data to be written to the fuse to the Data register (NVMCTRL.DATA)
• Execute the Fuse Write command.
• After the fuse is written, a Reset is required for the updated value to take effect.
For reading fuses, use a regular read on the memory location.
• The voltage level monitor in the BOD can be used to prevent starting a write to the EEPROM close
to the BOD level.
• If the detection levels of the internal BOD don’t match the required detection level, an external low
VDD Reset protection circuit can be used. If a Reset occurs while a write operation is ongoing, the
write operation will be aborted.
Related Links
37.3 General Operating Ratings
17. BOD - Brown-out Detector
9.3.4 Interrupts
Table 9-3. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (NVMCTRL.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding bit in the peripheral's Interrupt
Enable register (NVMCTRL.INTEN).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Register Key
NVMCTRL.CTRLA SPM
Related Links
9.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
CMD[2:0]
Access R/W R/W R/W
Reset 0 0 0
9.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
BOOTLOCK APCWP
Access R/W R/W
Reset 0 0
9.5.3 Status
Name: STATUS
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
WRERROR EEBUSY FBUSY
Access R R R
Reset 0 0 0
Name: INTCTRL
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EEREADY
Access R/W
Reset 0
Name: INTFLAGS
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EEREADY
Access R/W
Reset 0
9.5.6 Data
Name: DATA
Offset: 0x06
Reset: 0x00
Property: -
The NVMCTRL.DATAL and NVMCTRL.DATAH register pair represents the 16-bit value,
NVMCTRL.DATA. The low byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8]
(suffix H) can be accessed at offset + 0x01.
Bit 15 14 13 12 11 10 9 8
DATA[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
9.5.7 Address
Name: ADDR
Offset: 0x08
Reset: 0x00
Property: -
The NVMCTRL.ADDRL and NVMCTRL.ADDRH register pair represents the 16-bit value,
NVMCTRL.ADDR. The low byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8]
(suffix H) can be accessed at offset + 0x01.
Bit 15 14 13 12 11 10 9 8
ADDR[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
ADDR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
10.1 Features
• All clocks and clock sources are automatically enabled when requested by peripherals
• Internal Oscillators:
– 16/20 MHz Oscillator (OSC20M)
– 32 KHz Ultra Low-Power Oscillator (OSCULP32K)
• External Clock Options:
– 32.768 kHz Crystal Oscillator (XOSC32K)
– External clock
• Main Clock Features:
– Safe run-time switching
– Prescaler with 1x to 64x division in 12 different settings
10.2 Overview
The Clock Controller peripheral (CLKCTRL) controls, distributes, and prescales the clock signals from the
available oscillators. The CLKCTRL supports internal and external clock sources.
The CLKCTRL is based on an automatic clock request system, implemented in all peripherals on the
device. The peripherals will automatically request the clocks needed. If multiple clock sources are
available, the request is routed to the correct clock source.
The Main Clock (CLK_MAIN) is used by the CPU, RAM, and the I/O bus. The main clock source can be
selected and prescaled. Some peripherals can share the same clock source as the main clock, or run
asynchronously to the main clock domain.
Other RTC
NVM RAM CPU CLKOUT
INT WDT BOD TCD
Peripherals PRESCALER
CLK_CPU CLK_PER
CLK_RTC CLK_WDT CLK_BOD CLK_TCD
TCD
CLKCSEL
Main Clock Prescaler
CLK_MAIN
RTC
Main Clock Switch CLKSEL
DIV32
XOSC32K
OSCULP32K
OSC20M
XOSC32K
SEL
The clock system consists of the main clock and other asynchronous clocks:
• Main Clock
This clock is used by the CPU, RAM, Flash, the I/O bus, and all peripherals connected to the I/O
bus. It is always running in Active and Idle Sleep mode and can be running in Standby Sleep mode
if requested.
The main clock CLK_MAIN is prescaled and distributed by the clock controller:
• CLK_CPU is used by the CPU, SRAM, and the NVMCTRL peripheral to access the
nonvolatile memory
• CLK_PER is used by all peripherals that are not listed under asynchronous clocks.
• Clocks running asynchronously to the main clock domain:
– CLK_RTC is used by the RTC/PIT. It will be requested when the RTC/PIT is enabled. The
clock source for CLK_RTC should only be changed if the peripheral is disabled.
– CLK_WDT is used by the WDT. It will be requested when the WDT is enabled.
– CLK_BOD is used by the BOD. It will be requested when the BOD is enabled in Sampled
mode.
The clock source for the for the main clock domain is configured by writing to the Clock Select bits
(CLKSEL) in the Main Clock Control A register (CLKCTRL.MCLKCTRLA). The asynchronous clock
sources are configured by registers in the respective peripheral.
Related Links
5. I/O Multiplexing and Considerations
CAUTION
If an external clock source fails while used as CLK_MAIN source, only the WDT can provide a
mechanism to switch back via System Reset.
CLK_MAIN is fed into a prescaler before it is used by the peripherals (CLK_PER) in the device. The
prescaler divide CLK_MAIN by a factor from 1 to 64.
After any Reset, CLK_MAIN is provided by the 16/20 MHz Oscillator (OSC20M) and with a prescaler
division factor of 6. Since the actual frequency of the OSC20M is determined by the Frequency Select
bits (FREQSEL) of the Oscillator Configuration fuse (FUSE.OSCCFG), these frequencies are possible
after Reset:
Table 10-1. Peripheral Clock Frequencies After Reset
Resulting CLK_PER
CLK_MAIN
as Per FREQSEL in FUSE.OSCCFG
The oscillator calibration can be locked by the Oscillator Lock (OSCLOCK) Fuse (FUSE.OSCCFG). When
this fuse is ‘1’, it is not possible to change the calibration. The calibration is locked if this oscillator is used
as the main clock source and the Lock Enable bit (LOCKEN) in the Control B register
(CLKCTRL.OSC20MCALIBB) is ‘1’.
The calibration bits are protected by the Configuration Change Protection Mechanism, requiring a timed
write procedure for changing the main clock and prescaler settings.
The start-up time of this oscillator is the analog start-up time plus four oscillator cycles. Refer to the
Electrical Characteristics section for the start-up time.
When changing the oscillator calibration value, the frequency may overshoot. If the oscillator is used as
the main clock (CLK_MAIN) it is recommended to change the main clock prescaler so that the main clock
frequency does not exceed ¼ of the maximum operation main clock frequency as described in the
General Operating Ratings section. The system clock prescaler can be changed back after the oscillator
calibration value has been updated.
Related Links
6.10 Configuration and User Fuses (FUSE)
10.3.5 Configuration Change Protection
37.3 General Operating Ratings
10.3.3 Main Clock After Reset
37.9 Oscillators and Clocks
The minimum legal BAUD register value is 0x40, the target BAUD register value should therefore not be
lower than 0x4A to ensure that the compensated BAUD value stays within the legal range, even for parts
with negative compensation values. The example code below demonstrates how to apply this value for
more accurate USART baud rate:
#include <assert.h>
/* Baud rate compensated with factory stored frequency error */
/* Asynchronous communication without Auto-baud (Sync Field) */
/* 16MHz Clock, 3V and 600 BAUD */
Related Links
37.9 Oscillators and Clocks
The XOSC32K is enabled by writing a '1' to its ENABLE bit in CLKCTRL.XOSC32KCTRLA. When
enabled, the configuration of the GPIO pins used by the XOSC32K is overridden as TOSC1, TOSC2 pins.
The Enable bit needs to be set for the oscillator to start running when requested.
The start-up time of a given crystal oscillator can be accommodated by writing to the Crystal Start-up
Time bits (CSUT) in CLKCTRL.XOSC32KCTRLA.
When XOSC32K is configured to use an external clock on TOSC1, the start-up time is fixed to two cycles.
10.3.4.2.2 External Clock (EXTCLK)
The EXTCLK is taken directly from the pin. This GPIO pin is automatically configured for EXTCLK if any
peripheral is requesting this clock.
This clock source has a start-up time of two cycles when first requested.
Register Key
CLKCTRL.MCLKCTRLB IOREG
CLKCTRL.MCLKLOCK IOREG
CLKCTRL.XOSC32KCTRLA IOREG
CLKCTRL.MCLKCTRLA IOREG
CLKCTRL.OSC20MCTRLA IOREG
CLKCTRL.OSC20MCALIBA IOREG
CLKCTRL.OSC20MCALIBB IOREG
CLKCTRL.OSC32KCTRLA IOREG
Related Links
8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers
Name: MCLKCTRLA
Offset: 0x00
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
CLKOUT CLKSEL[1:0]
Access R/W R/W R/W
Reset 0 0 0
Name: MCLKCTRLB
Offset: 0x01
Reset: 0x11
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
PDIV[3:0] PEN
Access R/W R/W R/W R/W R/W
Reset 1 0 0 0 1
Value Description
Value Division
0x0 2
0x1 4
0x2 8
0x3 16
0x4 32
0x5 64
0x8 6
0x9 10
0xA 12
0xB 24
0xC 48
other Reserved
Name: MCLKLOCK
Offset: 0x02
Reset: Based on OSCLOCK in FUSE.OSCCFG
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
LOCKEN
Access R/W
Reset x
Name: MCLKSTATUS
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EXTS XOSC32KS OSC32KS OSC20MS SOSC
Access R R R R R
Reset 0 0 0 0 0
Value Description
0 EXTCLK has not started
1 EXTCLK has started
Value Description
0 XOSC32K is not stable
1 XOSC32K is stable
Value Description
0 OSCULP32K is not stable
1 OSCULP32K is stable
Value Description
0 OSC20M is not stable
1 OSC20M is stable
Value Description
0 The clock source for CLK_MAIN is not undergoing a switch
1 The clock source for CLK_MAIN is undergoing a switch and will change as soon as the new
source is stable
Name: OSC20MCTRLA
Offset: 0x10
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
RUNSTDBY
Access R/W
Reset 0
Name: OSC20MCALIBA
Offset: 0x11
Reset: Based on FREQSEL in FUSE.OSCCFG
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
CAL20M[5:0]
Access R/W R/W R/W R/W R/W R/W
Reset x x x x x x
Name: OSC20MCALIBB
Offset: 0x12
Reset: Based on FUSE.OSCCFG
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
LOCK TEMPCAL20M[3:0]
Access R R/W R/W R/W R/W
Reset x x x x x
Name: OSC32KCTRLA
Offset: 0x18
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
RUNSTDBY
Access R/W
Reset 0
Name: XOSC32KCTRLA
Offset: 0x1C
Reset: 0x00
Property: Configuration Change Protection
The SEL and CSUT bits cannot be changed as long as the ENABLE bit is set or the XOSC32K Stable bit
(XOSC32KS) in CLKCTRL.MCLKSTATUS is high.
To change settings in a safe way: write a '0' to the ENABLE bit and wait until XOSC32KS is '0' before re-
enabling the XOSC32K with new settings.
Bit 7 6 5 4 3 2 1 0
CSUT[1:0] SEL RUNSTDBY ENABLE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Value Description
0 External crystal
1 External clock on TOSC1 pin
11.1 Features
• Power management for adjusting power consumption and functions
• Three sleep modes:
– Idle
– Standby
– Power-Down
• Configurable Standby Sleep mode where peripherals can be configured as ON or OFF.
11.2 Overview
Sleep modes are used to shut down peripherals and clock domains in the device in order to save power.
The Sleep Controller (SLPCTRL) controls and handles the transitions between active and sleep mode.
There are in total four modes available:
• One active mode in which the software is executed
• Three sleep modes:
– Idle
– Standby
– Power-Down
All sleep modes are available and can be entered from active mode. In active mode, the CPU is
executing application code. When the device enters sleep mode, program execution is stopped and
interrupts or a reset is used to wake the device again. The application code decides which sleep mode to
enter and when.
Interrupts are used to wake the device from sleep. The available interrupt wake-up sources depend on
the configured sleep mode. When an interrupt occurs, the device will wake up and execute the interrupt
service routine before continuing normal program execution from the first instruction after the SLEEP
instruction. Any Reset will take the device out of a sleep mode.
The content of the register file, SRAM and registers are kept during sleep. If a Reset occurs during sleep,
the device will reset, start, and execute from the Reset vector.
Interrupt Request
SLPCTRL CPU
Sleep State
Interrupt Request
Peripheral
11.2.2.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
11.3.1 Initialization
To put the device into a sleep mode, follow these steps:
• Configure and enable the interrupts that shall be able to wake the device from sleep. Also, enable
global interrupts.
WARNING
If there are no interrupts enabled when going to sleep, the device cannot wake up again.
Only a Reset will allow the device to continue operation.
• Select the sleep mode to be entered and enable the Sleep Controller by writing to the Sleep Mode
bits (SMODE) and the Enable bit (SEN) in the Control A register (SLPCTRL.CTRLA). A SLEEP
instruction must be run to make the device actually go to sleep.
11.3.2 Operation
Note:
• X means active. X* indicates that the RUNSTBY bit of the corresponding peripheral must be set to
enter the active state.
11.3.2.2 Wake-Up Time
The normal wake-up time for the device is six main clock cycles (CLK_PER), plus the time it takes to start
up the main clock source:
• In Idle Sleep mode, the main clock source is kept running so it will not be any extra wake-up time.
• In Standby Sleep mode, the main clock might be running so it depends on the peripheral
configuration.
• In Power-Down Sleep mode, only the ULP 32 KHz oscillator and RTC clock may be running if it is
used by the BOD or WDT. All other clock sources will be OFF.
Table 11-3. Sleep Modes and Start-Up Time
The start-up time for the different clock sources is described in the Clock Controller (CLKCTRL) section.
In addition to the normal wake-up time, it is possible to make the device wait until the BOD is ready
before executing code. This is done by writing 0x3 to the BOD Operation mode in Active and Idle bits
(ACTIVE) in the BOD Configuration fuse (FUSE.BODCFG). If the BOD is ready before the normal wake-
up time, the total wake-up time will be the same. If the BOD takes longer than the normal wake-up time,
the wake-up time will be extended until the BOD is ready. This ensures correct supply voltage whenever
code is executed.
11.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SMODE[1:0] SEN
Access R R R R R R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
12.1 Features
• Reset the device and set it to an initial state
• Reset Flag register for identifying the Reset source in the software
• Multiple Reset sources:
– Power supply Reset sources: Brown-out Detect (BOD), Power-on Reset (POR)
– User Reset sources: External Reset pin (RESET), Watchdog Reset (WDT), Software Reset
(SW), and UPDI Reset
12.2 Overview
The Reset Controller (RSTCTRL) manages the Reset of the device. It issues a device Reset, sets the
device to its initial state, and allows the Reset source to be identified by the software.
Pull-up
Resistor BOD UPDI
WDT
All other
Peripherals
UPDI
CPU (SW)
12.3.1 Initialization
The Reset Controller (RSTCTRL) is always enabled, but some of the Reset sources must be enabled
(either by fuses or by software) before they can request a Reset.
After any Reset, the Reset source that caused the Reset is found in the Reset Flag register
(RSTCTRL.RSTFR).
After a Power-on Reset, only the POR flag will be set.
The flags are kept until they are cleared by writing a '1' to them.
After Reset from any source, all registers that are loaded from fuses are reloaded.
12.3.2 Operation
When enabled, the external Reset requests a Reset as long as the RESET pin is low. The device will stay
in Reset until RESET is high again. All logic is reset on external reset, except UPDI and BOD
configuration. All fuses are reloaded after the Reset is released.
Related Links
6.10 Configuration and User Fuses (FUSE)
Register Key
RSTCTRL.SWRR IOREG
Related Links
8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers
Name: RSTFR
Offset: 0x00
Reset: 0xXX
Property: -
All flags are cleared by writing a '1' to them. They are also cleared by a Power-on Reset, with the
exception of the Power-On Reset Flag (PORF).
Bit 7 6 5 4 3 2 1 0
UPDIRF SWRF WDRF EXTRF BORF PORF
Access R R R/W R/W R/W R/W R/W R/W
Reset 0 0 x x x x x x
Name: SWRR
Offset: 0x01
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
SWRE
Access R R R R R R R R/W
Reset 0 0 0 0 0 0 0 0
13.1 Features
• Short and Predictable Interrupt Response Time
• Separate Interrupt Configuration and Vector Address for Each Interrupt
• Interrupt Prioritizing by Level and Vector Address
• Non-Maskable Interrupts (NMI) for Critical Functions
• Two Interrupt Priority Levels: 0 (normal) and 1 (high)
• – One of the interrupt requests can optionally be assigned as a priority level 1 interrupt
– Optional round robin priority scheme for priority level 0 interrupts
• Interrupt Vectors Optionally Placed in the Application Section or the Boot Loader Section
• Selectable Compact Vector Table
13.2 Overview
An interrupt request signals a change of state inside a peripheral and can be used to alter program
execution. Peripherals can have one or more interrupts, and all are individually enabled and configured.
When an interrupt is enabled and configured, it will generate an interrupt request when the interrupt
condition occurs.
The CPU Interrupt Controller (CPUINT) handles and prioritizes interrupt requests. When an interrupt is
enabled and the interrupt condition occurs, the CPUINT will receive the interrupt request. Based on the
interrupt's priority level and the priority level of any ongoing interrupts, the interrupt request is either
acknowledged or kept pending until it has priority. When an interrupt request is acknowledged by the
CPUINT, the Program Counter is set to point to the interrupt vector. The interrupt vector is normally a
jump to the interrupt handler (i.e., the software routine that handles the interrupt). After returning from the
interrupt handler, program execution continues from where it was before the interrupt occurred. One
instruction is always executed before any pending interrupt is served.
The CPUINT Status register (CPUINT.STATUS) contains state information that ensures that the CPUINT
returns to the correct interrupt level when the RETI (interrupt return) instruction is executed at the end of
an interrupt handler. Returning from an interrupt will return the CPUINT to the state it had before entering
the interrupt. CPUINT.STATUS is not saved automatically upon an interrupt request.
By default, all peripherals are priority level 0. It is possible to set one single interrupt vector to the higher
priority level 1. Interrupts are prioritized according to their priority level and their interrupt vector address.
Priority level 1 interrupts will interrupt level 0 interrupt handlers. Among priority level 0 interrupts, the
priority is determined from the interrupt vector address, where the lowest interrupt vector address has the
highest interrupt priority.
Optionally, a round robin scheduling scheme can be enabled for priority level 0 interrupts. This ensures
that all interrupts are serviced within a certain amount of time.
Interrupt generation must be globally enabled by writing a '1' to the Global Interrupt Enable bit (I) in the
CPU Status register (CPU.SREG). This bit is not cleared when an interrupt is acknowledged.
Interrupt Controller
Priority
Decoder
Peripheral 1 INT REQ
CPU "RETI"
CPU INT ACK
INT LEVEL
CPU
CPU INT REQ
Peripheral n
INT REQ
INT REQ
Related Links
13.2.3.5 Debug Operation
13.2.3.1 Clocks
13.2.3.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
13.3.1 Initialization
An interrupt must be initialized in the following order:
1. Configure the CPUINT if the default configuration is not adequate (optional):
– Vector handling is configured by writing to the respective bits (IVSEL and CVT) in the Control
A register (CPUINT.CTRLA).
– Vector prioritizing by round robin is enabled by writing a '1' to the Round Robin Priority Enable
bit (LVL0RR) in CPUINT.CTRLA.
– Select the priority level 1 vector by writing its address to the Interrupt Vector (LVL1VEC) in the
Level 1 Priority register (CPUINT.LVL1VEC).
2. Configure the interrupt conditions within the peripheral, and enable the peripheral's interrupt.
3. Enable interrupts globally by writing a '1' to the Global Interrupt Enable bit (I) in the CPU Status
register (CPU.SREG).
13.3.2 Operation
13.3.2.1 Enabling, Disabling, and Resetting
Global enabling of interrupts is done by writing a '1' to the Global Interrupt Enable bit (I) in the CPU Status
register (CPU.SREG). To disable interrupts globally, write a '0' to the I bit in CPU.SREG.
The desired interrupt lines must also be enabled in the respective peripheral, by writing to the peripheral's
Interrupt Control register (peripheral.INTCTRL).
Interrupt flags are not automatically cleared after the interrupt is executed. The respective INTFLAGS
register descriptions provide information on how to clear specific flags.
13.3.2.2 Interrupt Vector Locations
The interrupt vector placement is dependent on the value of Interrupt Vector Select bit (IVSEL) in the
Control A register (CPUINT.CTRLA). Refer to the IVSEL description in CPUINT.CTRLA for the possible
locations.
If the program never enables an interrupt source, the interrupt vectors are not used, and regular program
code can be placed at these locations.
13.3.2.3 Interrupt Response Time
The minimum interrupt response time for all enabled interrupts is three CPU clock cycles: one cycle to
finish the ongoing instruction, two cycles to store the Program Counter to the stack, and three cycles(1) to
jump to the interrupt handler (JMP).
After the Program Counter is pushed on the stack, the program vector for the interrupt is executed. See
Figure 13-2, first diagram.
The jump to the interrupt handler takes three clock cycles(1). If an interrupt occurs during execution of a
multicycle instruction, this instruction is completed before the interrupt is served. See Figure 13-2, second
diagram.
If an interrupt occurs when the device is in sleep mode, the interrupt execution response time is
increased by five clock cycles. In addition, the response time is increased by the start-up time from the
selected sleep mode. See Figure 13-2, third diagram.
A return from an interrupt handling routine takes four to five clock cycles, depending on the size of the
Program Counter. During these clock cycles, the Program Counter is popped from the stack and the
Stack Pointer is incremented.
Figure 13-2. Interrupt Execution of a Single-Cycle Instruction, Multicycle Instruction, and From
Sleep(1)
Single-Cycle Instruction
Multicycle Instruction
Sleep
Note:
1. Devices with 8 KB of Flash or less use RJMP instead of JMP, which takes only two clock cycles.
:
:
:
IVEC Y
IVEC Y+1
:
:
:
The default priority can be changed by writing to the CPUINT.LVL0PRI register. The value written to the
register will identify the vector number with the lowest priority. The next interrupt vector in IVEC will have
the highest priority, see the following figure. In this figure, the value Y has been written to
CPUINT.LVL0PRI, so that interrupt vector Y+1 has the highest priority. Note that in this case, the priorities
will "wrap" so that IVEC0 has lower priority than IVECn.
Refer to the Interrupt Vector Mapping of the device for available interrupt requests and their interrupt
vector number.
Figure 13-4. Static Scheduling when CPUINT.LVL0PRI is Different From Zero
Lowest Address IVEC 0
IVEC 1
:
:
:
:
:
:
Related Links
7.2 Interrupt Vector Mapping
IVEC 0 IVEC 0
: :
: :
: :
IVEC n IVEC n
13.3.3 Events
Not applicable.
Register Key
IVSEL in CPUINT.CTRLA IOREG
CVT in CPUINT.CTRLA IOREG
Related Links
8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers
13.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
IVSEL CVT LVL0RR
Access R/W R/W R/W
Reset 0 0 0
Value Description
0 Interrupt vectors are placed at the start of the application section of the Flash
1 Interrupt vectors are placed at the start of the boot section of the Flash
Value Description
0 Compact Vector Table function is disabled
1 Compact Vector Table function is enabled
Value Description
0 Priority is fixed for priority level 0 interrupt requests: The lowest interrupt vector address has
the highest priority.
1 Round Robin priority scheme is enabled for priority level 0 interrupt requests
13.5.2 Status
Name: STATUS
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
NMIEX LVL1EX LVL0EX
Access R R R
Reset 0 0 0
Name: LVL0PRI
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
LVL0PRI[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: LVL1VEC
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
LVL1VEC[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
14.1 Features
• System for Direct Peripheral-to-Peripheral Signaling
• Peripherals can Directly Produce, Use, and React to Peripheral Events
• Short Response Time
• Up to Six Parallel Event Channels Available; Four Asynchronous and Two Synchronous
• Channels can be Configured to Have One Triggering Peripheral Action and Multiple Peripheral
Users
• Peripherals can Directly Trigger and React to Events from Other Peripherals
• Events can be Sent and/or Received by Most Peripherals, and by Software
• Works in Active mode and Standby Sleep mode
14.2 Overview
The Event System (EVSYS) enables direct peripheral-to-peripheral signaling. It allows a change in one
peripheral (the event generator) to trigger actions in other peripherals (the event users) through event
channels, without using the CPU. It is designed to provide short and predictable response times between
peripherals, allowing for autonomous peripheral control and interaction, and also for the synchronized
timing of actions in several peripheral modules. It is thus a powerful tool for reducing the complexity, size,
and the execution time of the software.
A change of the event generator's state is referred to as an event and usually corresponds to one of the
peripheral's interrupt conditions. Events can be directly forwarded to other peripherals using the
dedicated event routing network. The routing of each channel is configured in software, including event
generation and use.
Only one trigger from an event generator peripheral can be routed on each channel, but multiple
channels can use the same generator source. Multiple peripherals can use events from the same
channel.
A channel path can be either asynchronous or synchronous to the main clock. The mode must be
selected based on the requirements of the application.
The Event System can directly connect analog and digital converters, analog comparators, I/O port pins,
the real-time counter, timer/counters, and the configurable custom logic peripheral. Events can also be
generated from software and the peripheral clock.
Sync source 0
To sync user
Sync source 1 ..
.. .
.
Sync source n
Async user y
Async event channel ”l” Async user 0
Async event channel 0
.. To async user
Async source 0 .
Async source 1 ..
.. .
.
Async source m
Timer/Counter ADC
Compare Match
Channel Sweep
Event
Over-/Underflow
| Routing
Single
Network Conversion
Error
14.5.4 SYNCCH
14.5.3 ASYNCCH
14.5.6 SYNCUSER
14.5.5 ASYNCUSER
Related Links
14.2.3.2 I/O Lines
10.2.1 Block Diagram - CLKCTRL
Related Links
14.2.3.1 Clocks
14.3.5 Debug Operation
14.2.3.1 Clocks
The EVSYS uses the peripheral clock for I/O registers and software events. When correctly set up, the
routing network can also be used in sleep modes without any clock. Software events will not work in
sleep modes where the peripheral clock is halted.
Related Links
10. CLKCTRL - Clock Controller
14.3.1 Initialization
Before enabling events within the device, the event users multiplexer and event channels must be
configured.
Related Links
14.3.2.1 Event User Multiplexer Setup
14.3.2.2 Event System Channel
14.3.2 Operation
14.3.2.1 Event User Multiplexer Setup
The event user multiplexer selects the channel for an event user. Each event user has one dedicated
event user multiplexer. Each multiplexer is connected to the supported event channel outputs and can be
configured to select one of these channels.
Event users, which support asynchronous events, also support synchronous events. There are also event
users that support only synchronous events.
The event user multiplexers are configured by writing to the corresponding registers:
• Event users supporting both synchronous and asynchronous events are configured by writing to the
respective asynchronous User Channel Input Selection n register (EVSYS.ASYNCUSERn).
• The users of synchronous-only events are configured by writing to the respective Synchronous
User Channel Input Selection n register (EVSYS.SYNCUSERn).
The default setup of all user multiplexers is OFF.
14.3.2.2 Event System Channel
An event channel can be connected to one of the event generators. Event channels support either
asynchronous generators or synchronous generators.
The source for each asynchronous event channel is configured by writing to the respective Asynchronous
Channel n Input Selection register (EVSYS.ASYNCCHn).
The source for each synchronous event channel is configured by writing to the respective Synchronous
Channel n Input Selection register (EVSYS.SYNCCHn).
14.3.3 Interrupts
Not applicable.
14.3.6 Synchronization
Asynchronous events are synchronized and handled by the compatible event users. Event user
peripherals not compatible with asynchronous events can only be configured to listen to synchronous
event channels.
Name: ASYNCSTROBE
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ASYNCSTROBE[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SYNCSTROBE
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SYNCSTROBE[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: ASYNCCH
Offset: 0x02 + n*0x01 [n=0..3]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ASYNCCH[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Note: Not all pins of a port are actually available on devices with low pin counts. Check the Pinout
Diagram and/or the I/O Multiplexing table for details.
Related Links
4. Pinout
5. I/O Multiplexing and Considerations
Name: SYNCCH
Offset: 0x0A + n*0x01 [n=0..1]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SYNCCH[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: ASYNCUSER
Offset: 0x12 + n*0x01 [n=0..12]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ASYNCUSER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Value Description
0x0 OFF
0x1 SYNCCH0
0x2 SYNCCH1
0x3 ASYNCCH0
0x4 ASYNCCH1
0x5 ASYNCCH2
0x6 ASYNCCH3
Name: SYNCUSER
Offset: 0x22 + n*0x01 [n=0..1]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SYNCUSER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Value Name
0x0 OFF
0x1 SYNCCH0
0x2 SYNCCH1
15.1 Overview
The Port Multiplexer (PORTMUX) can either enable or disable functionality of pins, or change between
default and alternative pin positions. This depends on the actual pin and property and is described in
detail in the PORTMUX register map.
For available pins and functionalities, refer to the Multiplexed Signals table.
Related Links
5. I/O Multiplexing and Considerations
15.3.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EVOUT1 EVOUT0
Access R/W R/W
Reset 0 0
15.3.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SPI0 USART0
Access R/W R/W
Reset 0 0
15.3.3 Control C
Name: CTRLC
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TCA00
Access R/W
Reset 0
16.1 Features
• General Purpose Input and Output Pins with Individual Configuration
• Output Driver with Configurable Inverted I/O and Pull-up
• Input with Interrupts and Events:
– Sense both edges
– Sense rising edges
– Sense falling edges
– Sense low level
• Asynchronous Pin Change Sensing That Can Wake the Device From all Sleep Modes
• Efficient and Safe Access to Port Pins
– Hardware read-modify-write through dedicated toggle/clear/set registers
– Mapping of often-used PORT registers into bit-accessible I/O memory space (virtual ports)
16.2 Overview
The I/O pins of the device are controlled by instances of the Port Peripheral registers. This device has the
following instances of the I/O pin configuration (PORT): PORTA, PORTB.
Refer to the I/O multiplexing table to see which pins are controlled by what instance of port. The offsets of
the port instances and of the corresponding virtual port instances are listed in the Peripherals and
Architecture section.
Each of the port pins has a corresponding bit in the Data Direction (PORT.DIR) and Data Output Value
(PORT.OUT) registers to enable that pin as an output and to define the output state. For example, pin
PA3 is controlled by DIR[3] and OUT[3] of the PORTA instance.
The Data Input Value (PORT.IN) is set as the input value of a port pin with resynchronization to the main
clock. To reduce power consumption, these input synchronizers are not clocked if the Input Sense
Configuration bit field (ISC) in PORT.PINnCTRL is INPUT_DISABLE. The value of the pin can always be
read, whether the pin is configured as input or output.
The port supports synchronous and asynchronous input sensing with interrupts for selectable pin change
conditions. Asynchronous pin-change sensing means that a pin change can wake the device from all
sleep modes, including the modes where no clocks are running.
All pin functions are configurable individually per pin. The pins have hardware read-modify-write (RMW)
functionality for a safe and correct change of drive value and/or pull resistor configuration. The direction
of one port pin can be changed without unintentionally changing the direction of any other pin.
The port pin configuration controls input and output selection of other device functions.
Related Links
5. I/O Multiplexing and Considerations
7. Peripherals and Architecture
Pullup Enable
Invert Enable
OUTn
D Q
Pxn
OUT Override
R
DIRn
D Q
DIR
R Override
Interrupt
Interrupt
Generator Input Disable
Input
Disable
Override
Synchronizer
INn
Synchronized
Q D Q D
Input
R R
Digital Input /
Asynchronous Event
Analog Input/Output
Related Links
5. I/O Multiplexing and Considerations
Related Links
16.2.3.4 Events
16.2.3.1 Clocks
16.2.3.3 Interrupts
16.2.3.1 Clocks
This peripheral depends on the peripheral clock.
16.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
16.3.3 Interrupts
8.7.3 SREG
16.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
16.3.1 Initialization
After Reset, all standard function device I/O pads are connected to the port with outputs tri-stated and
input buffers enabled, even if there is no clock running.
Power consumption can be reduced by disabling digital input buffers for all unused pins and for pins used
as analog inputs or outputs.
Specific pins, such as those used for connecting a debugger, may be configured differently, as required
by their special function.
16.3.2 Operation
Related Links
16.6 Register Summary - VPORT
5. I/O Multiplexing and Considerations
7. Peripherals and Architecture
Changes of the signal on a pin can trigger an interrupt. The exact conditions are defined by writing to the
Input/Sense bit field (ISC) in PORT.PINnCTRL.
When setting or changing interrupt settings, take these points into account:
• If an INVEN bit is toggled in the same cycle as the interrupt setting, the edge caused by the
inversion toggling may not cause an interrupt request.
• If an input is disabled while synchronizing an interrupt, that interrupt may be requested on re-
enabling the input, even if it is re-enabled with a different interrupt setting.
• If the interrupt setting is changed while synchronizing an interrupt, that interrupt may not be
accepted.
• Only a few pins support full asynchronous interrupt detection, see I/O Multiplexing and
Considerations. These limitations apply for waking the system from sleep:
Related Links
5. I/O Multiplexing and Considerations
16.3.3 Interrupts
Table 16-3. Available Interrupt Vectors and Sources
Each port pin n can be configured as an interrupt source. Each interrupt can be individually enabled or
disabled by writing to ISC in PORT.PINCTRL.
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt request is generated when the corresponding interrupt is enabled and the interrupt flag is set.
The interrupt request remains active until the interrupt flag is cleared. See the peripheral's INTFLAGS
register for details on how to clear interrupt flags.
Related Links
8. AVR CPU
8.7.3 SREG
16.3.4 Events
All PORT pins are asynchronous event system generators. PORT has as many event generators as there
are PORT pins in the device. Each event system output from PORT is the value present on the
corresponding pin if the digital input driver is enabled. If a pin input driver is disabled, the corresponding
event system output is zero.
PORT has no event inputs.
16.3.6 Synchronization
Not applicable.
Name: DIR
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DIR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DIRSET
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DIRSET[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DIRCLR
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DIRCLR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DIRTGL
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DIRTGL[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OUT
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OUT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OUTSET
Offset: 0x05
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OUTSET[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OUTCLR
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OUTCLR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OUTTGL
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OUTTGL[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: IN
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
IN[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: INTFLAGS
Offset: 0x09
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
INT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PINCTRL
Offset: 0x10 + n*0x01 [n=0..7]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
INVEN PULLUPEN ISC[2:0]
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Value Description
0 I/O on pin n not inverted
1 I/O on pin n inverted
Value Description
0 Pullup disabled for pin n
1 Pullup enabled for pin n
Name: DIR
Offset: 0x00
Reset: 0x00
Property: -
Writing to the Virtual PORT registers has the same effect as writing to the regular registers, but allows for
memory-specific instructions, such as bit-manipulation instructions, which are not valid for the extended
I/O memory space where the regular PORT registers reside.
Bit 7 6 5 4 3 2 1 0
DIR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OUT
Offset: 0x01
Reset: 0x00
Property: -
Writing to the Virtual PORT registers has the same effect as writing to the regular registers, but allows for
memory-specific instructions, such as bit-manipulation instructions, which are not valid for the extended
I/O memory space where the regular PORT registers reside.
Bit 7 6 5 4 3 2 1 0
OUT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: IN
Offset: 0x02
Reset: 0x00
Property: -
Writing to the Virtual PORT registers has the same effect as writing to the regular registers, but allows for
memory-specific instructions, such as bit-manipulation instructions, which are not valid for the extended
I/O memory space where the regular PORT registers reside.
Bit 7 6 5 4 3 2 1 0
IN[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: INTFLAGS
Offset: 0x03
Reset: 0x00
Property: -
Writing to the Virtual PORT registers has the same effect as writing to the regular registers, but allows for
memory-specific instructions, such as bit-manipulation instructions, which are not valid for the extended
I/O memory space where the regular PORT registers reside.
Bit 7 6 5 4 3 2 1 0
INT[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
17.1 Features
• Brown-out Detection monitors the power supply to avoid operation below a programmable level
• There are three modes:
– Enabled
– Sampled
– Disabled
• Separate selection of mode for Active and Sleep modes
• Voltage Level Monitor (VLM) with Interrupt
• Programmable VLM Level Relative to the BOD Level
17.2 Overview
The Brown-out Detector (BOD) peripheral monitors the power supply and compares the voltage with two
programmable threshold levels: The brown-out threshold level defines when to generate a Reset. A
Voltage Level Monitor (VLM) monitors the power supply and compares it to a threshold higher than the
BOD threshold. The VLM can then generate an interrupt request as an "early warning" when the supply
voltage is about to drop below the VLM threshold. The VLM threshold level is expressed as a percentage
above the BOD threshold level.
The BOD is mainly controlled by fuses. The mode used in Standby Sleep mode and Power-Down Sleep
mode can be altered in normal program execution. The VLM part of the BOD is controlled by I/O registers
as well.
When activated, the BOD can operate in Enabled mode, where the BOD is continuously active, and in
Sampled mode, where the BOD is activated briefly at a given period to check the supply voltage level.
BOD Level
and
Calibration
-
Brown-out
Detection
Bandgap +
VLM Interrupt Level
-
VLM Interrupt
Detection
Bandgap +
Related Links
17.2.2.1 Clocks
17.2.2.5 Debug Operation
17.2.2.3 Interrupts
17.2.2.4 Events
17.2.2.1 Clocks
The BOD uses the 32 KHz oscillator (OSCULP32K) as clock source for CLK_BOD.
17.2.2.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
17.3.2 Interrupts
17.2.2.4 Events
Not applicable.
17.3.1 Initialization
The BOD settings are loaded from fuses during Reset. The BOD level and operating mode in Active and
Idle Sleep mode are set by fuses and cannot be changed by the CPU. The operating mode in Standby
and Power-Down Sleep mode is loaded from fuses and can be changed by software.
The Voltage Level Monitor function can be enabled by writing a '1' to the VLM Interrupt Enable bit
(VLMIE) in the Interrupt Control register (BOD.INTCTRL). The VLM interrupt is configured by writing the
VLM Configuration bits (VLMCFG) in BOD.INTCTRL. An interrupt is requested when the supply voltage
crosses the VLM threshold either from above, from below, or from any direction.
The VLM functionality will follow the BOD mode. If the BOD is turned OFF, the VLM will not be enabled,
even if the VLMIE is '1'. If the BOD is using Sampled mode, the VLM will also be sampled. When enabling
VLM interrupt, the interrupt flag will always be set if VLMCFG equals 0x2 and may be set if VLMCFG is
configured to 0x0 or 0x1.
The VLM threshold is defined by writing the VLM Level bits (VLMLVL) in the Control A register
(BOD.VLMCTRLA).
If the BOD/VLM is enabled in Sampled mode, only VLMCFG=0x1 (crossing threshold from above) in
BOD.INTCTRL will trigger an interrupt.
17.3.2 Interrupts
Table 17-2. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Related Links
8. AVR CPU
8.7.3 SREG
17.3.4 Synchronization
Not applicable.
Register Key
SLEEP in BOD.CTRLA IOREG
Related Links
8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers
17.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: Loaded from fuse
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
SAMPFREQ ACTIVE[1:0] SLEEP[1:0]
Access R R R R/W R/W
Reset x x x x x
Value Description
0x0 Sample frequency is 1 kHz
0x1 Sample frequency is 125 Hz
Value Description
0x0 Disabled
0x1 Enabled
0x2 Sampled
0x3 Enabled with wake-up halted until BOD is ready
Value Description
0x0 Disabled
0x1 Enabled
0x2 Sampled
0x3 Reserved
17.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: Loaded from fuse
Property: -
Bit 7 6 5 4 3 2 1 0
LVL[2:0]
Access R R R R R R R R
Reset 0 0 0 0 0 x x x
Name: VLMCTRLA
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
VLMLVL[1:0]
Access R/W R/W
Reset 0 0
Value Description
0x0 VLM threshold 5% above BOD threshold
0x1 VLM threshold 15% above BOD threshold
0x2 VLM threshold 25% above BOD threshold
other Reserved
Name: INTCTRL
Offset: 0x09
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
VLMCFG[1:0] VLMIE
Access R/W R/W R/W
Reset 0 0 0
Value Description
0x0 Voltage crosses VLM threshold from above
0x1 Voltage crosses VLM threshold from below
0x2 Either direction is triggering an interrupt request
Other Reserved
Name: INTFLAGS
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
VLMIF
Access R/W
Reset 0
Name: STATUS
Offset: 0x0B
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
VLMS
Access R
Reset 0
Value Description
0 The voltage is above the VLM threshold level
1 The voltage is below the VLM threshold level
18.1 Features
• Programmable Voltage Reference Sources:
– One for each ADC peripheral
– One for each AC and DAC peripheral
• Each Reference Source Supports Five Different Voltages:
– 0.55V
– 1.1V
– 1.5V
– 2.5V
– 4.3V
18.2 Overview
The Voltage Reference (VREF) peripheral provides control registers for the voltage reference sources
used by several peripherals. The user can select the reference voltages for the ADC0 by writing to the
ADC0 Reference Select bit field (ADC0REFSEL) in the Control A register (VREF.CTRLA), and for both
AC0 and DAC0 by writing to the DAC0 and AC0 Reference Select bit field DAC0REFSEL in
VREF.CTRLA.
A voltage reference source is enabled automatically when requested by a peripheral. The user can
enable the reference voltage sources (and thus, override the automatic disabling of unused sources) by
writing to the respective Force Enable bit (ADC0REFEN, DAC0REFEN) in the Control B register
(VREF.CTRLB). This may be desirable to decrease start-up time, at the cost of increased power
consumption.
Reference reque st
Reference enable
Reference se lect
0.55V
1.1V
Bandgap Reference 1.5V Inte rnal
Gen erator
BUF Reference
2.5V
4.3V
Ban dgap
ena ble
18.3.1 Initialization
The default configuration will enable the respective source when the ADC0, AC0, or DAC0 is requesting a
reference voltage. The default reference voltages are 0.55V but can be configured by writing to the
respective Reference Select bit field (ADC0REFSEL, DAC0REFSEL) in the Control A register
(VREF.CTRLA).
18.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ADC0REFSEL[2:0] DAC0REFSEL[2:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0x0 0.55V
0x1 1.1V
0x2 2.5V
0x3 4.3V
0x4 1.5V
other Reserved
Value Description
0x0 0.55V
0x1 1.1V
0x2 2.5V
0x3 4.3V
0x4 1.5V
other Reserved
18.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DAC2REFEN ADC1REFEN DAC1REFEN ADC0REFEN DAC0REFEN
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
19.1 Features
• Issues a System Reset if the Watchdog Timer is not Cleared Before its Time-out Period
• Operating Asynchronously from System Clock Using an Independent Oscillator
• Using the 1 KHz Output of the 32 KHz Ultra Low-Power Oscillator (OSCULP32K)
• 11 Selectable Time-out Periods, from 8 ms to 8s
• Two Operation modes:
– Normal mode
– Window mode
• Configuration Lock to Prevent Unwanted Changes
• Closed Period Timer Activation After First WDT Instruction for Easy Setup
19.2 Overview
The Watchdog Timer (WDT) is a system function for monitoring correct program operation. It allows the
system to recover from situations such as runaway or deadlocked code, by issuing a Reset. When
enabled, the WDT is a constantly running timer with a predefined time-out period. If the WDT is not reset
within the time-out period, it will issue a system Reset. The WDT is reset by executing the WDR (Watchdog
Timer Reset) instruction in software.
The WDT has two modes of operation; Normal mode and Window mode. The settings in the Control A
register (WDT.CTRLA) determine the mode of operation.
A Window mode defines a time slot or "window" inside the time-out period during which the WDT must be
reset. If the WDT is reset outside this window, either too early or too late, a system Reset will be issued.
Compared to the Normal mode, the Window mode can catch situations where a code error causes
constant WDR execution.
When enabled, the WDT will run in Active mode and all Sleep modes. It is asynchronous (i.e., running
from a CPU independent clock source). For this reason, it will continue to operate and be able to issue a
system Reset even if the main clock fails.
The CCP mechanism ensures that the WDT settings cannot be changed by accident. For increased
safety, a configuration for locking the WDT settings is available.
Related Links
8.5.7 Configuration Change Protection (CCP)
CLK_WDT
COUNT
PERIOD =
System
Reset
CTRLA
WDR
(instruction)
Related Links
19.2.3.1 Clocks
19.2.3.5 Debug Operation
19.2.3.1 Clocks
A 1 KHz Oscillator Clock (CLK_WDT_OSC) is sourced from the internal Ultra Low-Power Oscillator,
OSCULP32K. Due to the ultra low-power design, the oscillator is not very accurate, and so the exact
time-out period may vary from device to device. This variation must be kept in mind when designing
software that uses the WDT to ensure that the time-out periods used are valid for all devices.
The Counter Clock CLK_WDT_OSC is asynchronous to the system clock. Due to this asynchronicity,
writing to the WDT Control register will require synchronization between the clock domains.
19.2.3.3 Interrupts
Not applicable.
19.2.3.4 Events
Not applicable.
19.2.3.5 Debug Operation
When run-time debugging, this peripheral will continue normal operation. Halting the CPU in Debugging
mode will halt normal operation of the peripheral.
When halting the CPU in Debug mode, the WDT counter is reset.
When starting the CPU again and the WDT is operating in Window mode, the first closed window time-
out period will be disabled, and a Normal mode time-out period is executed.
Related Links
19.3.2.2 Window Mode
19.3.1 Initialization
• The WDT is enabled when a non-zero value is written to the Period bits (PERIOD) in the Control A
register (WDT.CTRLA).
• Optional: Write a non-zero value to the Window bits (WINDOW) in WDT.CTRLA to enable Window
mode operation.
All bits in the Control A register and the Lock bit (LOCK) in the STATUS register (WDT.STATUS) are
write-protected by the Configuration Change Protection mechanism.
The Reset value of WDT.CTRLA is defined by a fuse (FUSE.WDTCFG), so the WDT can be enabled at
boot time. If this is the case, the LOCK bit in WDT.STATUS is set at boot time.
Related Links
19.4 Register Summary - WDT
19.3.2 Operation
WDT Timeout
System Reset
Here: 5 10 15 20 25 30 35 t [ms]
TO WDT = 16 ms TOWDT
Normal mode is enabled as long as the WINDOW bit field in the Control A register (WDT.CTRLA) is 0x0.
Related Links
19.4 Register Summary - WDT
Here: 5 10 15 20 25 30 35 t [ms]
TOWDTW =TOWDT = 8 ms TOWDTW TOWDT
The Window mode is enabled by writing a non-zero value to the WINDOW bit field in the Control A
register (WDT.CTRLA), and disabled by writing WINDOW=0x0.
19.3.3 Events
Not applicable.
19.3.4 Interrupts
Not applicable.
19.3.6 Synchronization
Due to asynchronicity between the main clock domain and the peripheral clock domain, the Control A
register (WDT.CTRLA) is synchronized when written. The Synchronization Busy flag (SYNCBUSY) in the
STATUS register (WDT.STATUS) indicates if there is an ongoing synchronization.
Writing to WDT.CTRLA while SYNCBUSY=1 is not allowed.
The following registers are synchronized when written:
• PERIOD bits in Control A register (WDT.CTRLA)
• Window Period bits (WINDOW) in WDT.CTRLA
The WDR instruction will need two to three cycles of the WDT clock in order to be synchronized. Issuing a
new WDR instruction while a WDR instruction is being synchronized will be ignored.
Register Key
WDT.CTRLA IOREG
LOCK bit in WDT.STATUS IOREG
19.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: From FUSE.WDTCFG
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
WINDOW[3:0] PERIOD[3:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
19.5.2 Status
Name: STATUS
Offset: 0x01
Reset: 0x00
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
LOCK SYNCBUSY
Access R/W R
Reset 0 0
20.1 Features
• 16-Bit Timer/Counter
• Three Compare Channels
• Double-Buffered Timer Period Setting
• Double-Buffered Compare Channels
• Waveform Generation:
– Frequency generation
– Single-slope PWM (pulse-width modulation)
– Dual-slope PWM
• Count on Event
• Timer Overflow Interrupts/Events
• One Compare Match per Compare Channel
• Two 8-Bit Timer/Counters in Split Mode
20.2 Overview
The flexible 16-bit PWM Timer/Counter type A (TCA) provides accurate program execution timing,
frequency and waveform generation, and command execution.
A TCA consists of a base counter and a set of compare channels. The base counter can be used to count
clock cycles or events or let events control how it counts clock cycles. It has direction control and period
setting that can be used for timing. The compare channels can be used together with the base counter to
do compare match control, frequency generation, and pulse-width waveform modulation.
Depending on the mode of operation, the counter is cleared, reloaded, incremented, or decremented at
each timer/counter clock or event input.
A timer/counter can be clocked and timed from the peripheral clock with optional prescaling or from the
event system. The event system can also be used for direction control or to synchronize operations.
By default, the TCA is a 16-bit timer/counter. The timer/counter has a Split mode feature that splits it into
two 8-bit timer/counters with three compare channels each. In Split mode, each compare channel only
supports single-slope PWM waveform generation.
A block diagram of the 16-bit timer/counter with closely related peripheral modules (in grey) is shown in
the figure below.
Timer/Counter
Base Counter Prescaler
CLK_PER
Timer Period
Control Logic
Counter Event
System
Compare Channel 0
Compare Channel 1
PORTS
Compare Channel 2
Comparator
Waveform
Buffer Generation
Clock Select
BV PERB CTRLA
Event
Select
PER EVCTRL
"count"
Counter
"clear"
OVF/UNF
(INT Req.)
"load"
CNT Control Logi c
"direction"
TOP
UPDATE
=
BOTTOM
"ev"
=0
Compare
(Unit x = {A,B,C})
CMPn
Wav efo rm
Generation
WOn Out
"match" CMPn
= (INT Req.)
The counter register (TCAn.CNT), period registers with buffer (TCAn.PER and TCAn.PERBUF), and
compare registers with buffers (TCAn.CMPx and TCAn.CMPBUFx) are 16-bit registers. All buffer
registers have a buffer valid (BV) flag that indicates when the buffer contains a new value.
During normal operation, the counter value is continuously compared to zero and the period (PER) value
to determine whether the counter has reached TOP or BOTTOM.
The counter value is also compared to the TCAn.CMPx registers. These comparisons can be used to
generate interrupt requests. The Waveform Generator modes use these comparisons to set the waveform
period or pulse-width.
A prescaled peripheral clock and events from the event system can be used to control the counter.
event
CKSEL
EVACT (Encoding)
CLK_TCA
CNT
CNTEI
Related Links
20.2.3.1 Clocks
20.2.3.5 Debug Operation
20.2.3.3 Interrupts
20.2.3.4 Events
20.2.3.1 Clocks
This peripheral uses the system clock CLK_PER and has its own prescaler.
Related Links
10. CLKCTRL - Clock Controller
Related Links
5. I/O Multiplexing and Considerations
16. PORT - I/O Pin Configuration
20.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
20.3.5 Interrupts
20.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
20.3.1 Definitions
The following definitions are used throughout the documentation:
Table 20-2. Timer/Counter Definitions
Name Description
BOTTOM The counter reaches BOTTOM when it becomes zero.
MAX The counter reaches MAXimum when it becomes all ones.
TOP The counter reaches TOP when it becomes equal to the highest value in the count
sequence.
UPDATE The update condition is met when the timer/counter reaches BOTTOM or TOP, depending on
the Waveform Generator mode.
CNT Counter register value.
CMP Compare register value.
In general, the term timer is used when the timer/counter is counting periodic clock ticks. The term
counter is used when the input signal has sporadic or irregular ticks.
20.3.2 Initialization
To start using the timer/counter in a basic mode, follow these steps:
• Write a TOP value to the Period register (TCAn.PER)
• Enable the peripheral by writing a '1' to the ENABLE bit in the Control A register (TCAn.CTRLA).
The counter will start counting clock ticks according to the prescaler setting in the Clock Select bit
field (CLKSEL) in TCAn.CTRLA.
• Optional: By writing a '1' to the Enable Count on Event Input bit (CNTEI) in the Event Control
register (TCAn.EVCTRL), event inputs are counted instead of clock ticks.
• The counter value can be read from the Counter bit field (CNT) in the Counter register
(TCAn.CNT).
20.3.3 Operation
MAX
"update"
TOP
CNT
BOTTOM
DIR
It is possible to change the counter value in the Counter register (TCAn.CNT) when the counter is
running. The write access to TCAn.CNT has higher priority than count, clear, or reload, and will be
immediate. The direction of the counter can also be changed during normal operation by writing to DIR in
TCAn.CTRLE.
20.3.3.2 Double Buffering
The Period register value (TCAn.PER) and the Compare n register values (TCAn.CMPn) are all double-
buffered (TCAn.PERBUF and TCAn.CMPnBUF).
Each buffer register has a Buffer Valid flag (PERBV, CMPnBV) in the Control F register (TCAn.CTRLF),
which indicates that the buffer register contains a valid, i.e. new, value that can be copied into the
corresponding Period or Compare register. When the Period register and Compare n registers are used
for a compare operation, the BV flag is set when data is written to the buffer register and cleared on an
UPDATE condition. This is shown for a Compare register (CMPn) below.
BV EN CMPnBUF
EN CMPn
UPDATE
CNT
"match"
=
Both the TCAn.CMPn and TCAn.CMPnBUF registers are available as I/O registers. This allows
initialization and bypassing of the buffer register and the double buffering function.
20.3.3.3 Changing the Period
The Counter period is changed by writing a new TOP value to the Period register (TCAn.PER).
No Buffering: If double buffering is not used, any period update is immediate.
Figure 20-6. Changing the Period Without Buffering
Counter wrap-around
MAX
"update"
"write"
CNT
BOTTOM
New TOP written to New TOP written to
PER that is higher PER that is lower
than current CNT. than current CNT.
A counter wrap-around can occur in any mode of operation when up-counting without buffering. This is
due to the fact that the TCAn.CNT and TCAn.PER registers are continuously compared: if a new TOP
value is written to TCAn.PER that is lower than the current TCAn.CNT, the counter will wrap first, before a
compare match happens.
Figure 20-7. Unbuffered Dual-Slope Operation
Counter wrap-around
MAX
"update"
"write"
CNT
BOTTOM
With Buffering: When double buffering is used, the buffer can be written at any time and still maintain
correct operation. The TCAn.PER is always updated on the UPDATE condition, as shown for dual-slope
operation in the figure below. This prevents wrap-around and the generation of odd waveforms.
Figure 20-8. Changing the Period Using Buffering
MAX
"update"
"write"
CNT
BOTTOM
New Period written to New Period written to
New PER is updated
PERB that is higher PERB that is lower
with PERB value.
than current CNT. than current CNT.
CNT TOP
BOTTOM
WG Output
The waveform frequency (fFRQ) is defined by the following equation:
f CLK_PER
�FRQ =
2� CMPn+1
where N represents the prescaler divider used (CLKSEL in TCAn.CTRLA), CMPn is the value of the
TCAn.CMPn register, and fCLK_PER is the system clock for the peripherals.
The maximum frequency of the waveform generated is half of the peripheral clock frequency (fCLK_PER/2)
when TCAn.CMPn is written to zero (0x0000) and no prescaling is used (N=1, CLKSEL=0x0 in
TCAn.CTRLA).
20.3.3.4.3 Single-Slope PWM Generation
For single-slope Pulse-Width Modulation (PWM) generation, the period (T) is controlled by TCAn.PER,
while the values of TCAn.CMPn control the duty-cycle of the WG output. The figure below shows how the
counter counts from BOTTOM to TOP and then restarts from BOTTOM. The waveform generator (WO)
output is set at TOP and cleared on the compare match between the TCAn.CNT and TCAn.CMPn
registers.
Figure 20-10. Single-Slope Pulse-Width Modulation
"update"
Period (T) CMPn=BOTTOM CMPn=TOP
"match"
MAX
TOP
CNT
CMPn
BOTTOM
Output WOn
The TCAn.PER register defines the PWM resolution. The minimum resolution is 2 bits
(TCA.PER=0x0003), and the maximum resolution is 16 bits (TCA.PER=MAX).
The following equation calculates the exact resolution for single-slope PWM (RPWM_SS):
log PER+1
�PWM_SS =
log 2
The single-slope PWM frequency (fPWM_SS) depends on the period setting (TCA_PER), the system's
peripheral clock frequency fCLK_PER, and the TCA prescaler (CLKSEL in TCAn.CTRLA). It is calculated by
the following equation where N represents the prescaler divider used:
�CLK_PER
�PWM_SS =
� PER+1
20.3.3.4.4 Dual-Slope PWM
For dual-slope PWM generation, the period (T) is controlled by TCAn.PER, while the values of
TCAn.CMPn control the duty-cycle of the WG output.
The figure below shows how for dual-slope PWM the counter counts repeatedly from BOTTOM to TOP
and then from TOP to BOTTOM. The waveform generator output is set on BOTTOM, cleared on compare
match when up-counting, and set on compare match when down-counting.
Figure 20-11. Dual-Slope Pulse-Width Modulation
"update"
Period (T) CMPn=BOTTOM CMPn=TOP
"match"
MAX
CMPn
CNT TOP
BOTTOM
Using dual-slope PWM results in a lower maximum operation frequency compared to the single-slope
PWM operation.
The period register (TCAn.PER) defines the PWM resolution. The minimum resolution is 2 bits
(TCAn.PER=0x0003), and the maximum resolution is 16 bits (TCAn.PER=MAX).
The following equation calculates the exact resolution for dual-slope PWM (RPWM_DS):
log PER+1
�PWM_DS =
log 2
The PWM frequency depends on the period setting (TCAn.PER), the peripheral clock frequency
(fCLK_PER), and the prescaler divider used (CLKSEL in TCAn.CTRLA). It is calculated by the following
equation:
�CLK_PER
�PWM_DS =
2� ⋅ PER
N represents the prescaler divider used.
20.3.3.4.5 Port Override for Waveform Generation
To make the waveform generation available on the port pins, the corresponding port pin direction must be
set as output (PORTx.DIR[n]=1). The TCA will override the port pin values when the compare channel is
enabled (CMPnEN=1 in TCAn.CTRLB) and a Waveform Generation mode is selected.
The figure below shows the port override for TCA. The timer/counter compare channel will override the
port pin output value (OUT) on the corresponding port pin. Enabling inverted I/O on the port pin
(INVEN=1 in PORT.PINn) inverts the corresponding WG output.
Figure 20-12. Port Override for Timer/Counter Type A
OUT
Waveform WOn
CMPnEN INVEN
Block Diagram
Figure 20-13. Timer/Counter Block Diagram Split Mode
Base Counter
Clock Select
HPER LPER CTRLA
"count high"
Counter
"load high" HUNF
"count low" (INT Req.)
HCNT LCNT Control Logic
"load low"
LUNF
(INT Req.)
BOTTOML
=0
BOTTOMH
=0
Compare
(Unit n = {0,1,2})
LCMPn
Waveform
Generation
WOn Out
"match" LCMPn
=
(INT Req.)
Compare
(Unit n = {0,1,2})
HCMPn
Waveform
Generation
WO[n+3] Out
"match"
=
20.3.4 Events
The TCA is an event generator. The following events will generate a one-cycle strobe on the event
channel outputs:
• Timer overflow
• Timer underflow in Split mode
• Compare match channel 0
• Compare match channel 1
• Compare match channel 2
The peripheral can take the following actions on an input event:
• The counter counts positive edges of the event signal.
• The counter counts both positive and negative edges of the event signal.
• The counter counts prescaled clock cycles as long as the event signal is high.
• The counter counts prescaled clock cycles. The event signal controls the direction of counting. Up-
counting when the event signal is low and down-counting when the event signal is high.
The specific action is selected by writing to the Event Action bits (EVACT) in the Event Control register
(TCAn.EVCTRL). Events as input are enabled by writing a '1' to the Enable Count on Event Input bit
(CNTEI in TCAn.EVCTRL).
Event-controlled inputs are not used in Split mode.
20.3.5 Interrupts
Table 20-3. Available Interrupt Vectors and Sources in Normal Mode
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Related Links
8. AVR CPU
8.7.3 SREG
20.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CLKSEL[2:0] ENABLE
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 The peripheral is disabled
1 The peripheral is enabled
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP2EN CMP1EN CMP0EN ALUPD WGMODE[2:0]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Value Description
0 Port output settings for the pin with WOn output respected
1 Port output settings for pin with WOn output overridden in FRQ or PWM Waveform
Generation mode
Value Description
0 LUPD in TCA.CTRLE not altered by system
1 LUPD in TCA.CTRLE set and cleared automatically
Name: CTRLC
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP2OV CMP1OV CMP0OV
Access R/W R/W R/W
Reset 0 0 0
20.5.4 Control D
Name: CTRLD
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SPLITM
Access R/W
Reset 0
Name: CTRLECLR
Offset: 0x04
Reset: 0x00
Property: -
The individual Status bit can be cleared by writing a '1' to its bit location. This allows each bit to be
cleared without the use of a read-modify-write operation on a single register.
Each Status bit can be read out either by reading TCAn.CTRLESET or TCAn.CTRLECLR.
Bit 7 6 5 4 3 2 1 0
CMD[1:0] LUPD DIR
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 The buffered registers are updated as soon as an UPDATE condition has occurred.
1 No update of the buffered registers is performed, even though an UPDATE condition has
occurred.
Value Description
0 The counter is counting up (incrementing)
1 The counter is counting down (decrementing)
Name: CTRLESET
Offset: 0x05
Reset: 0x00
Property: -
The individual Status bit can be set by writing a '1' to its bit location. This allows each bit to be set without
the use of a read-modify-write operation on a single register.
Each Status bit can be read out either by reading TCAn.CTRLESET or TCAn.CTRLECLR.
Bit 7 6 5 4 3 2 1 0
CMD[1:0] LUPD DIR
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 The buffered registers are updated as soon as an UPDATE condition has occurred.
1 No update of the buffered registers is performed, even though an UPDATE condition has
occurred.
Value Description
0 The counter is counting up (incrementing)
1 The counter is counting down (decrementing)
Name: CTRLFCLR
Offset: 0x06
Reset: 0x00
Property: -
The individual Status bit can be cleared by writing a '1' to its bit location. This allows each bit to be
cleared without the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
CMP2BV CMP1BV CMP0BV PERBV
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: CTRLFSET
Offset: 0x07
Reset: 0x00
Property: -
The individual status bit can be set by writing a '1' to its bit location. This allows each bit to be set without
the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
CMP2BV CMP1BV CMP0BV PERBV
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: EVCTRL
Offset: 0x09
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EVACT[1:0] CNTEI
Access R/W R/W R/W
Reset 0 0 0
Value Description
0 Counting on Event input is disabled
1 Counting on Event input is enabled according to EVACT bit field
Name: INTCTRL
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP2 CMP1 CMP0 OVF
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: INTFLAGS
Offset: 0x0B
Reset: 0x00
Property: -
The individual Status bit can be cleared by writing a '1' to its bit location. This allows each bit to be set
without the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
CMP2 CMP1 CMP0 OVF
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: DBGCTRL
Offset: 0x0E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: TEMP
Offset: 0x0F
Reset: 0x00
Property: -
The Temporary register is used by the CPU for single-cycle, 16-bit access to the 16-bit registers of this
peripheral. It can be read and written by software. Refer to 16-bit access in the AVR CPU chapter. There
is one common Temporary register for all the 16-bit registers of this peripheral.
Bit 7 6 5 4 3 2 1 0
TEMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: CNT
Offset: 0x20
Reset: 0x00
Property: -
The TCAn.CNTL and TCAn.CNTH register pair represents the 16-bit value, TCAn.CNT. The low byte [7:0]
(suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset
+ 0x01.
CPU and UPDI write access has priority over internal updates of the register.
Bit 15 14 13 12 11 10 9 8
CNT[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CNT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PER
Offset: 0x26
Reset: 0xFFFF
Property: -
Bit 15 14 13 12 11 10 9 8
PER[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Bit 7 6 5 4 3 2 1 0
PER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Name: CMPn
Offset: 0x28 + n*0x02 [n=0..2]
Reset: 0x00
Property: -
This register is continuously compared to the counter value. Normally, the outputs from the comparators
are then used for generating waveforms.
TCAn.CMPn registers are updated with the buffer value from their corresponding TCAn.CMPnBUF
register when an UPDATE condition occurs.
The TCAn.CMPnL and TCAn.CMPnH register pair represents the 16-bit value, TCAn.CMPn. The low
byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at
offset + 0x01.
Bit 15 14 13 12 11 10 9 8
CMP[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PERBUF
Offset: 0x36
Reset: 0xFFFF
Property: -
This register serves as the buffer for the period register (TCAn.PER). Accessing this register using the
CPU or UPDI will affect the PERBV flag.
The TCAn.PERBUFL and TCAn.PERBUFH register pair represents the 16-bit value, TCAn.PERBUF. The
low byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed
at offset + 0x01.
Bit 15 14 13 12 11 10 9 8
PERBUF[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Bit 7 6 5 4 3 2 1 0
PERBUF[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Name: CMPBUF
Offset: 0x38 + n*0x02 [n=0..2]
Reset: 0x00
Property: -
This register serves as the buffer for the associated compare registers (TCAn.CMPn). Accessing any of
these registers using the CPU or UPDI will affect the corresponding CMPnBV status bit.
The TCAn.CMPnBUFL and TCAn.CMPnBUFH register pair represents the 16-bit value, TCAn.CMPnBUF.
The low byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be
accessed at offset + 0x01.
Bit 15 14 13 12 11 10 9 8
CMPBUF[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CMPBUF[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
20.7.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CLKSEL[2:0] ENABLE
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 The peripheral is disabled
1 The peripheral is enabled
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
HCMP2EN HCMP1EN HCMP0EN LCMP2EN LCMP1EN LCMP0EN
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Name: CTRLC
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
HCMP2OV HCMP1OV HCMP0OV LCMP2OV LCMP1OV LCMP0OV
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
20.7.4 Control D
Name: CTRLD
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SPLITM
Access R/W
Reset 0
Name: CTRLECLR
Offset: 0x04
Reset: 0x00
Property: -
The individual Status bit can be cleared by writing a '1' to its bit location. This allows each bit to be
cleared without the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
CMD[1:0] CMDEN[1:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: CTRLESET
Offset: 0x05
Reset: 0x00
Property: -
The individual Status bit can be set by writing a '1' to its bit location. This allows each bit to be set without
the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
CMD[1:0] CMDEN[1:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: INTCTRL
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
LCMP2 LCMP1 LCMP0 HUNF LUNF
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: INTFLAGS
Offset: 0x0B
Reset: 0x00
Property: -
The individual Status bit can be cleared by writing a ‘1’ to its bit location. This allows each bit to be set
without the use of a read-modify-write operation on a single register.
Bit 7 6 5 4 3 2 1 0
LCMP2 LCMP1 LCMP0 HUNF LUNF
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: DBGCTRL
Offset: 0x0E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: LCNT
Offset: 0x20
Reset: 0x00
Property: -
TCAn.LCNT contains the counter value in low byte timer. CPU and UPDI write access has priority over
count, clear, or reload of the counter.
Bit 7 6 5 4 3 2 1 0
LCNT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: HCNT
Offset: 0x21
Reset: 0x00
Property: -
TCAn.HCNT contains the counter value in high byte timer. CPU and UPDI write access has priority over
count, clear, or reload of the counter.
Bit 7 6 5 4 3 2 1 0
HCNT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: LPER
Offset: 0x26
Reset: 0x00
Property: -
The TCAn.LPER register contains the TOP value of low byte timer.
Bit 7 6 5 4 3 2 1 0
LPER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Name: HPER
Offset: 0x27
Reset: 0x00
Property: -
The TCAn.HPER register contains the TOP value of high byte timer.
Bit 7 6 5 4 3 2 1 0
HPER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Name: LCMP
Offset: 0x28 + n*0x02 [n=0..2]
Reset: 0x00
Property: -
The TCAn.LCMPn register represents the compare value of compare channel n for low byte timer. This
register is continuously compared to the counter value of the low byte timer, TCAn.LCNT. Normally, the
outputs from the comparators are then used for generating waveforms.
Bit 7 6 5 4 3 2 1 0
LCMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: HCMP
Offset: 0x29 + n*0x02 [n=0..2]
Reset: 0x00
Property: -
The TCAn.HCMPn register represents the compare value of compare channel n for high byte timer. This
register is continuously compared to the counter value of the high byte timer, TCAn.HCNT. Normally, the
outputs from the comparators are then used for generating waveforms.
Bit 7 6 5 4 3 2 1 0
HCMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
21.1 Features
• 16-Bit Counter Operation Modes:
– Periodic interrupt
– Time-out check
– Input capture
• On event
• Frequency measurement
• Pulse-width measurement
• Frequency and pulse-width measurement
– Single shot
– 8-bit Pulse-Width Modulation (PWM)
• Noise Canceler on Event Input
• Optional: Operation Synchronous with TCA0
21.2 Overview
The capabilities of the 16-bit Timer/Counter type B (TCB) include frequency and waveform generation,
and input capture on event with time and frequency measurement of digital signals. The TCB consists of
a base counter and control logic which can be set in one of eight different modes, each mode providing
unique functionality. The base counter is clocked by the peripheral clock with optional prescaling.
This device has two instances of the TCB peripheral: TCB0 and TCB1.
DIV2 CLK_PER
Counter "count"
"clear" Control CLK_TCA
CNT Logic
Event System
IF
(INT Req.)
TOP
=
BOTTOM
=0
Synchronous
Output control output
and
Mode, Output enable, initial value Asynchronous logic Asynchronous
output
Related Links
5. I/O Multiplexing and Considerations
Related Links
21.2.3.1 Clocks
21.2.3.5 Debug Operation
21.2.3.3 Interrupts
21.2.3.4 Events
21.2.3.1 Clocks
This peripheral uses the system's peripheral clock CLK_PER. The peripheral has its own local prescaler
or can be configured to run off the prescaled clock signal of the Timer Counter type A (TCA).
Related Links
10. CLKCTRL - Clock Controller
21.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
21.3.5 Interrupts
21.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
Related Links
33. UPDI - Unified Program and Debug Interface
21.3.1 Definitions
The following definitions are used throughout the documentation:
Table 21-2. Timer/Counter Definitions
Name Description
BOTTOM The counter reaches BOTTOM when it becomes zero.
MAX The counter reaches MAXimum when it becomes all ones.
TOP The counter reaches TOP when it becomes equal to the highest value in the count
sequence.
UPDATE The update condition is met when the timer/counter reaches BOTTOM or TOP, depending on
the Waveform Generator mode.
CNT Counter register value.
CCMP Capture/Compare register value.
In general, the term timer is used when the timer/counter is counting periodic clock ticks. The term
counter is used when the input signal has sporadic or irregular ticks.
21.3.2 Initialization
By default, the TCB is in Periodic Interrupt mode. Follow these steps to start using it:
• Write a TOP value to the Compare/Capture register (TCBn.CCMP).
• Enable the counter by writing a '1' to the ENABLE bit in the Control A register (TCBn.CTRLA).
The counter will start counting clock ticks according to the prescaler setting in the Clock Select bit
field (CLKSEL in TCBn.CTRLA).
• The counter value can be read from the Count register (TCBn.CNT). The peripheral will generate
an interrupt when the CNT value reaches TOP.
21.3.3 Operation
21.3.3.1 Modes
The timer can be configured to run in one of the eight different modes listed below. The event pulse
needs to be longer than one system clock cycle in order to ensure edge detection.
21.3.3.1.1 Periodic Interrupt Mode
In the Periodic Interrupt mode, the counter counts to the capture value and restarts from zero. An
interrupt is generated when the counter is equal to TOP. If TOP is updated to a value lower than count,
the counter will continue until MAX and wrap around without generating an interrupt.
MAX
"Interrupt"
CNT TOP
BOTTOM
Event Input
Counter wraps
around
MAX
“ Inter rupt”
TOP
CNT
BOTTOM
Event Input
Edge detector
MAX
CNT
BOTTOM
Copy CNT to CCMP Copy CNT to CCMP
Wraparound
and interrupt and interrupt
It is recommended to write '0' to the TCBn.CNT register when entering this mode from any other mode.
21.3.3.1.4 Input Capture Frequency Measurement Mode
In this mode, the TCB captures the counter value and restarts on either a positive or negative edge of the
event input signal.
The interrupt flag is automatically cleared after the high byte of the Compare/Capture register
(TCBn.CCMP) has been read, and an interrupt request is generated.
The figure below illustrates this mode when configured to act on rising edge.
Figure 21-5. Input Capture Frequency Measurement
" Interrupt "
Event Input
Edge detector
MAX
CNT
BOTTOM
Copy CNT to CCMP, Copy CNT to CCMP, Copy CNT to CCMP,
interrupt and restart interrupt and restart interrupt and restart
Event Input
Edge detector
MAX
CNT
BOTTOM
Restart Copy CNT to CCMP Restart Copy CNT to CCMP Restart
counter and interrupt counter and give interrupt counter
Event Input
Edge detector
MAX
" Interrupt"
CNT
BOTTOM
Start Copy CNT to Stop counter and CPU reads the
counter CCMP interrupt CCMP register
Ignored Ignored
Edge detector
TOP
CNT
" Interrupt"
BOTTOM
Output
CNT CCMPH
BOTTOM
Output
21.3.3.2 Output
If ASYNC in TCBn.CTRLB is written to '0' ('1'), the output pin is driven synchronously (asynchronously) to
the TCB clock. The CCMPINIT, CCMPEN, and CNTMODE bits in TCBn.CTRLB control how the
synchronous output is driven. The different configurations and their impact on the output are listed in the
table below.
Table 21-3. Synchronous Output
When the Synchronize Update bit (SYNCUPD) in the Control A register (TCBn.CTRLA) is written to ‘1’,
the TCB counter will restart when the TCA counter restarts.
Related Links
21.2.1 Block Diagram
21.3.4 Events
The TCB is an event generator. Any condition that causes the CAPT flag in TCBn.INTFLAGS to be set
will also generate a one-cycle strobe on the event channel output.
The peripheral accepts one event input. If the Capture Event Input Enable bit (CAPTEI) in the Event
Control register (TCBn.EVCTRL) is written to '1', incoming events will result in an event action as defined
by the Event Edge bit (EDGE) in TCBn.EVCTRL. The event needs to last for at least one CLK_PER cycle
to ensure that it is recognized.
If the Asynchronous mode is enabled for Single-Shot mode, the event is edge triggered and will capture
changes on the event input shorter than one system clock cycle.
Related Links
21.5.3 EVCTRL
14. EVSYS - Event System
21.3.5 Interrupts
Table 21-4. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Related Links
13. CPUINT - CPU Interrupt Controller
21.5.5 INTFLAGS
21.3.7 Synchronization
Not applicable.
21.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTDBY SYNCUPD CLKSEL[1:0] ENABLE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Value Description
0x0 CLK_PER
0x1 CLK_PER/2
0x2 Use CLK_TCA from TCA0
0x3 Reserved
21.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ASYNC CCMPINIT CCMPEN CNTMODE[2:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0 The output will go HIGH when the counter actually starts
1 The output will go HIGH when an event arrives
Value Description
0 Initial pin state is LOW
1 Initial pin state is HIGH
Value Description
0 Compare/Capture Output is zero
1 Compare/Capture Output has a valid value
Value Description
0x0 Periodic Interrupt mode
0x1 Time-out Check mode
0x2 Input Capture on Event mode
0x3 Input Capture Frequency Measurement mode
0x4 Input Capture Pulse-Width Measurement mode
0x5 Input Capture Frequency and Pulse-Width Measurement mode
0x6 Single-Shot mode
0x7 8-Bit PWM mode
Name: EVCTRL
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
FILTER EDGE CAPTEI
Access R/W R/W R/W
Reset 0 0 0
Name: INTCTRL
Offset: 0x05
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CAPT
Access R/W
Reset 0
Name: INTFLAGS
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CAPT
Access R/W
Reset 0
21.5.6 Status
Name: STATUS
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUN
Access R
Reset 0
Name: DBGCTRL
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: TEMP
Offset: 0x09
Reset: 0x00
Property: -
The Temporary register is used by the CPU for single-cycle, 16-bit access to the 16-bit registers of this
peripheral. It can be read and written by software. Refer to 16-bit access in the AVR CPU chapter. There
is one common Temporary register for all the 16-bit registers of this peripheral.
Bit 7 6 5 4 3 2 1 0
TEMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
21.5.9 Count
Name: CNT
Offset: 0x0A
Reset: 0x00
Property: -
The TCBn.CNTL and TCBn.CNTH register pair represents the 16-bit value TCBn.CNT. The low byte [7:0]
(suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset
+ 0x01.
CPU and UPDI write access has priority over internal updates of the register.
Bit 15 14 13 12 11 10 9 8
CNT[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CNT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
21.5.10 Capture/Compare
Name: CCMP
Offset: 0x0C
Reset: 0x00
Property: -
The TCBn.CCMPL and TCBn.CCMPH register pair represents the 16-bit value TCBn.CCMP. The low
byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at
offset + 0x01.
This register has different functions depending on the mode of operation:
• For capture operation, these registers contain the captured value of the counter at the time the
capture occurs
• In periodic interrupt/time-out and Single-Shot mode, this register acts as the TOP value
• In 8-bit PWM mode, TCBn.CCMPL and TCBn.CCMPH act as two independent registers
Bit 15 14 13 12 11 10 9 8
CCMP[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CCMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
22.1 Features
• 12-bit Timer/Counter
• Programmable Prescaler
• Double-Buffered Compare Registers
• Waveform Generation:
– One Ramp mode
– Two Ramp mode
– Four Ramp mode
– Dual-Slope mode
• Two Separate Input Capture, Double-Buffered
• Connection to Event System by Programmable Filter
• Conditional Waveform on External Events:
– Fault handling
– Input blanking
– Overload protection function
– Fast emergency stop by hardware
• Supports Both Half Bridge and Full Bridge Output
22.2 Overview
The Timer/Counter type D (TCD) is a high-performance waveform controller that consists of an
asynchronous counter, a prescaler, compare logic, capture logic, and control logic. The purpose of the
TCD is to control power applications like LED, motor control, H-bridge, and power converters.
The TCD contains a counter that can run on a clock which is asynchronous from the system clock. It
contains compare logic that can generate two independent outputs with optional dead time. It is
connected to the event system for capture and deterministic fault control. The timer/counter can generate
interrupts and events on compare match and overflow.
This device provides one instance of the TCD peripheral, TCD0.
Compare/Capture
CMPASET_
CMPASET Unit A
BUF
=
SET A
CMPACLR_ Waveform
CMPACLR WOA
BUF generator A
CLR A
=
Event Input A Event Input
Logic A
CAPTUREA_
CAPTUREA
BUF WOC
Compare/Capture WOD
CMPBSET_
CMPBSET Unit B
BUF
=
SET B
CMPBCLR_ Waveform
CMPBCLR WOB
BUF generator B
CLR B
=
Event Input
Event Input B Logic B
CAPTUREB_
CAPTUREB
BUF
The TCD core is asynchronous to the system clock. The timer/counter consist of two compare/capture
units, each with a separate waveform output. In addition, there are two extra waveform outputs which can
be equal to the output from one of the units. The compare registers CMPxSET and CMPxCLR are stored
in the respective registers (TCDn.CMPxSET, TCDn.CMPxCLR), which consists of both a low and a high
byte. The registers are synchronized to the TCD domain after writing to the registers.
During normal operation, the counter value is continuously compared to the compare registers. This is
used to generate both interrupts and events.
The TCD can use the input events in ten different input modes, selected separately for the two input
events. The input mode defines how the input event will affect the outputs, and where in the TCD cycle
the counter should go when an event occurs.
Related Links
22.2.3.1 Clocks
22.2.3.5 Debug Operation
22.2.3.3 Interrupts
22.2.3.4 Events
22.2.3.1 Clocks
The TCD can be connected directly to the internal 16/20 MHz RC Oscillator (OSC20M), to an external
clock, or to the system clock. This is configured by the Clock Select bit field (CLKSEL) in the Control A
register (TCD.CTRLA).
Related Links
10. CLKCTRL - Clock Controller
22.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
22.3.4 Interrupts
22.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
22.2.4 Definitions
The following definitions are used throughout the documentation:
Table 22-2. Timer/Counter Definitions
Name Description
TCD cycle The sequence of four states that the counter needs to go through before it
has returned to the same position.
Input Blanking Functionality to ignore event input for a programmable time in a selectable
part of the TCD cycle.
Asynchronous output Allows the Event to override the output instantly when the Event occurs. It is
control used for handling non-recoverable faults.
One ramp Counter is reset to zero once during a TCD cycle.
Two ramp Counter is reset to zero two times during a TCD cycle.
Four ramp Counter is reset to zero four times during a TCD cycle.
Dual ramp Counter counts both up and down between zero and selected top value.
22.3.2 Operation
Double-Buffered Registers
The double-buffered registers can be updated in normal I/O writes while TCD is enabled and no
synchronization between the two clock domains is ongoing. Check that the CMDRDY bit in
TCDn.STATUS is '1' to ensure that it is possible to update the double-buffered I/O registers. The values
will be synchronized to the TCD core domain when a synchronization command is sent or when TCD is
enabled.
Static Registers
The static registers are kept static whenever TCD is enabled. This means that these registers must be
configured before enabling TCD. It is not possible to write to these registers as long as TCD is enabled.
To see if TCD is enabled, check if ENABLE in TCDn.CTRLA is reading '1'.
OSC20M
Synchronization Synchronizer clock
EXTCLK
CLK_TCD prescaler (CLK_TCD_SYNC)
CLK_PER
The TCD synchronizer clock is separate from the other module clocks enabling faster synchronization
between the TCD domain and the I/O domain. The total prescaling for the counter is:
SYNCPRESC_division_factor × CNTPRESC_division_factor
The delay prescaler is used to prescale the clock used for the input blanking/delayed event output
functionality. The prescaler can be configured independently allowing separate range and accuracy
settings from the counter functionality.
counter
compare
value
values
CMPBCLR
CMPBSET
CMPACLR
CMPASET
WOA
WOB
In the figure above, CMPASET < CMPACLR < CMPBSET < CMPBCLR. This is required in One Ramp
mode to avoid overlapping outputs. The figure below is an example where CMPBSET < CMPASET <
CMPACLR < CMPBCLR, resulting in an overlap of the outputs.
On time B
Compare Counter
values value
CMPBCLR
CMPACLR
CMPASET
CMPBSET
WOA
WOB
If any of the other compare values are bigger than CMPBCLR it will never be triggered when running in
One Ramp mode, and if the CMPACLR is smaller than the CMPASET value, the clear value will not have
any effect.
22.3.2.3.2 Two Ramp Mode
In Two Ramp mode the TCD counter counts up until it reaches the CMPACLR value, then it Resets and
counts up until it reaches the CMPBCLR value. Then, the TCD cycle is done and the counter restarts
from 0x000, beginning a new TCD cycle. The TCD cycle period is given by:
CMPACLR + 1 + CMPBCLR + 1
�TCD_cycle =
�CLK_TCD_CNT
counter
value
CMPBCLR
CMPACLR
CMPBSET
CMPASET
WOA
WOB
In the figure above, CMPASET < CMPACLR and CMPBSET < CMPBCLR. This causes the outputs to go
high. There are no restrictions on the CMPASET/CLR compared to the CMPBSET/CLR values.
In Two Ramp mode, it is not possible to get overlapping outputs.
22.3.2.3.3 Four Ramp Mode
In Four Ramp mode the TCD cycle is following this pattern:
1. A TCD cycle begins with the TCD counter counting up from zero until it reaches the CMPASET
value, and resets to zero.
2. The Counter counts up from zero until it reaches the CMPACLR value, and resets to zero.
3. The Counter counts up from zero until it reaches the CMPBSET value, and resets to zero.
4. The Counter counts up from zero until it reaches the CMPBCLR value, and ends the TCD cycle by
resetting to zero.
The TCD cycle period is given by:
CMPASET + 1 + CMPACLR + 1 + CMPBSET + 1 + CMPBCLR + 1
�TCD_cycle =
�CLK_TCD_CNT
counter
value
CMPBCLR
CMPACLR CMPBSET
CMPASET
WOA
WOB
There are no restrictions on the compare values compared to each other.
In Four Ramp mode, it is not possible to get overlapping outputs.
22.3.2.3.4 Dual Slope Mode
In Dual Slope mode, a TCD cycle consists of the TCD counter counting down from CMPBCLR value to
zero, and up again to the CMPBCLR value. This gives a TCD cycle period:
2 × CMPBCLR + 1
�TCD_cycle =
�CLK_TCD_CNT
The WOA output is set when the TCD counter counts up and matches the CMPASET value. WOA is
cleared when the TCD counter counts down and matches the CMPASET value.
The WOB output is set when the TCD counter counts down and matches the CMPBSET value. WOB is
cleared when the TCD counter counts up and matches the CMPBSET value.
Figure 22-7. Dual Slope Mode
TCD cycle
Dead Dead
On time B time A On time A time B On time B
counter
CMPBCLR value
CMPASET
CMPBSET
WOA
WOB
CMPACLR is not used in Dual Slope mode. Writing a value to CMPACLR has no effect.
When starting the TCD in Dual Slope mode, the TCD counter starts at the CMPBCLR value and counts
down. The WOA will not be set before the end of the first TCD cycle.
Figure 22-8. Dual Slope Mode Starting and Stopping
TCD cycle
counter
CMPBCLR value
CMPASET
CMPBSET
WOA
WOB
Start-up Stop
EVCTRLA.FILTER Synchronized
Change flow override
DLYPRESC INPUT
MODE
DLYTRIG
DLYSEL TC Core
Output state (Timer/Counter,
Output
compare values,
control
waveform generator)
INPUT
MODE
Synchronized
Change flow
override
EVCTRLB.FILTER
Digital
Input processing logic
Filter
Input Event B (Input mode logic B)
There is a delay of 2-3 clock cycles on the TCD synchronizer clock between receiving the input event,
processing it, and overriding the outputs. If using the asynchronous event detection, the outputs will
override instantly outside the input processing.
22.3.2.4.1 Input Blanking
Input blanking functionality is masking out the input events for a programmable time in a selectable part
of the TCD cycle. Input blanking can be used to mask out 'false' input events that are triggered right after
changes on the outputs.
To enable input blanking, write 0x1 to the Delay Select bit field in the Delay Control register (DLYSEL in
TCDn.DLYCTRL). The trigger source is selected by the Delay Trigger bit field (DLYTRIG in
TCDn.DLYCTRL).
Input blanking uses the Delay clock: after a trigger, a counter is counting up until the Delay Value
(DLYVAL in TCDn.DLYVAL) is reached before input blanking is turned OFF. The TCD delay clock is a
prescaled version of the Synchronization clock. The division factor is set by the Delay Prescaler bit field in
the Delay Control register (DLYPRESC in TCDn.DLYCTRL). The duration of the input blanking is given
by:
DLYPRESC_division_factor × DLYVAL
�BLANK =
�CLK_TCD_SYNC
Input blanking is using the same logic as the programmable output event. For this reason, it is not
possible to use both at the same time.
22.3.2.4.2 Digital Filter
The digital filter for event input x is enabled by writing a '1' to the FILTER bit in the Event Control x
register (TCDn.EVCTRLx). When the digital filter is enabled, any pulse lasting less than four counter
clock cycles will be filtered out. Any change on the incoming event will, therefore, take four counter clock
cycles before it will affect the input processing logic.
INPUTMODE Description
0x0 Input has no action
0x1 Stop output, jump to opposite compare cycle and wait
0x2 Stop output, execute opposite compare cycle and wait
0x3 Stop output, execute opposite compare cycle while fault active
0x4 Stop all outputs, maintain frequency
0x5 Stop all outputs, execute dead time while fault active
0x6 Stop all outputs, jump to next compare cycle and wait
0x7 Stop all outputs, wait for software action
0x8 Stop output on edge, jump to next compare cycle
0x9 Stop output on edge, maintain frequency
0xA Stop output at level, maintain frequency
other Reserved
Not all input modes work in all Waveform Generation modes. Below is a table that shows what Waveform
Generation modes the different input modes are valid in.
Table 22-5. Ramp Mode the Different Input Modes are Valid In
INPUTMODE One Ramp Mode Two Ramp Mode Four Ramp Mode Dual Slope Mode
0x1 Valid Valid Valid Do not use
0x2 Do not use Valid Valid Do not use
0x3 Do not use Valid Valid Do not use
0x4 Valid Valid Valid Valid
0x5 Do not use Valid Valid Do not use
0x6 Do not use Valid Valid Do not use
INPUTMODE One Ramp Mode Two Ramp Mode Four Ramp Mode Dual Slope Mode
0x7 Valid Valid Valid Valid
0x8 Valid Valid Valid Do not use
0x9 Valid Valid Valid Do not use
0xA Valid Valid Valid Do not use
In the following sections the different Input modes are presented in detail.
Input Mode 1: Stop Output, Jump to Opposite Compare Cycle, and Wait
An input Event in Input mode 1 will stop the output signal, jump to the opposite dead time, and wait until
the input event goes low before the TCD counter continues.
If Input mode 1 is used on input A, an event will only have an effect if the TCD is in Dead-time A or On-
time A, and it will only affect the output WOA. When the event is done, the TCD counter starts at Dead-
time B.
Figure 22-10. Input Mode 1 on Input A
DTA OTA DTB OTB DTA OTA Wait DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
If Input mode 1 is used on input B, an event will only have an effect if the TCD is in Dead-time B or On-
time B, and it will only affect the output WOB. When the event is done, the TCD counter starts at Dead-
time A.
Figure 22-11. Input Mode 1 on Input B
DTA OTA DTB OTB Wait DTA OTA DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
Input Mode 2: Stop Output, Execute Opposite Compare Cycle, and Wait
An input Event in Input mode 2 will stop the output signal, execute to the opposite dead time and on time,
then wait until the input event goes low before the TCD counter continues. If the input is done before the
opposite dead time and on time have finished, there will be no waiting, but the opposite dead time and on
time will continue.
If Input mode 2 is used on input A, an event will only have an effect if the TCD is in Dead-time A or On-
time A, and it will only affect the output WOA.
WOA
WOB
INPUT A
INPUT B
If Input mode 2 is used on input B, an event will only have an effect if the TCD is in Dead-time B or On-
time B, and it will only affect the output WOB.
Figure 22-13. Input Mode 2 on Input B
DTA OTA DTB OTB DTA OTA Wait DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
Input Mode 3: Stop Output, Execute Opposite Compare Cycle while Fault Active
An input Event in Input mode 3 will stop the output signal and start executing the opposite dead time and
on time, as long as the fault/input is active. When the input is released, the ongoing dead time and/or on
time will finish and then, the normal flow will start.
If Input mode 3 is used on input A, an event will only have an effect if the TCD is in Dead-time A or On-
time A.
Figure 22-14. Input Mode 3 on Input A
DTA OTA DTB OTB DTA OTA DTB OTB DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
If Input mode 3 is used on input B, an event will only have an effect if the TCD is in Dead-time B or On-
time B.
WOA
WOB
INPUT A
INPUT B
Input Mode 4: Stop all Outputs, Maintain Frequency
When Input mode 4 is used, both input A and input B will give the same functionality.
An input event will deactivate the outputs as long as the event is active. The TCD counter will not be
affected by events in this Input mode.
Figure 22-16. Input Mode 4
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA DTB OTB
WOA
WOB
INPUT A/B
Input Mode 5: Stop all Outputs, Execute Dead Time while Fault Active
When Input mode 5 is used, both input A and input B give the same functionality:
The input event stops the outputs and starts on the opposite dead-time if it occurs during an on-time. If
the event occurs during a dead-time, it will continue until the next on-time should start, but instead, it will
jump to the next dead-time. As long as the input event is active, alternating dead-times will occur. When
the input event stops, the ongoing dead-time will finish and the next on-time will continue in the normal
flow.
Figure 22-17. Input Mode 5
DTA OTA DTB OTB DTA OTA DTB DTA DTB DTA DTB OTB
WOA
WOB
INPUT A/B
Input Mode 6: Stop All Outputs, Jump to Next Compare Cycle, and Wait
When Input mode 6 is used both input A and input B will give the same functionality. The input event
stops the outputs and jumps to the opposite dead-time if it occurs during an on-time. If the event occurs
during a dead-time, it will continue until the next on-time should start, but instead, it will jump to the next
dead-time. As long as the input event is active, the TCD counter will wait. When the input events stops,
the next dead-time will start and normal flow will continue.
WOA
WOB
INPUT A/B
Input Mode 7: Stop all Outputs, Wait for Software Action
When Input mode 7 is used, both input A and input B will give the same functionality. The input events
stop the outputs and the TCD counter. It will be stopped until a Restart command is given. If the input
event is still high when the Restart command is given, it will just stop again. When the TCD counter
restarts, it will always start on Dead-time A.
Figure 22-19. Input Mode 7
DTA OTA DTB OTB DTA OTA Wait DTA OTA
WOA
WOB
INPUT A/B
Software Restart
command
Input Mode 8: Stop Output on Edge, Jump to Next Compare Cycle
In Input mode 8, a positive edge on the input event while the corresponding output is ON will cause the
output to stop and the TCD counter jump to the opposite dead-time.
If Input mode 8 is used on input A and a positive input event occurs while in On-time A, the TCD counter
jumps to Dead-time B.
Figure 22-20. Input Mode 8 on Input A
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA DTB OTB
WOA
WOB
INPUT A
OR
INPUT A
If Input mode 8 is used on input B and a positive input event occurs while in On-time B, the TCD counter
jumps to Dead-time A.
WOA
WOB
INPUT B
OR
INPUT B
Input Mode 9: Stop Output at Level, Maintain Frequency
In Input mode 9 a positive edge on the input event while the corresponding output is ON will cause the
output to stop during the rest of the on-time. The TCD counter will not be affected by the event, only the
output.
If Input mode 9 is used on input A and a positive input event occurs while in On-time A, the output will be
OFF for the rest of the on-time.
Figure 22-22. Input Mode 9 on Input A
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
If Input mode 9 is used on input B and a positive input event occurs while in On-time B, the output will be
OFF for the rest of the on-time.
Figure 22-23. Input Mode 9 on Input B
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
Input Mode 10: Stop Output on Edge, Maintain Frequency
In Input mode 10 the input event will cause the corresponding output to stop as long as the input is active.
If the input goes low while there should have been an on-time on the corresponding output, the output will
be deactivated for the rest of the on-time, too. The TCD counter is not affected by the event, only the
output.
If Input mode 10 is used on input A and an input event occurs, the WOA will be OFF as long as the event
lasts. If released during an on-time, it will be OFF for the rest of the on-time.
Figure 22-24. Input Mode 10 on Input A
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
If Input mode 10 is used on input B and an input event occurs, the WOB will be OFF as long as the event
lasts. If released during an on-time, it will be OFF for the rest of the on-time.
Figure 22-25. Input Mode 10 on Input B
DTA OTA DTB OTB DTA OTA DTB OTB DTA OTA
WOA
WOB
INPUT A
INPUT B
Input Mode Summary
The table below summarizes the conditions as illustrated in the timing diagrams of the preceding
sections.
Table 22-6. Input Mode Summary
22.3.2.5 Dithering
If it is not possible to achieve the desired frequency because of prescaler/period selection limitations,
dithering can be used to approximate the desired frequency and reduce waveform drift.
Dither accumulates the fractional error of the counter clock for each cycle. When the fractional error
overflows, an additional cycle is added to the selected part of the cycle.
Dither value
ACCUMULATOR REGISTER
The user can select where in the TCD cycle the Dither will be added by writing to the Dither Selection bits
in the Dither Control register (DITHERSEL in TCDn.DITCTRL):
• On-time B
• On-time A and B
• Dead-time B
• Dead-time A and B
How much the Dithering will affect the TCD cycle time depends on what Waveform Generation mode is
used, see the table below.
Dithering is not supported in Dual Slope mode.
Table 22-7. Mode-Dependent Dithering Additions to TCD Cycle
The differences in the number of TCD clock cycles added to the TCD cycle is caused by the different
number of compare values used by the TCD cycle. For example, in One Ramp mode, only CMPBCLR
affects the TCD cycle time.
For DITHERSEL configurations where no extra cycles are added to the TCD cycles, compensation is
reached by shortening the following output state.
Related Links
22.3.1 Initialization and Disabling
22.3.3 Events
The TCD can generate the following output events:
• TCD counter matches CMPBCLR
• TCD counter matches CMPASET
• TCD counter matches CMPBSET
• Programmable TCD output event. The user can select the trigger and all the different compare
matches. In addition, it is possible to delay the output event from 0 to 256 TCD delay cycles.
The three events based on the counter match directly generate event strobes that last one clock cycle on
the TCD counter clock. The programmable output event generates an event strobe that last one clock
cycle on the TCD synchronizer clock.
The TCD has the possibility to receive these input events:
• Input A
• Input B
Related Links
22.3.2.4 TCD Inputs
14. EVSYS - Event System
22.3.4 Interrupts
Table 22-8. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
When several interrupt request conditions are supported by an interrupt vector, the interrupt requests are
ORed together into one combined interrupt request to the interrupt controller. The user must read the
peripheral's INTFLAGS register to determine which of the interrupt conditions are present.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
22.3.6 Synchronization
The TCD has two different clock domains and needs to synchronize the communication between the
domains. See the Initialization section for details on how the synchronization of values from the I/O clock
domain to the TCD clock domain is done. See the Capture section for details on how the synchronization
of values from the TCD clock domain to the I/O clock domain is done.
Related Links
22.3.1 Initialization and Disabling
22.3.2.6 TCD Counter Capture
Register Key
FAULTCTRL IOREG
7:0 CMPCLR[7:0]
0x2A CMPACLR
15:8 CMPCLR[11:8]
7:0 CMPSET[7:0]
0x2C CMPBSET
15:8 CMPSET[11:8]
7:0 CMPCLR[7:0]
0x2E CMPBCLR
15:8 CMPCLR[11:8]
22.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: Enable-protected
Bit 7 6 5 4 3 2 1 0
CLKSEL[1:0] CNTPRES[1:0] SYNCPRES[1:0] ENABLE
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Value Description
0x0 OSC20M
0x1 Reserved
0x2 External clock
0x3 System clock
Value Description
0x0 Division factor 1
0x1 Division factor 4
0x2 Division factor 32
0x3 Reserved
Value Description
0x0 Division factor 1
0x1 Division factor 2
0x2 Division factor 4
0x3 Division factor 8
Value Description
0 The TCD is disabled.
1 The TCD is enabled and running.
22.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
WGMODE[1:0]
Access R/W R/W
Reset 0 0
22.5.3 Control C
Name: CTRLC
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMPDSEL CMPCSEL FIFTY AUPDATE CMPOVR
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
22.5.4 Control D
Name: CTRLD
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMPBVAL[3:0] CMPAVAL[3:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
In One Ramp mode, PWMA will only use A_off and A_on values and PWMB will only use B_off and B_on
values. This is due to possible overlap between the values A_off, A_on, B_off, and B_on.
22.5.5 Control E
Name: CTRLE
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DISEOC SCAPTUREB SCAPTUREA RESTART SYNC SYNCEOC
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Writing to this bit has only effect if there is no ongoing synchronization of a command. See also the
CMDRDY bit in TCDn.STATUS.
Name: EVCTRL
Offset: 0x08 + n*0x01 [n=0..1]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CFG[1:0] EDGE ACTION TRIGEI
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: INTCTRL
Offset: 0x0C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TRIGB TRIGA OVF
Access R/W R/W R/W
Reset 0 0 0
Name: INTFLAGS
Offset: 0x0D
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TRIGB TRIGA OVF
Access R/W R/W R/W
Reset 0 0 0
22.5.9 Status
Name: STATUS
Offset: 0x0E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PWMACTB PWMACTA CMDRDY ENRDY
Access R/W R/W R R
Reset 0 0 0 0
Name: INPUTCTRL
Offset: 0x10 + n*0x01 [n=0..1]
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
INPUTMODE[3:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: FAULTCTRL
Offset: 0x12
Reset: Loaded from fuse
Property: Configuration Change Protection
Bit 7 6 5 4 3 2 1 0
CMPDEN CMPCEN CMPBEN CMPAEN CMPD CMPC CMPB CMPA
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: DLYCTRL
Offset: 0x14
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DLYPRESC[1:0] DLYTRIG[1:0] DLYSEL[1:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0x0 Prescaler division factor 1
0x1 Prescaler division factor 2
0x2 Prescaler division factor 4
0x3 Prescaler division factor 8
Value Description
0x0 Delay functionality not used
0x1 Input blanking enabled
0x2 Event delay enabled
0x3 Reserved
Name: DLYVAL
Offset: 0x15
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DLYVAL[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DITCTRL
Offset: 0x18
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DITHERSEL[1:0]
Access R/W R/W
Reset 0 0
Name: DITVAL
Offset: 0x19
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DITHER[3:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: DBGCTRL
Offset: 0x1E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
FAULTDET DBGRUN
Access R/W R/W
Reset 0 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
22.5.17 Capture x
Name: CAPTURE
Offset: 0x22 + n*0x02 [n=0..1]
Reset: 0x00
Property: -
For capture operation, these registers constitute the second buffer level and access point for the CPU.
The TCDn.CAPTUREx registers are updated with the buffer value when an UPDATE condition occurs.
CAPTURE A register contains the value from the TCD counter when a Trigger A or a software capture A
occurs. CAPTURE B register contains the value from the TCD counter when Trigger B or software
capture B occurs.
The TCD counter value is synchronized to CAPTUREx by either software or an event.
The capture register is blocked for an update of new capture data until TCDn.CAPTURExH is read.
Bit 15 14 13 12 11 10 9 8
CAPTURE[11:8]
Access R R R R
Reset 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CAPTURE[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Name: CMPSET
Offset: 0x28 + n*0x04 [n=0..1]
Reset: 0x00
Property: -
For compare operation, these registers are continuously compared to the counter value. Normally, the
outputs from the comparators are then used for generating waveforms.
Bit 15 14 13 12 11 10 9 8
CMPSET[11:8]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CMPSET[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: CMPCLR
Offset: 0x2A + n*0x04 [n=0..1]
Reset: 0x00
Property: -
For compare operation, these registers are continuously compared to the counter value. Normally, the
outputs from the comparators are then used for generating waveforms.
Bit 15 14 13 12 11 10 9 8
CMPCLR[11:8]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CMPCLR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
23.1 Features
• 16-Bit Resolution
• Selectable Clock Source:
– 32.768 kHz external crystal (XOSC32K)
– External clock
– 32 KHz internal ULP oscillator (OSCULP32K)
– OSCULP32K divided by 32
• Programmable 15-Bit Clock Prescaling
• One Compare Register
• One Period Register
• Clear Timer On Period Overflow
• Optional Interrupt/Event on Overflow and Compare Match
• Periodic Interrupt and Event
23.2 Overview
The RTC peripheral offers two timing functions: the Real-Time Counter (RTC) and a Periodic Interrupt
Timer (PIT).
The PIT functionality can be enabled independently of the RTC functionality.
RTC
CLK_RTC
Related Links
23.2.3.1 Clocks
23.2.3.2 I/O Lines and Connections
23.2.3.5 Debug Operation
23.2.3.3 Interrupts
23.2.3.4 Events
23.2.3.1 Clocks
System clock (CLK_PER) is required to be at least four times faster than the RTC clock (CLK_RTC) for
reading counter value, and this is regardless of the RTC_PRESC setting.
Related Links
10. CLKCTRL - Clock Controller
23.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
23.6 Interrupts
23.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
23.3.1 Initialization
To operate the RTC, the source clock for the RTC counter must be configured before enabling the RTC
peripheral, and the desired actions (interrupt requests, output Events).
Related Links
10. CLKCTRL - Clock Controller
23.4 PIT Functional Description
23.4.1 Initialization
To operate the PIT, follow these steps:
1. Configure the RTC clock CLK_RTC as described in 23.3.1.1 Configure the Clock CLK_RTC.
2. Enable the interrupt by writing a '1' to the Periodic Interrupt bit (PI) in the PIT Interrupt Control
register (RTC.PITINTCTRL).
3. Select the period for the interrupt and enable the PIT by writing the desired value to the PERIOD bit
field and a '1' to the PIT Enable bit (PITEN) in the PIT Control A register (RTC.PITCTRLA).
Note: The RTC peripheral is used internally during device start-up. Always check the Busy bits in the
RTC.STATUS and RTC.PITSTATUS registers, also on initial configuration.
Continuous Operation
After the first interrupt output, the PIT will continue toggling every ½ PIT period, resulting in a full PIT
period signal.
When the RTC and hence the prescaler are already enabled with any
PRESCALER=DIVn, the time between writing PITEN to ‘1’ and the first PIT interrupt can
vary between virtually 0 and a full PIT period of 16 CLK_RTC cycles. The precise delay
between enabling the PIT and its first output is depending on the prescaler’s counting
phase: the depicted first interrupt in the lower figure is produced by writing PITEN to ‘1’ at
any time inside the leading time window.
Figure 23-2. Timing Between PIT Enable and First Interrupt
Enabling PIT with RTC/Prescaler Disabled
CLK_RTC
prescaler
..000000
..000001
..000010
..000100
..000101
..001000
..001001
..001010
..010000
..010001
..010010
..010100
..010101
..100000
..100001
..100010
..100100
..100101
..000011
..000110
..001011
..001100
..001101
..010011
..010110
..011000
..011001
..011010
..100011
..000111
..001110
..010111
..011011
..011100
..011101
..001111
..011110
..011111
counter
value (LSb)
prescaler bit 3
(CYC16)
CLK_RTC
prescaler
..000000
..000001
..000010
..000100
..000101
..001000
..001001
..001010
..010000
..010001
..010010
..010100
..010101
..100000
..100001
..100010
..100100
..100101
..101000
..101001
..101010
..000011
..000110
..001011
..001100
..001101
..010011
..010110
..011000
..011001
..011010
..100011
..100110
..101011
..101100
..101101
..000111
..001110
..010111
..011011
..011100
..011101
..100111
..101110
..001111
..011110
..101111
..011111
counter
value (LSb)
prescaler bit 3
(CYC16)
23.5 Events
The RTC, when enabled, will generate the following output events:
• Overflow (OVF): Generated when the counter has reached its top value and wrapped to zero. The
generated strobe is synchronous with CLK_RTC and lasts one CLK_RTC cycle.
• Compare (CMP): Indicates a match between the counter value and the Compare register. The
generated strobe is synchronous with CLK_RTC and lasts one CLK_RTC cycle.
When enabled, the PIT generates the following 50% duty cycle clock signals on its event outputs:
• Event 0: Clock period = 8192 RTC clock cycles
• Event 1: Clock period = 4096 RTC clock cycles
• Event 2: Clock period = 2048 RTC clock cycles
• Event 3: Clock period = 1024 RTC clock cycles
• Event 4: Clock period = 512 RTC clock cycles
• Event 5: Clock period = 256 RTC clock cycles
• Event 6: Clock period = 128 RTC clock cycles
• Event 7: Clock period = 64 RTC clock cycles
The event users are configured by the Event System (EVSYS).
Related Links
14. EVSYS - Event System
23.6 Interrupts
Table 23-2. Available Interrupt Vectors and Sources
0x02 PIT Periodic Interrupt Timer A time period has passed, as configured in
interrupt RTC_PITCTRLA.PERIOD.
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Related Links
13. CPUINT - CPU Interrupt Controller
23.11.3 INTCTRL
23.11.13 PITINTCTRL
23.11.1 CTRLA
23.8 Synchronization
Both the RTC and the PIT are asynchronous, operating from a different clock source (CLK_RTC)
independently of the main clock (CLK_PER). For Control and Count register updates, it will take a
number of RTC clock and/or peripheral clock cycles before an updated register value is available in a
register or until a configuration change has an effect on the RTC or PIT, respectively. This synchronization
time is described for each register in the Register Description section.
For some RTC registers, a Synchronization Busy flag is available (CMPBUSY, PERBUSY, CNTBUSY,
CTRLABUSY) in the STATUS register (RTC.STATUS).
For the RTC.PITCTRLA register, a Synchronization Busy flag (SYNCBUSY) is available in the PIT
STATUS register (RTC.PITSTATUS).
Check for busy should be performed before writing to the mentioned registers.
Related Links
10. CLKCTRL - Clock Controller
23.11.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTDBY PRESCALER[3:0] RTCEN
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0 RTC disabled in Standby Sleep mode
1 RTC enabled in Standby Sleep mode
Value Description
0 RTC disabled
1 RTC enabled
23.11.2 Status
Name: STATUS
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMPBUSY PERBUSY CNTBUSY CTRLABUSY
Access R R R R
Reset 0 0 0 0
Name: INTCTRL
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP OVF
Access R/W R/W
Reset 0 0
Name: INTFLAGS
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP OVF
Access R R
Reset 0 0
23.11.5 Temporary
Name: TEMP
Offset: 0x4
Reset: 0x00
Property: -
The Temporary register is used by the CPU for single-cycle, 16-bit access to the 16-bit registers of this
peripheral. It can be read and written by software. Refer to 16-bit access in the AVR CPU chapter. There
is one common Temporary register for all the 16-bit registers of this peripheral.
Bit 7 6 5 4 3 2 1 0
TEMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DBGCTRL
Offset: 0x05
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: CLKSEL
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CLKSEL[1:0]
Access R/W R/W
Reset 0 0
23.11.8 Count
Name: CNT
Offset: 0x08
Reset: 0x00
Property: -
The RTC.CNTL and RTC.CNTH register pair represents the 16-bit value, CNT. The low byte [7:0] (suffix
L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Registers in the CPU
chapter.
Due to synchronization between the RTC clock and system clock domains, there is a latency of two RTC
clock cycles from updating the register until this has an effect. Application software needs to check that
the CNTBUSY flag in RTC.STATUS is cleared before writing to this register.
Bit 15 14 13 12 11 10 9 8
CNT[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CNT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
23.11.9 Period
Name: PER
Offset: 0x0A
Reset: 0xFF
Property: -
The RTC.PERL and RTC.PERH register pair represents the 16-bit value, PER. The low byte [7:0] (suffix
L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Registers in the CPU
chapter.
Due to synchronization between the RTC clock and system clock domains, there is a latency of two RTC
clock cycles from updating the register until this has an effect. Application software needs to check that
the PERBUSY flag in RTC.STATUS is cleared before writing to this register.
Bit 15 14 13 12 11 10 9 8
PER[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Bit 7 6 5 4 3 2 1 0
PER[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
23.11.10 Compare
Name: CMP
Offset: 0x0C
Reset: 0x00
Property: -
The RTC.CMPL and RTC.CMPH register pair represents the 16-bit value, CMP. The low byte [7:0] (suffix
L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Registers in the CPU
chapter.
Bit 15 14 13 12 11 10 9 8
CMP[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
CMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PITCTRLA
Offset: 0x10
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PERIOD[3:0] PITEN
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: PITSTATUS
Offset: 0x11
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CTRLBUSY
Access R
Reset 0
Name: PITINTCTRL
Offset: 0x12
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PI
Access R/W
Reset 0
Value Description
0 The periodic interrupt is disabled
1 The periodic interrupt is enabled
Name: PITINTFLAGS
Offset: 0x13
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PI
Access R
Reset 0
Name: PITDBGCTRL
Offset: 0x15
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
24.1 Features
• Full-Duplex or One-Wire Half-Duplex Operation
• Asynchronous or Synchronous Operation:
– Synchronous clock rates up to 1/2 of the device clock frequency
– Synchronous Slave clock rates up to 1/4 of the device clock frequency
– Asynchronous clock rates up to 1/8 of the device clock frequency
• Supports Serial Frames with:
– 5, 6, 7, 8, or 9 data bits
– Optionally even and odd parity bits
– 1 or 2 Stop bits
• Fractional Baud Rate Generator:
– Can generate desired baud rate from any system clock frequency
– No need for an external oscillator with certain frequencies
• Built-In Error Detection and Correction Schemes:
– Odd or even parity generation and parity check
– Data overrun and framing error detection
– Noise filtering includes false Start bit detection and digital low-pass filter
• Separate Interrupts for:
– Transmit complete
– Transmit Data register empty
– Receive complete
• Multiprocessor Communication mode:
– Addressing scheme to address specific devices on a multi-device bus
– Enable unaddressed devices to automatically ignore all frames
• Start Frame Detection in UART mode
• Master SPI mode:
– Double-buffered operation
– Configurable data order
– Operation up to 1/2 of the peripheral clock frequency
®
• IRCOM Module for IrDA Compliant Pulse Modulation/Demodulation
• LIN Slave Support:
– Auto-baud and Break character detection
• RS-485 Support
24.2 Overview
The Universal Synchronous and Asynchronous serial Receiver and Transmitter (USART) peripheral is a
fast and flexible serial communication module. The USART supports full duplex communication,
asynchronous and synchronous operation and one-wire configurations. The USART can be set in SPI
Master mode and used for SPI communication.
The USART uses three communication lines for data transfer:
• RxD for receiving
• TxD for transmitting
• XCK for the transmission clock in synchronous operation
Communication is frame based, and the frame format can be customized to support a wide range of
standards. One frame can be directly followed by a new frame, or the communication line can return to
the idle (high) state. A serial frame consists of:
• 1 Start bit
• 5, 6, 7, 8, or 9 data bits (MSB or LSB first)
• Parity bit: Even, odd, or none
• 1 or 2 Stop bits
The USART is buffered in both directions, enabling continued data transmission without any delay
between frames. Separate interrupts for receive and transmit completion allow fully interrupt driven
communication. Frame error and buffer overflow are detected in hardware and indicated with separate
status flags. Even or odd parity generation and parity check can also be enabled.
The main functional blocks are the clock generator, the transmitter, and the receiver:
• The clock generator includes a fractional Baud Rate Generator that is able to generate a wide
range of USART baud rates from any system clock frequencies. This removes the need to use an
oscillator with a specific frequency to achieve a required baud rate. It also supports external clock
input in synchronous slave operation.
• The transmitter consists of a single write buffer (DATA), a shift register, and a parity generator. The
write buffer allows continuous data transmission without any delay between frames.
• The receiver consists of a two-level receive buffer (DATA) and a Shift register. Data and clock
recovery units ensure robust synchronization and noise filtering during asynchronous data
reception. It includes frame error, buffer overflow, and parity error detection.
When the USART is set in one-wire mode, the transmitter and the receiver share the same RxD I/O pin.
When the USART is set in Master SPI mode, all USART-specific logic is disabled, leaving the transmit
and receive buffers, Shift registers, and Baud Rate Generator enabled. Pin control and interrupt
generation are identical in both modes. The registers are used in both modes, but their functionality
differs for some control settings.
An IRCOM module can be enabled for one USART to support IrDA 1.4 physical compliant pulse
modulation and demodulation for baud rates up to 115.2 kbps.
The USART can be linked to the Configurable Custom Logic unit (CCL). When used with the CCL, the
TxD/RxD data can be encoded/decoded before the signal is fed into the USART receiver or after the
signal is output from the transmitter when the USART is connected to CCL LUT outputs.
This device provides one instance of the USART peripheral, USART0.
Related Links
5. I/O Multiplexing and Considerations
Related Links
24.2.2.5 Debug Operation
24.2.2.1 Clocks
24.2.2.2 I/O Lines and Connections
24.2.2.3 Interrupts
24.2.2.4 Events
24.2.2.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
24.2.2.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
24.2.2.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
Transmitter
TX
TXDATA Control XDIR
Parity
Generator
Pin
Transmit Shift Register TxD
Control
Receiver
Clock RX
Recovery Control
Data Pin
Receive Shift Register RxD
Recovery Control
Parity
RXDATA Buffer
Checker
RXDATA
24.3.1 Initialization
For setting the USART in Full-Duplex mode, the following initialization sequence is recommended:
1. Set the TxD pin value high, and optionally set the XCK pin low (OUT[n] in PORTx.OUT).
2. Set the TxD and optionally the XCK pin as an output (DIR[n] in PORTx.DIR).
3. Set the baud rate (in the USARTn.BAUD register) and frame format.
4. Set the mode of operation (enables XCK pin output in Synchronous mode).
5. Enable the transmitter or the receiver, depending on the usage.
For interrupt-driven USART operation, global interrupts should be disabled during the initialization.
Before doing a re-initialization with a changed baud rate or frame format, be sure that there are no
ongoing transmissions while the registers are changed.
For setting the USART in One-Wire mode, the following initialization sequence is recommended:
1. Set the TxD/RxD pin value high, and optionally set the XCK pin low.
2. Optionally, write the ODME bit in the USARTn.CTRLB register to '1' for Wired-AND functionality.
3. Set the TxD/RxD and optionally the XCK pin as an output.
4. Select the baud rate and frame format.
5. Select the mode of operation (enables XCK pin output in Synchronous mode).
6. Enable the transmitter or the receiver, depending on the usage.
For interrupt-driven USART operation, global interrupts should be disabled during the initialization.
Before doing a re-initialization with a changed baud rate or frame format, be sure that there are no
ongoing transmissions while the registers are changed.
24.3.2 Operation
BAUD
RXMODE
fBAUD /2 /4 /2
BAUD Rate 0
Generator 0
1 txclk
CLK_PER
1
DDR_XCK
PORT_INV
Sync Edge 0 CMODE[0]
xcki Register Detector
XCK
1
Pin
xcko 1
rxclk
DDR_XCK 0
register values below 64 are not supported, as the integer part needs to be at least 1. The integer part
valid range is therefore 64 to 65535.
In Synchronous mode, only the 10-bit integer part of the BAUD register, i.e. BAUD[15:6], determine the
baud rate. The fractional part must be written to zero.
The following table lists equations for translating between BAUD register values and baud rates. The
equations take BAUD register bit width and fractional interpretation into consideration. The BAUD register
values calculated with these equations can be written directly to the BAUD register without any additional
scaling. Resulting rounding errors will contribute to baud rate frequency errors.
Table 24-2. Equations for Calculating Baud Rate Register Setting
Operating Mode Conditions Baud Rate (�����, Bits Per USART.BAUD Register Value
Seconds) Calculation
INVEN = 1 XCK
RxD / TxD
Sample
INVEN = 0 XCK
RxD / TxD
Sample
The I/O pin can be inverted by writing a '1' to the Inverted I/O Enable bit (INVEN) in the Pin n Control
register of the port peripheral (PORTx.PINnCTRL). Using the inverted I/O setting for the corresponding
XCK port pin, the XCK clock edges used for data sampling and data change can be selected. If inverted
I/O is disabled (INVEN=0), data will be changed at the rising XCK clock edge and sampled at the falling
XCK clock edge. If inverted I/O is enabled (INVEN=1), data will be changed at the falling XCK clock edge
and sampled at the rising XCK clock edge.
24.3.2.1.5 Master SPI Mode Clock Generation
For Master SPI mode operation, only internal clock generation is supported. This is identical to the
USART Synchronous Master mode, and the baud rate or BAUD setting is calculated using the same
equations (see Table 24-2).
There are four combinations of the SPI clock (SCK) phase and polarity with respect to the serial data, and
these are determined by the Clock Phase bit (UCPHA) in the Control C register (USARTn.CTRLC) and
the Inverted I/O Enable bit (INVEN) in the Pin n Control register of the port peripheral
(PORTx.PINnCTRL). The data transfer timing diagrams are shown in Figure 24-4.
Data bits are shifted out and latched in on opposite edges of the XCK signal, ensuring sufficient time for
data signals to stabilize. The settings are summarized in the table below. Changing the setting of any of
these bits during transmission will corrupt both the receiver and transmitter.
Table 24-3. Functionality of INVEN in PORTx.PINnCTRL and UCPHA in USARTn.CTRLC
The leading edge is the first clock edge of a clock cycle. The trailing edge is the last clock edge of a clock
cycle.
XCK XCK
Data setup (TXD) Data setup (TXD)
Data sample (RXD) Data sample (RXD)
XCK XCK
Data setup (TXD) Data setup (TXD)
Data sample (RXD) Data sample (RXD)
Related Links
24.5.9 CTRLC
Symbol Meaning
St Start bit, always low
(n) Data bits (0 to 8)
P Parity bit, may be odd or even
Sp Stop bit, always high
IDLE No transfer on the communication line (RxD or TxD). The IDLE state is always high
24.3.2.2.1 Parity
Even or odd parity can be selected for error checking by writing the Parity Mode bits (PMODE) in the
Control C register (USARTn.CTRLC). If even parity is selected, the parity bit is set to ‘1’ if the number of
logical ‘1’ data bits is odd (making the total number of logical ‘1’ even). If odd parity is selected, the parity
bit is set to ‘1’ if the number of logical ‘1’ data bits is even (making the total number of ‘1’s odd).
When enabled, the parity checker calculates the parity of the data bits in incoming frames and compares
the result with the parity bit of the corresponding frame. If a parity error is detected, the parity error flag is
set.
24.3.2.2.2 SPI Frame Formats
The serial frame in SPI mode is defined to be one character of eight data bits. The USART in master SPI
mode has two valid frame formats:
• 8-bit data, MSb first
• 8-bit data, LSb first
The data order is selected by writing to the Data Order bit (UDORD) in the Control C register
(USARTn.CTRLC).
After a complete frame is transmitted, a new frame can directly follow it, or the communication line can
return to the idle (high) state.
24.3.2.3 Data Transmission - USART Transmitter
When the transmitter has been enabled, the normal port operation of the TxD pin is overridden by the
USART and given the function as the transmitter's serial output. The direction of the pin n must be
configured as output by writing the Direction register for the corresponding port (PORTx.DIR[n]). If the
USART is configured for one-wire operation, the USART will automatically override the RxD/TxD pin to
output, when the transmitter is enabled.
Related Links
15. PORTMUX - Port Multiplexer
16. PORT - I/O Pin Configuration
transmitted. When the transmitter is disabled, it will no longer override the TxDn pin, and the pin direction
is set as input automatically by hardware, even if it was configured as output by the user.
24.3.2.4 Data Reception - USART Receiver
When the receiver is enabled, the RxD pin functions as the receiver's serial input. The direction of the pin
n must be set as an input in the Direction register of the Port (PORTx.DIR[n]=0), which is the default pin
setting.
24.3.2.4.1 Receiving Frames
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 XCK 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
and 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 complete interrupt flag (RXCIF in USARTn.STATUS) is set,
and the optional interrupt is generated.
The receiver buffer can be read by reading RXDATA, comprising of DATA[7:0] in USARTn.RXDATAL, and
DATA[8] in USARTn.RXDATAH. RXDATA should not be read unless the Receive Complete Interrupt Flag
(RXCIF in USARTn.STATUS) is set. When using frames with fewer than eight bits, the unused Most
Significant bits are read as zero. If 9-bit characters are used, the ninth bit (DATA[8] in
USARTn.RXDATAH) must be read before the low byte (DATA[7.0] in USARTn.RXDATAL).
24.3.2.4.2 Receiver Error Flags
The USART receiver has three error flags in the Receiver Data Register High Byte register
(USARTn.RXDATAH):
• Frame Error (FERR)
• Buffer Overflow (BUFOVF)
• Parity Error (PERR)
The error flags are located in the receive FIFO buffer together with their corresponding frame. Due to the
buffering of the error flags, the USARTn.RXDATAH must be read before the USARTn.RXDATAL, since
reading the USARTn.RXDATAL changes the FIFO buffer.
24.3.2.4.3 Parity Checker
When enabled, the parity checker calculates the parity of the data bits in incoming frames and compares
the result with the parity bit of the corresponding frame. If a parity error is detected, the Parity Error flag
(PERR in USARTn.RXDATAH) is set.
If USART LIN mode is enabled (by writing RXMODE to '1' in USARTn.CTRLB), a parity check is only
performed on the protected identifier field. A parity error is detected if one of the equations below is not
true, which sets PERR in USARTn.RXDATAH.
�0 = ��0 XOR ��1 XOR ��2 XOR ��4
�1 = NOT ��1 XOR ��3 XOR ��4 XOR ��5
Figure 24-6. Protected Identifier Field and Mapping of Identifier and Parity Bits
Protected identifier field
Sample
(RXMODE = 0x0) 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3
Sample
(RXMODE = 0x1) 0 1 2 3 4 5 6 7 8 1 2
When the clock recovery logic detects a high-to-low (i.e., idle-to-start) transition on the RxD line, the Start
bit detection sequence is initiated. Sample 1 denotes the first zero-sample, as shown in the figure. The
clock recovery logic then uses three subsequent samples (samples 8, 9, and 10 in Normal mode,
samples 4, 5, and 6 in Double-Speed mode) to decide if a valid Start bit is received:
• If two or three samples have a low level, the Start bit is accepted. The clock recovery unit is
synchronized, and the data recovery can begin.
• If two or three samples have a high level, the Start bit is rejected as a noise spike, and the receiver
looks for the next high-to-low transition.
The process is repeated for each Start bit.
Asynchronous Data Recovery
The data recovery unit uses sixteen samples in Normal mode and eight samples in Double-Speed mode
for each bit. The following figure shows the sampling process of data and parity bits.
RxD BIT n
Sample
(CLK2X = 0) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
Sample
(CLK2X = 1) 1 2 3 4 5 6 7 8 1
As for Start bit detection, an identical majority voting technique is used on the three center samples for
deciding of the logic level of the received bit. The process is repeated for each bit until a complete frame
is received. It includes the first Stop bit but excludes additional ones. If the sampled Stop bit is a '0' value,
the Frame Error (FERR in USARTn.RXDATAH) flag will be set. The next figure shows the sampling of the
Stop bit in relation to the earliest possible beginning of the next frame's Start bit.
Figure 24-9. Stop Bit and Next Start Bit Sampling
Sample
(CLK2X = 0) 1 2 3 4 5 6 7 8 9 10 0/1 0/1 0/1
Sample
(CLK2X = 1) 1 2 3 4 5 6 0/1
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 the point marked
(A) in Stop Bit Sampling and Next Start Bit Sampling. For Double-Speed mode, the first low level must be
delayed to point (B). Point (C) marks a Stop bit of full length at the nominal baud rate. The early Start bit
detection influences the operational range of the receiver.
24.3.2.4.7 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 an external transmitter is sending using bit rates that are too fast or
too slow, or if the internally generated baud rate of the receiver does not match the external source’s 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.
16 � + 1 16 � + 2
����� = ����� =
16 � + 1 + 6 16 � + 1 + 8
Symbol Meaning
D Sum of character size and parity size (D = 5 to 10 bit)
Rslow The ratio of the slowest incoming data rate that can be accepted in relation to the
receiver baud rate
Rfast The ratio of the fastest incoming data rate that can be accepted in relation to the
receiver baud rate
The following tables list the maximum receiver baud rate error that can be tolerated. Normal Speed mode
has higher toleration of baud rate variations.
Table 24-6. Recommended Maximum Receiver Baud Rate Error for Normal Speed Mode (CLK2X =
0)
D #(Data + Parity Bit) Rslow [%] Rfast [%] Maximum Total Error [%] Receiver Max. Receiver
Error [%]
5 93.20 106.67 +6.67/-6.80 ±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
Table 24-7. Recommended Maximum Receiver Baud Rate Error for Double Speed Mode (CLK2X =
1)
D #(Data + Parity Bit) Rslow [%] Rfast [%] Maximum Total Error [%] Receiver Max. 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 were made under the assumption that
the receiver and transmitter equally divide the maximum total error.
USARTn.DATA are moved from the transmit buffer to the Shift register when the Shift register is ready to
send a new frame.
The transmitter and receiver interrupt flags and corresponding USART interrupts used in Master SPI
mode are identical in function to their use in normal USART operation. The receiver error status flags are
not in use and are always read as zero.
Disabling of the USART transmitter or receiver in Master SPI mode is identical to their disabling in normal
USART operation.
Related Links
24.5.9 CTRLC
Related Links
24.5.9 CTRLC
USART
RxD
XDIR
Differential
TxD
bus
The XDIR pin goes high one baud clock cycle in advance of data being shifted out, to allow some guard
time to enable the external line driver. The XDIR pin will remain high for the complete frame including
Stop bit(s).
Figure 24-11. XDIR Drive Timing
TxD St 0 1 2 3 4 5 6 7 Sp1
XDIR
Guard
Stop
time
Related Links
24.2.1 Signal Description
Note:
1. The SLEEP instruction will not shut down the oscillator if there is ongoing communication.
Tbit
8 Tbit
After a break field is detected and the Start bit of the sync field is detected, a counter is started. The
counter is then incremented for the next eight Tbit of the sync field. At the end of these 8-bit times, the
counter is stopped. At this moment, the ten Most Significant bits of the counter (value divided by 64) gives
the new clock divider and the six Least Significant bits of this value (the remainder) gives the new
fractional part. When the sync field has been received and all bits are found valid, the clock divider and
the fractional part are updated in the Baud Rate Generator register (USARTn.BAUD). After the break and
sync fields, n characters of data can be received.
When the USART receive mode is set to GENAUTO mode, a generic Auto-baud mode is enabled. In this
mode, there are no checks of the sync character to equal 0x55. After detection of a break field, the
USART expects the next character to be a sync field, counting eight low and high bit times. If the
measured sync field results in a valid BAUD value (0x0064-0xffff), the BAUD register is updated. Setting
the Wait for Break bit (WFB in USARTn.STATUS) before receiving the next break character, the next
negative plus positive edge of RxD line is detected as a break. This makes it possible to set an arbitrary
new baud rate without knowing the current baud rate.
For the reception, a fixed programmable minimum high-level pulse-width for the pulse to be decoded as a
logical ‘0’ is used. Shorter pulses will then be discarded, and the bit will be decoded to logical ‘1’ as if no
pulse was received.
24.3.2.11.2 Block Diagram
Figure 24-13. Block Diagram
Encoded RXD
Pulse
Decoding
Decoded RXD
USART RXD
Decoded RXD TXD
Pulse
Encoding
Encoded RXD
24.3.3 Events
The USART can accept the following input events:
• IREI - IrDA Event Input
The event is enabled by writing a '1' to the IrDA Event Input bit (IREI) in the Event Control register
(USART.EVCTRL).
Related Links
14. EVSYS - Event System
24.5.12 EVCTRL
24.3.4 Interrupts
Table 24-10. Available Interrupt Vectors and Sources
0x02 DRE Data Register Empty The transmit buffer is empty/ready to receive new data
Interrupt (DREIE).
0x04 TXC Transmit Complete The entire frame in the Transmit Shift register has been shifted
Interrupt out and there are no new data in the transmit buffer (TXCIE).
When an interrupt condition occurs, the corresponding interrupt flag is set in the STATUS register
(USART.STATUS).
An interrupt source is enabled or disabled by writing to the corresponding bit in the Control A register
(USART.CTRLA).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the USART.STATUS
register for details on how to clear interrupt flags.
Related Links
13. CPUINT - CPU Interrupt Controller
24.5.5 STATUS
24.5.6 CTRLA
Name: RXDATAL
Offset: 0x00
Reset: 0x00
Property: R
Reading the USARTn.RXDATAL Register will return the contents of the Receive Data Buffer register
(RXB).
The receive buffer consists of a two-level FIFO. The FIFO and the corresponding flags in the high byte of
RXDATA will change state whenever the receive buffer is accessed (read). If CHSIZE in USARTn.CTRLC
is set to 9BIT Low byte first, read USARTn.RXDATAL before USARTn.RXDATAH. Otherwise, always read
USARTn.RXDATAH before USARTn.RXDATAL in order to get the correct flags.
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Name: RXDATAH
Offset: 0x01
Reset: 0x00
Property: -
Reading the USARTn.RXDATAH register location will return the contents of the ninth DATA bit plus Status
bits.
The receive buffer consists of a two-level FIFO. The FIFO and the corresponding flags in the high byte of
USARTn.RXDATAH will change state whenever the receive buffer is accessed (read). If CHSIZE in
USARTn.CTRLC is set to 9BIT Low byte first, read USARTn.RXDATAL before USARTn.RXDATAH.
Otherwise, always read USARTn.RXDATAH before USARTn.RXDATAL in order to get the correct flags.
Bit 7 6 5 4 3 2 1 0
RXCIF BUFOVF FERR PERR DATA[8]
Access R R R R R
Reset 0 0 0 0 0
Name: TXDATAL
Offset: 0x02
Reset: 0x00
Property: R/W
The Transmit Data Buffer (TXB) register will be the destination for data written to the USARTn.TXDATAL
register location.
For 5-, 6-, or 7-bit characters the upper unused bits will be ignored by the transmitter and set to '0' by the
receiver.
The transmit buffer can only be written when the DREIF flag in the USARTn.STATUS register is set. Data
written to DATA when the DREIF flag is not set will be ignored by the USART transmitter. 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. The data is then transmitted on the TxD pin.
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TXDATAH
Offset: 0x03
Reset: 0x00
Property: -
USARTn.TXDATAH holds the ninth data bit in the character to be transmitted when operating with serial
frames with nine data bits. When used this bit must be written before writing to USARTn.TXDATAL except
if CHSIZE in USARTn.CTRLC is set to 9BIT Low byte first where USARTn.TXDATAL should be written
first.
This bit is unused in Master SPI mode of operation.
Bit 7 6 5 4 3 2 1 0
DATA[8]
Access W
Reset 0
Name: STATUS
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXCIF TXCIF DREIF RXSIF ISFIF BDF WFB
Access R R/W R R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
24.5.6 Control A
Name: CTRLA
Offset: 0x05
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXCIE TXCIE DREIE RXSIE LBME ABEIE RS485[1:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
24.5.7 Control B
Name: CTRLB
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXEN TXEN SFDEN ODME RXMODE[1:0] MPCM
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: CTRLC
Offset: 0x07
Reset: 0x03
Property: -
This register description is valid for all modes except Master SPI mode. When the USART
Communication mode bits (CMODE) in this register are written to 'MSPI', see Control C - Master SPI
Mode for the correct description.
Bit 7 6 5 4 3 2 1 0
CMODE[1:0] PMODE[1:0] SBMODE CHSIZE[2:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 1 1
Value Description
0 1 Stop bit
1 2 Stop bits
Name: CTRLC
Offset: 0x07
Reset: 0x00
Property: -
This register description is valid only when the USART is in Master SPI mode (CMODE written to MSPI).
For other CMODE values, see Control C - Async Mode.
See 24.3.2.5 USART in Master SPI mode for a full description of the Master SPI mode operation.
Bit 7 6 5 4 3 2 1 0
CMODE[1:0] UDORD UCPHA
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 MSB of the data word is transmitted first
1 LSB of the data word is transmitted first
Name: BAUD
Offset: 0x08
Reset: 0x00
Property: -
The USARTn.BAUDL and USARTn.BAUDH register pair represents the 16-bit value, USARTn.BAUD.
The low byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be
accessed at offset + 0x01.
Ongoing transmissions of the transmitter and receiver will be corrupted if the baud rate is changed.
Writing this register will trigger an immediate update of the baud rate prescaler. For more information on
how to set the baud rate, see Table 24-2.
Bit 15 14 13 12 11 10 9 8
BAUD[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
BAUD[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DBGCTRL
Offset: 0x0B
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: EVCTRL
Offset: 0x0C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
IREI
Access R/W
Reset 0
Name: TXPLCTRL
Offset: 0x0D
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TXPL[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: RXPLCTRL
Offset: 0x0E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXPL[6:0]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
25.1 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
25.2 Overview
The Serial Peripheral Interface (SPI) is a high-speed synchronous data transfer interface using three or
four pins. It allows full-duplex communication between an AVR device and peripheral devices or between
several microcontrollers. The SPI peripheral can be configured as either master or slave. The master
initiates and controls all data transactions.
The interconnection between master and slave devices with SPI is shown in the block diagram. The
system consists of two shift registers and a master clock generator. The SPI master initiates the
communication cycle by pulling the desired slave's slave select (SS) signal low. Master and slave prepare
the data to be sent to their respective Shift registers, and the master generates the required clock pulses
on the SCK line to exchange data. Data is always shifted from master to slave on the master output,
slave input (MOSI) line, and from slave to master on the master input, slave output (MISO) line.
This device provides one instance of the SPI peripheral, SPI0.
Related Links
25.2.1 Block Diagram
The SPI is built around an 8-bit Shift register that will shift data out and in at the same time. The Transmit
Data register and the Receive Data register are not physical registers but are mapped to other registers
when written or read: Writing the Transmit Data register (SPIn.DATA) will write the Shift register in Normal
mode and the Transmit Buffer register in Buffer mode. Reading the Receive Data register (SPIn.DATA)
will read the First Receive Buffer register in normal mode and the Second Receive Data register in Buffer
mode.
In Master mode, the SPI has a clock generator to generate the SCK clock. In Slave mode, the received
SCK clock is synchronized and sampled to trigger the shifting of data in the Shift register.
When the SPI module is enabled, the data direction of the MOSI, MISO, SCK, and SS pins is overridden
according to Table 25-1.
The data direction of the pins with "User defined" pin configuration is not controlled by the SPI: The data
direction is controlled by the application software configuring the port peripheral. If these pins are
configured with data direction as input, they can be used as regular I/O pin inputs. If these pins are
configured with data direction as output, their output value is controlled by the SPI. The MISO pin has a
special behavior: When the SPI is in Slave mode and the MISO pin is configured as an output, the SS pin
controls the output buffer of the pin: If SS is low, the output buffer drives the pin, if SS is high, the pin is
tri-stated.
The data direction of the pins with "Input" pin configuration is controlled by the SPI hardware.
Related Links
5. I/O Multiplexing and Considerations
Related Links
25.2.3.2 I/O Lines and Connections
25.2.3.5 Debug Operation
25.2.3.3 Interrupts
25.2.3.1 Clocks
25.2.3.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
25.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
25.3.3 Interrupts
25.2.3.4 Events
Not applicable.
25.3.1 Initialization
Initialize the SPI to a basic functional state by following these steps:
1. Configure the SS pin in the port peripheral.
2. Select SPI Master/Slave operation by writing the Master/Slave Select bit (MASTER) in the Control
A register (SPIn.CTRLA).
3. In Master mode, select the clock speed by writing the Prescaler bits (PRESC) and the Clock
Double bit (CLK2X) in SPIn.CTRLA.
4. Optional: Select the Data Transfer mode by writing to the MODE bits in the Control B register
(SPIn.CTRLB).
5. Optional: Write the Data Order bit (DORD) in SPIn.CTRLA.
6. Optional: Setup Buffer mode by writing BUFEN and BUFWR bits in the Control B register
(SPIn.CTRLB).
7. Optional: To disable the multi-master support in Master mode, write ‘1’ to the Slave Select Disable
bit (SSD) in SPIn.CTRLB.
8. Enable the SPI by writing a ‘1’ to the ENABLE bit in SPIn.CTRLA.
Related Links
5. I/O Multiplexing and Considerations
16. PORT - I/O Pin Configuration
25.2.2 Signal Description
25.3.2 Operation
Note:
If the AVR device is configured for Master mode and it cannot be ensured that the SS pin will stay high
between two transmissions, the status of the Master bit (MASTER in SPIn.CTRLA) has to be checked
before a new byte is written. After the Master bit has been cleared by a low level on the SS line, it must
be set by the application to re-enable the SPI Master mode.
Note:
In Slave mode, the SPI state machine will be reset when the SS pin is brought high. If the SS is brought
high during a transmission, the SPI will immediately stop sending and receiving - both data received and
data sent must be considered as lost. As the SS pin is used to signal the start and end of a transfer, it is
useful for achieving packet/byte synchronization, and keeping the Slave bit counter synchronized with the
master clock generator.
25.3.2.2.2 Normal Mode
In Normal mode, the SPI peripheral will remain idle as long as the SS pin is driven high. In this state, the
software may update the contents of the SPIn.DATA register, but the data will not be shifted out by
incoming clock pulses on the SCK pin until the SS pin is driven low. If SS is driven low, the slave will start
to shift out data on the first SCK clock pulse. When one byte has been completely shifted, the SPI
Interrupt flag (IF) in SPIn.INTFLAGS is set.
The user application may continue placing new data to be sent into the SPIn.DATA register before
reading the incoming data. New bytes to be sent cannot be written to SPIn.DATA before the entire
transfer has completed. A premature write will be ignored, and the hardware will set the Write Collision
Flag (WRCOL in SPIn.INTFLAGS).
When SS is driven high, the SPI logic is halted, and the SPI slave will not receive any new data. Any
partially received packet in the shift register will be lost.
Figure 25-2. SPI Timing Diagram in Normal Mode (Buffer Mode Not Enabled)
SS
SCK
Write DATA
WRCOL
IF
Note: In Slave mode, the SPI logic will be Reset once the SS pin is brought high. If the SS pin is brought
high during a transmission, the SPI will stop sending and receiving immediately and both data received
and data sent must be considered as lost.
As shown in the preceding table , the SS pin in Slave mode is always an input pin. A low level activates
the SPI of the device while a high level causes its deactivation. A Single Master Multiple Slave System
with an AVR configured in Master mode and SS configured as output pin is shown in the following figure.
The amount of slaves that can be connected to this AVR is only limited by the number of I/O pins to
generate the slave select signals.
The ability to connect several devices to the same SPI bus is based on the fact that only one master and
only one slave is active at the same time. The MISO, MOSI, and SCK lines of all the other slaves are tri-
stated (configured as input pins of a high impedance with no pullup resistors enabled). A false
implementation (for example, if two slaves are activated at the same time) can cause a driver contention
which can lead to a CMOS latch-up state and must be avoided. Resistances of 1 to 10Ω in series with the
pins of the SPI can be used to prevent the system from latching up. However this affects the maximum
usable data rate, depending on the loading capacitance on the SPI pins.
Unidirectional SPI devices require just the clock line and one of the data lines. The device can use MISO
line or the MOSI line depending on its purpose.
25.3.2.2.4 Buffer Mode
To avoid data collisions, the SPI peripheral can be configured in buffered mode by writing a ‘1’ to the
Buffer Mode Enable bit in the Control B register (BUFEN in SPIn.CTRLB). In this mode, the SPI has
additional interrupt flags and extra buffers. The extra buffers are shown in Figure 25-1. There are two
different modes for the Buffer mode, selected with the Buffer mode Wait for Receive bit (BUFWR). The
two different modes are described below with timing diagrams.
Figure 25-4. SPI Timing Diagram in Buffer Mode with BUFWR in SPIn.CTRLB Written to ‘0’
SS
SCK
Write DATA
DREIF
TXCIF
RXCIF
Figure 25-5. SPI Timing Diagram in Buffer Mode with CTRLB.BUFWR Written to ‘1’
SS
SCK
Write DATA
DREIF
TXCIF
RXCIF
Cycle # 1 2 3 4 5 6 7 8
SPI Mode 0 SS
SCK
sampling
MISO 1 2 3 4 5 6 7 8
MOSI 1 2 3 4 5 6 7 8
Cycle # 1 2 3 4 5 6 7 8
SPI Mode 1
SS
SCK
sampling
MISO 1 2 3 4 5 6 7 8
MOSI 1 2 3 4 5 6 7 8
Cycle # 1 2 3 4 5 6 7 8
SPI Mode 2
SS
SCK
sampling
MISO 1 2 3 4 5 6 7 8
MOSI 1 2 3 4 5 6 7 8
Cycle # 1 2 3 4 5 6 7 8
SPI Mode 3
SS
SCK
sampling
MISO 1 2 3 4 5 6 7 8
MOSI 1 2 3 4 5 6 7 8
25.3.3 Interrupts
Table 25-6. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
Related Links
8.7.3 SREG
13. CPUINT - CPU Interrupt Controller
25.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DORD MASTER CLK2X PRESC[1:0] ENABLE
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0 The MSB of the data word is transmitted first
1 The LSB of the data word is transmitted first
Value Description
0 SPI Slave mode selected
1 SPI Master mode selected
Value Description
0 SPI speed (SCK frequency) is not doubled
1 SPI speed (SCK frequency) is doubled in Master mode
Value Description
0 SPI is disabled
1 SPI is enabled
25.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
BUFEN BUFWR SSD MODE[1:0]
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Value Description
0 One SPI transfer must be completed before the data is copied into the Shift register.
1 When writing to the data register when the SPI is enabled and SS is high, the first write will
go directly to the Shift register.
Value Description
0 Enable the Slave Select line when operating as SPI Master
1 Disable the Slave Select line when operating as SPI Master
Related Links
25.3.2.3 Data Modes
Name: INTCTRL
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXCIE TXCIE DREIE SSIE IE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: INTFLAGS
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXCIF/IF TXCIF/WRCOL DREIF SSIF BUFOVF
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Disable bit (SSD) is not ‘1’. The flag is cleared by writing a ‘1’ to its bit location. In the Non-Buffer mode,
this bit is always ‘0’.
25.5.5 Data
Name: DATA
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
26.1 Features
• Bidirectional, Two-Wire Communication Interface
• Philips I2C compatible:
– Standard mode (Sm/100 kHz with slew-rate limited output)
– Fast mode (Fm/400 kHz with slew-rate limited output)
– Fast mode plus (Fm+/1 MHz with ×10 output drive strength)
• System Management Bus (SMBus) Compatible (100 kHz with Slew-Rate Limited Output):
– Support arbitration between start/repeated start and data bit
– Slave arbitration allows support for the Address Resolution Protocol (ARP)
– Configurable SMBus Layer 1 time-outs in hardware
– Independent time-outs for Dual mode
• Independent Master and Slave Operation:
– Combined (same pins) or Dual mode (separate pins)
– Single or multi-master bus operation with full arbitration support
• Flexible Slave Address Match Hardware Operating in All Sleep Modes, Including Power-Down:
– 7-bit and general call address recognition
– 10-bit addressing support in collaboration with software
– Address mask register allows address range masking - alternatively, it can be used as a
secondary address match
– Optional software address recognition for an unlimited number of addresses
• Input Filter For Bus Noise Suppression
26.2 Overview
The Two-Wire Interface (TWI) peripheral is a bidirectional, two-wire communication interface. It is I2C and
System Management Bus (SMBus) compatible. The only external hardware needed to implement the bus
is one pull-up resistor on each bus line.
Any device connected to the bus must act as a master or a slave. The master initiates a data transaction
by addressing a slave on the bus and telling whether it wants to transmit or receive data. One bus can
have many slaves and one or several masters that can take control of the bus. An arbitration process
handles priority if more than one master tries to transmit data at the same time. Mechanisms for resolving
bus contention are inherent in the protocol.
The TWI peripheral supports master and slave functionality. The master and slave functionality are
separated from each other and can be enabled and configured separately. The master module supports
multi-master bus operation and arbitration. It contains the Baud Rate Generator. All 100 kHz, 400 kHz,
and 1 MHz bus frequencies are supported. Quick command and Smart mode can be enabled to auto-
trigger operations and reduce software complexity.
The slave module implements 7-bit address match and general address call recognition in hardware. 10-
bit addressing is supported. A dedicated Address Mask register can act as a Second Address match
register or as a register for address range masking. The slave continues to operate in all Sleep modes,
including Power-Down mode. This enables the slave to wake-up the device from all Sleep modes on TWI
address match. It is possible to disable the address matching to let this be handled in software instead.
The TWI peripheral will detect Start and Stop conditions, bus collisions, and bus errors. Arbitration lost,
errors, collision, and clock hold on the bus are also detected and indicated in separate status flags
available in both Master and Slave modes.
This device provides one instance of the TWI peripheral; TWI0.
RxDATA RxDATA ==
Related Links
5. I/O Multiplexing and Considerations
Related Links
26.2.3.1 Clocks
26.2.3.5 Debug Operation
26.2.3.2 I/O Lines and Connections
26.2.3.3 Interrupts
26.2.3.1 Clocks
This peripheral requires the system clock (CLK_PER). The relationship between CLK_PER and the TWI
bus clock (SCL) is explained in the TWI.MBAUD register.
Related Links
10. CLKCTRL - Clock Controller
26.5.6 MBAUD
26.3.1 Initialization
Before enabling the master or the slave unit, ensure that the correct settings for SDASETUP, SDAHOLD,
and, if used, Fast-mode plus (FMPEN) are stored in TWI.CTRLA. If alternate pins are to be used for the
slave, this must be specified in the TWIn.DUALCTRL register as well. Note that for dual mode the master
enables the primary SCL/SDA pins, while the ENABLE bit in TWIn.DUALCTRL enables the secondary
pins.
Master Operation
It is recommended to write to the Master Baud Rate register (TWIn.BAUD) before enabling the TWI
master since TIMEOUT is dependent on the baud rate setting. To start the TWI master, write a ‘1’ to the
ENABLE bit and configure an appropriate TIMEOUT if using the TWI in an SMBus environment. The
ENABLE and TIMEOUT bits are all located in the Master Control A register (TWIn.MCTRLA). If no
TIMEOUT value is set, which is the case for I²C operation, the bus state must be manually set to IDLE by
writing 0x1 to BUSSTATE in TWIn.MSTATUS at a safe point in time. Note that unlike the SMBus
specification, the I²C specification does not specify when it is safe to assume that the bus is idle in a
multi-master system. The application can solve this by ensuring that after all masters connected to the
bus are enabled, one supervising master performs a transfer before any of the other masters. The stop
condition of this initial transfer will indicate to the Bus State Monitor logic that the bus is idle and ready.
Slave Operation
To start the TWI slave, write the Slave Address (TWIn.SADDR), and write a '1' to the ENABLE bit in the
Slave Control A register (TWIn.SCTRLA). The TWI peripheral will wait to receive a byte addressed to it.
RS RS RS RS RS RS
SDA
SCL
Note: RS is optional
A unique address is assigned to all slave devices connected to the bus, and the master will use this to
address a slave and initiate a data transaction.
Several masters can be connected to the same bus, called a multi-master environment. An arbitration
mechanism is provided for resolving bus ownership among masters, since only one master device may
own the bus at any given time.
A device can contain both master and slave logic and can emulate multiple slave devices by responding
to more than one address.
A master indicates the start of a transaction by issuing a Start condition (S) on the bus. An address
packet with a slave address (ADDRESS) and an indication whether the master wishes to read or write
data (R/W) are then sent. After all data packets (DATA) are transferred, the master issues a Stop
condition (P) on the bus to end the transaction. The receiver must acknowledge (A) or not-acknowledge
(A) each byte received.
Figure 26-3 shows a TWI transaction.
Figure 26-3. Basic TWI Transaction Diagram Topology for a 7-Bit Address Bus
SDA
Direction
Transaction
SDA
SCL
S P
START STOP
Condition Condition
Multiple Start conditions can be issued during a single transaction. A Start condition that is not directly
following a Stop condition is called a repeated Start condition (Sr).
26.3.2.2 Bit Transfer
As illustrated in Figure 26-5, a bit transferred on the SDA line must be stable for the entire high period of
the SCL line. Consequently, the SDA value can only be changed during the low period of the clock. This
is ensured in hardware by the TWI module.
SDA
SCL
DATA Change
Valid Allowed
Combining bit transfers result in the formation of address and data packets. These packets consist of
eight data bits (one byte) with the Most Significant bit transferred first, plus a single-bit not-Acknowledge
(NACK) or Acknowledge (ACK) response. The addressed device signals ACK by pulling the SCL line low
during the ninth clock cycle, and signals NACK by leaving the line SCL high.
26.3.2.3 Address Packet
After the Start condition, a 7-bit address followed by a read/write (R/W) bit is sent. This is always
transmitted by the master. A slave recognizing its address will ACK the address by pulling the data line
low for the next SCL cycle, while all other slaves should keep the TWI lines released and wait for the next
Start and address. The address, R/W bit, and Acknowledge bit combined is the address packet. Only one
address packet for each Start condition is allowed, also when 10-bit addressing is used.
The R/W bit specifies the direction of the transaction. If the R/W bit is low, it indicates a master write
transaction, and the master will transmit its data after the slave has acknowledged its address. If the R/W
bit is high, it indicates a master read transaction, and the slave will transmit its data after acknowledging
its address.
26.3.2.4 Data Packet
An address packet is followed by one or more data packets. All data packets are nine bits long, consisting
of one data byte and one Acknowledge bit. The direction bit in the previous address packet determines
the direction in which the data is transferred.
26.3.2.5 Transaction
A transaction is the complete transfer from a Start to a Stop condition, including any repeated Start
conditions in between. The TWI standard defines three fundamental transaction modes: Master write,
master read, and a combined transaction.
Figure 26-6 illustrates the master write transaction. The master initiates the transaction by issuing a Start
condition (S) followed by an address packet with the direction bit set to '0' (ADDRESS+W).
Figure 26-6. Master Write Transaction
Transaction
Address Packet Data Packet
N data packets
Assuming the slave acknowledges the address, the master can start transmitting data (DATA) and the
slave will ACK or NACK (A/A) each byte. If no data packets are to be transmitted, the master terminates
the transaction by issuing a Stop condition (P) directly after the address packet. There are no limitations
to the number of data packets that can be transferred. If the slave signals a NACK to the data, the master
must assume that the slave cannot receive any more data and terminate the transaction.
Figure 26-7 illustrates the master read transaction. The master initiates the transaction by issuing a Start
condition followed by an address packet with the direction bit set to '1' (ADDRESS+R). The addressed
slave must acknowledge the address for the master to be allowed to continue the transaction.
Figure 26-7. Master Read Transaction
Transaction
Address Packet Data Packet
N data packets
Assuming the slave acknowledges the address, the master can start receiving data from the slave. There
are no limitations to the number of data packets that can be transferred. The slave transmits the data
while the master signals ACK or NACK after each data byte. The master terminates the transfer with a
NACK before issuing a Stop condition.
Figure 26-8 illustrates a combined transaction. A combined transaction consists of several read and write
transactions separated by repeated Start conditions (Sr).
Figure 26-8. Combined Transaction
Transaction
Address Packet #1 N Data Packets Address Packet #2 M Data Packets
Direction Direction
SCL
S
In the case where the slave is stretching the clock, the master will be forced into a Wait state until the
slave is ready, and vice versa.
26.3.2.7 Arbitration
A master can start a bus transaction only if it has detected that the bus is idle. As the TWI bus is a multi-
master bus, it is possible that two devices may initiate a transaction at the same time. This results in
multiple masters owning the bus simultaneously. This is solved using an arbitration scheme where the
master loses control of the bus if it is not able to transmit a high level on the SDA line. The masters who
lose arbitration must then wait until the bus becomes idle (i.e., wait for a Stop condition) before attempting
to reacquire bus ownership. Slave devices are not involved in the arbitration procedure.
Figure 26-10. TWI Arbitration
DEVICE1 Loses arbitration
DEVICE1_SDA
DEVICE2_SDA
SDA
bit 7 bit 6 bit 5 bit 4
(wired-AND)
SCL
S
Figure 26-10 shows an example where two TWI masters are contending for bus ownership. Both devices
are able to issue a Start condition, but DEVICE1 loses arbitration when attempting to transmit a high level
(bit 5) while DEVICE2 is transmitting a low level.
Arbitration between a repeated start condition and a data bit, a Stop condition and a data bit, or a
repeated Start condition and a Stop condition are not allowed and will require special handling by
software.
26.3.2.8 Synchronization
A clock synchronization algorithm is necessary for solving situations where more than one master is
trying to control the SCL line at the same time. The algorithm is based on the same principles used for
the clock stretching previously described. Figure 26-11 shows an example where two masters are
competing for control over the bus clock. The SCL line is the wired-AND result of the two masters clock
outputs.
DEVICE1_SCL
DEVICE2_SCL
SCL
(wired-AND)
A high-to-low transition on the SCL line will force the line low for all masters on the bus, and they will start
timing their low clock period. The timing length of the low clock period can vary among the masters.
When a master (DEVICE1 in this case) has completed its low period, it releases the SCL line. However,
the SCL line will not go high until all masters have released it. Consequently, the SCL line will be held low
by the device with the longest low period (DEVICE2). Devices with shorter low periods must insert a wait
state until the clock is released. All masters start their high period when the SCL line is released by all
devices and has gone high. The device, which first completes its high period (DEVICE1), forces the clock
line low, and the procedure is then repeated. The result is that the device with the shortest clock period
determines the high period, while the low period of the clock is determined by the device with the longest
clock period.
RESET
UNKNOWN
(0b00)
P + Timeout
S
Sr
IDLE BUSY
(0b01) P + Timeout (0b11)
Command P
Arbitration
Write ADDRESS Lost
(S) OWNER
(0b10)
Write
ADDRESS(Sr)
After a system Reset and/or TWI master enable, the bus state is unknown. The bus state machine can be
forced to enter idle state by writing to the Bus State bits accordingly. If no state is set by the application
software, the bus state will become idle when the first Stop condition is detected. If the master inactive
bus time-out is enabled, the bus state will change to idle on the occurrence of a time-out. After a known
bus state is established, only a system Reset or disabling of the TWI master will set the state to unknown.
When the bus is idle, it is ready for a new transaction. If a Start condition generated externally is
detected, the bus becomes busy until a Stop condition is detected. The Stop condition will change the
bus state to idle. If the master inactive bus time-out is enabled, the bus state will change from busy to idle
on the occurrence of a time-out.
If a Start condition is generated internally while in an Idle state, the owner state is entered. If the complete
transaction was performed without interference (i.e., no collisions are detected), the master will issue a
Stop condition and the bus state will change back to idle. If a collision is detected, the arbitration is
assumed lost and the bus state becomes busy until a Stop condition is detected. A repeated Start
condition will only change the bus state if arbitration is lost during the issuing of the repeated Start.
Arbitration during repeated Start can be lost only if the arbitration has been ongoing since the first Start
condition. This happens if two masters send the exact same ADDRESS+DATA before one of the masters'
issues a repeated Start (Sr).
26.3.4 Operation
dedicated status flags for indicating ACK/NACK received, bus error, arbitration lost, clock hold, and bus
state.
When an interrupt flag is set, the SCL line is forced low. This will give the master time to respond or
handle any data, and will in most cases require software interaction. Figure 26-13 shows the TWI master
operation. The diamond-shaped symbols (SW) indicate where software interaction is required. Clearing
the interrupt flags releases the SCL line.
Figure 26-13. TWI Master Operation
APPLICATION MASTER WRITE INTERRUPT + HOLD
M1 M2 M3 M4
Wait for
SW
IDLE
R/W A SW P IDLE M2
W A SW Sr M3 BUSY M4
SW DATA A/A
SW Driver software
MASTER READ INTERRUPT + HOLD
The master provides data
on the bus
A Sr M3
Mn Diagram connections
R A DATA
The number of interrupts generated is kept to a minimum by an automatic handling of most conditions.
26.3.4.2.1 Clock Generation
The BAUD must be set to a value that results in a TWI bus clock frequency (fSCL) equal or less than 100
kHz/400 kHz/1 MHz, dependent on the mode used by the application (Standard mode Sm/Fast mode Fm/
Fast mode plus Fm+).
The low (TLOW) and high (THIGH) times are determined by the Baud Rate register (BAUD), while the rise
(TRISE) and fall (TFALL) times are determined by the bus topology. Because of the wired-AND logic of the
bus, TFALL will be considered as part of TLOW. Likewise, TRISE will be in a state between TLOW and THIGH
until a high state has been detected.
RISE
The TWI.MBAUD value is used to time both SCL high and SCL low which gives the following formula of
SCL frequency:
�CLK_PER
�SCL =
10 + 2���� + �CLK_PER ⋅ �RISE
If the TWI is in Fm+ mode, only TWI.MBAUD value of three or higher is supported. This means that for
Fm+ mode to achieve baud rate of 1 MHz, the peripheral clock (CLK_PER) has to run at 16 MHz or
faster.
26.3.4.2.2 Transmitting Address Packets
After issuing a Start condition, the master starts performing a bus transaction when the Master Address
register is written with the 7-bit slave address and direction bit. If the bus is busy, the TWI master will wait
until the bus becomes idle before issuing the Start condition.
Depending on arbitration and the R/W direction bit, one of four distinct cases (M1 to M4) arises following
the address packet. The different cases must be handled in software.
Case M1: Arbitration Lost or Bus Error during Address Packet
If arbitration is lost during the sending of the address packet, both the Master Write Interrupt Flag (WIF in
TWIn.MSTATUS) and Arbitration Lost Flag (ARBLOST in TWIn.MSTATUS) are set. Serial data output to
the SDA line is disabled, and the SCL line is released. The master is no longer allowed to perform any
operation on the bus until the bus state has changed back to idle.
A bus error will behave in the same way as an arbitration lost condition, but the Bus Error Flag (BUSERR
in TWIn.MSTATUS) is set in addition to the write interrupt and arbitration lost flags.
Case M2: Address Packet Transmit Complete - Address not Acknowledged by Slave
If no slave device responds to the address, the Master Write Interrupt Flag (WIF in TWIn.MSTATUS) and
the Master Received Acknowledge Flag (RXACK in TWIn.MSTATUS) are set. The RXACK flag reflects
the physical state of the ACK bit (i.e.< no slave did pull the ACK bit low). The clock hold is active at this
point, preventing further activity on the bus.
Case M3: Address Packet Transmit Complete - Direction Bit Cleared
If the master receives an ACK from the slave, the Master Write Interrupt Flag (WIF in TWIn.MSTATUS) is
set and the Master Received Acknowledge Flag (RXACK in TWIn.MSTATUS) is cleared. The clock hold
is active at this point, preventing further activity on the bus.
Case M4: Address Packet Transmit Complete - Direction Bit Set
If the master receives an ACK from the slave, the master proceeds to receive the next byte of data from
the slave. When the first data byte is received, the Master Read Interrupt Flag (RIF in TWIn.MSTATUS) is
set and the Master Received Acknowledge Flag (RXACK in TWIn.MSTATUS) is cleared. The clock hold
is active at this point, preventing further activity on the bus.
26.3.4.2.3 Transmitting Data Packets
The slave will know when an address packet with R/W direction bit set has been successfully received. It
can then start sending data by writing to the slave data register. When a data packet transmission is
completed, the data interrupt flag is set. If the master indicates NACK, the slave must stop transmitting
data and expect a Stop or repeated Start condition.
26.3.4.2.4 Receiving Data Packets
The slave will know when an address packet with R/W direction bit cleared has been successfully
received. After acknowledging this, the slave must be ready to receive data. When a data packet is
received, the data interrupt flag is set and the slave must indicate ACK or NACK. After indicating a NACK,
the slave must expect a Stop or repeated Start condition.
26.3.4.2.5 Quick Command Mode
With Quick Command enabled (QCEN in TWIn.MCTRLA), the R/W# bit of the slave address denotes the
command. This is a SMBus specific command where the R/W bit may be used to simply turn a device
function ON or OFF, or enable/disable a low-power Standby mode. There is no data sent or received.
After the master receives an acknowledge from the slave, either RIF or WIF flag in TWIn.MSTATUS will
be set depending on the polarity of R/W. When either RIF or WIF flag is set after issuing a Quick
Command, the TWI will accept a stop command through writing the CMD bits in TWIn.MCTRLB.
Figure 26-15. Quick Command Frame Format
S Address R/W A P
P S2
S1 S3 A S1 Sr S3
P S2
A S1 Sr S3
SW Driver software
W SW A/A DATA SW A/A
The master provides data
on the bus
Interrupt on STOP
SW
Condition Enabled
Slave provides data on
the bus
Sn Diagram connections
The number of interrupts generated is kept to a minimum by automatic handling of most conditions. Quick
command can be enabled to auto-trigger operations and reduce software complexity.
Address Recognition mode can be enabled to allow the slave to respond to all received addresses.
26.3.4.3.1 Receiving Address Packets
When the TWI slave is properly configured, it will wait for a Start condition to be detected. When this
happens, the successive address byte will be received and checked by the address match logic, and the
slave will ACK a correct address and store the address in the TWIn.DATA register. If the received address
is not a match, the slave will not acknowledge and store the address, but wait for a new Start condition.
The slave address/stop interrupt flag is set when a Start condition succeeded by a valid address byte is
detected. A general call address will also set the interrupt flag.
A Start condition immediately followed by a Stop condition is an illegal operation and the bus error flag is
set.
The R/W direction flag reflects the direction bit received with the address. This can be read by software to
determine the type of operation currently in progress.
Depending on the R/W direction bit and bus condition, one of four distinct cases (S1 to S4) arises
following the address packet. The different cases must be handled in software.
Case S1: Address Packet Accepted - Direction Bit Set
If the R/W direction flag is set, this indicates a master read operation. The SCL line is forced low by the
slave, stretching the bus clock. If ACK is sent by the slave, the slave hardware will set the data interrupt
flag indicating data is needed for transmit. Data, repeated Start, or Stop can be received after this. If
NACK is sent by the slave, the slave will wait for a new Start condition and address match.
Case S2: Address Packet Accepted - Direction Bit Cleared
If the R/W direction flag is cleared, this indicates a master write operation. The SCL line is forced low,
stretching the bus clock. If ACK is sent by the slave, the slave will wait for data to be received. Data,
repeated Start, or Stop can be received after this. If NACK is sent, the slave will wait for a new Start
condition and address match.
Case S3: Collision
If the slave is not able to send a high level or NACK, the collision flag is set, and it will disable the data
and acknowledge output from the slave logic. The clock hold is released. A Start or repeated Start
condition will be accepted.
26.3.5 Events
Not applicable.
26.3.6 Interrupts
Table 26-2. Available Interrupt Vectors and Sources
0x02 Master TWI Master interrupt • RIF: Read Interrupt Flag in 26.5.5 MSTATUS set
• WIF: Write Interrupt Flag in 26.5.5 MSTATUS set
When an interrupt condition occurs, the corresponding interrupt flag is set in the Master register
(TWI.MSTATUS) or Slave Status register (TWI.SSTATUS).
When several interrupt request conditions are supported by an interrupt vector, the interrupt requests are
ORed together into one combined interrupt request to the interrupt controller. The user must read the
peripheral's INTFLAGS register to determine which of the interrupt conditions are present.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
26.3.8 Synchronization
Not applicable.
26.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SDASETUP SDAHOLD[1:0] FMPEN
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 Fm+ disabled
1 Fm+ enabled
Name: DBGCTRL
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
Name: MCTRLA
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RIEN WIEN QCEN TIMEOUT[1:0] SMEN ENABLE
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: MCTRLB
Offset: 0x04
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
FLUSH ACKACT MCMD[1:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 Send ACK
1 Send NACK
Note:
1. For a master being a sender, it will normally wait for new data written to the Master Data register
(TWIn.MDATA).
The acknowledge action bits and command bits can be written at the same time.
Name: MSTATUS
Offset: 0x05
Reset: 0x00
Property: -
Normal TWI operation dictates that this register is regarded purely as a read-only register. Clearing any of
the status flags is done indirectly by accessing the Master Transmits Address (TWIn.MADDR), the Master
Data register (TWIn.MDATA), or the Command bits (CMD) in the Master Control B register
(TWIn.MCTRLB).
Bit 7 6 5 4 3 2 1 0
RIF WIF CLKHOLD RXACK ARBLOST BUSERR BUSSTATE[1:0]
Access R/W R/W R/W R R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: MBAUD
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
BAUD[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: MADDR
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ADDR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: MDATA
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Both TWI Master Interrupt Flags are cleared automatically if this register is read while ACKACT is set to
either ACK or NACK. However, arbitration lost and bus error flags are left unchanged.
Name: SCTRLA
Offset: 0x09
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DIEN APIEN PIEN PMEN SMEN ENABLE
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Name: SCTRLB
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ACKACT SCMD[1:0]
Access R/W R/W R/W
Reset 0 0 0
The acknowledge action bits and command bits can be written at the same time.
Name: SSTATUS
Offset: 0x0B
Reset: 0x00
Property: -
Normal TWI operation dictates that the Slave Status register should be regarded purely as a read-only
register. Clearing any of the status flags will indirectly be done when accessing the Slave Data
(TWIn.SDATA) register or the CMD bits in the Slave Control B register (TWIn.SCTRLB).
Bit 7 6 5 4 3 2 1 0
DIF APIF CLKHOLD RXACK COLL BUSERR DIR AP
Access R/W R/W R R R/W R/W R R
Reset 0 0 0 0 0 0 0 0
Name: SADDR
Offset: 0x0C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ADDR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SDATA
Offset: 0x0D
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SADDRMASK
Offset: 0x0E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ADDRMASK[6:0] ADDREN
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
27.1 Features
• CRC-16-CCITT
• Can Check Full Flash, Application Code, and/or Boot Section
• Priority Check Mode
• Selectable NMI Trigger on Failure
• User Configurable Check During Internal Reset Initialization
• Paused in all CPU Sleep Modes
27.2 Overview
A Cyclic Redundancy Check (CRC) takes a data stream of bytes from the NVM (either entire Flash, only
Boot section, or both application code and Boot section) and generates a checksum. The CRC peripheral
(CRCSCAN) can be used to detect errors in program memory.
The last location in the section to check has to contain the correct pre-calculated checksum for
comparison. If the checksum calculated by the CRCSCAN and the pre-calculated checksums match, a
Status bit in the CRCSCAN is set. If they do not match, the Status register will indicate that it failed. The
user can choose to let the CRCSCAN generate a Non-Maskable Interrupt (NMI) if the checksums do not
match.
An n-bit CRC, applied to a data block of arbitrary length, will detect any single alteration (error burst) up to
n bits in length. For longer error bursts, a fraction 1-2-n will be detected.
The CRC-generator supports CRC-16-CCITT.
Polynomial:
• CRC-16-CCITT: x16 + x12 + x5 + 1
The CRC reads in byte-by-byte of the content of the section(s) it is set up to check, starting with byte 0,
and generates a new checksum per byte. The byte is sent through an implementation corresponding to
Figure 27-1, starting with the Most Significant bit. If the last two bytes in the section contain the correct
checksum, the CRC will pass. See 27.3.2.1 Checksum for how to place the checksum. The initial value
of the Checksum register is 0xFFFF.
Figure 27-1. CRC Implementation Description
data
15
x x14 x13 x12 x11 x10 x9 x8 x7 x6 x5 x4 x3 x2 x1 x0
Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D
Source
CTRLB
CRC BUSY
CTRLA
Enable, calculation
Reset STATUS
CRC OK
CHECKSUM
NMI Req
Related Links
11.2.2.1 Clocks
27.2.2.3 Interrupts
27.2.2.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
27.2.2.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
27.3.3 Interrupts
27.2.2.4 Events
Not applicable.
27.2.2.5 Debug Operation
Whenever the debugger accesses the device, for instance, reading or writing a peripheral or memory
location, the CRCSCAN peripheral will be disabled.
If the CRCSCAN is busy when the debugger accesses the device, the CRCSCAN will restart the ongoing
operation when the debugger accesses an internal register or when the debugger disconnects.
The BUSY bit in the Status register (CRCSCAN.STATUS) will read '1' if the CRCSCAN was busy when
the debugger caused it to disable, but it will not actively check any section as long as the debugger keeps
it disabled. There are synchronized CRC Status bits in the debugger's internal register space, which can
be read by the debugger without disabling the CRCSCAN. Reading the debugger's internal CRC status
bits will make sure that the CRCSCAN is enabled.
It is possible to write the CRCSCAN.STATUS register directly from the debugger:
• BUSY bit in CRCSCAN.STATUS:
– Writing the BUSY bit to '0' will stop the ongoing CRC operation (so that the CRCSCAN does
not restart its operation when the debugger allows it).
– Writing the BUSY bit to '1' will make the CRC start a single check with the settings in the
Control B register (CRCSCAN.CTRLB), but not until the debugger allows it.
As long as the BUSY bit in CRCSCAN.STATUS is '1', CRCSCAN.CRCTRLB and the Non-
Maskable Interrupt Enable bit (NMIEN) in the Control A register (CRCSCAN.CTRLA) cannot be
altered.
• OK bit in CRCSCAN.STATUS:
– Writing the OK bit to '0' can trigger a Non-Maskable Interrupt (NMI) if the NMIEN bit in
CRCSCAN.CTRLA is '1'. If an NMI has been triggered, no writes to the CRCSCAN are
allowed.
– Writing the OK bit to '1' will make the OK bit read as '1' when the BUSY bit in
CRCSCAN.STATUS is '0'.
Writes to CRCSCAN.CTRLA and CRCSCAN.CTRLB from the debugger are treated in the same way as
writes from the CPU.
Related Links
33. UPDI - Unified Program and Debug Interface
27.5.1 CTRLA
27.5.2 CTRLB
27.3.1 Initialization
To enable a CRC in software (or via the debugger):
1. Write the Source (SRC) bit field of the Control B register (CRCSCAN.CTRLB) to select the desired
source settings. Ensure that the MODE bit field in CRCSCAN.CTRLB is 0x0.
2. Enable the CRCSCAN by writing a '1' to the ENABLE bit in the Control A register
(CRCSCAN.CTRLA).
3. The CRC will start after three cycles, and the CPU will continue executing during these three
cycles.
The CRCSCAN can be enabled during the internal Reset initialization to ensure the Flash is OK before
letting the CPU execute code. If the CRCSCAN fails during the internal Reset initialization, the CPU is not
allowed to start normal code execution - the device remains in Reset state instead of executing code with
unexpected behavior. The full source settings are available during the internal Reset initialization. See the
Fuse description for more information.
If the CRCSCAN was enabled during the internal Reset initialization, the CRC Control A and B registers
will reflect this when normal code execution is started:
• The ENABLE bit in CRCSCAN.CTRLA will be '1'
• The MODE bit field in CRCSCAN.CTRLB will be non-zero
• The SRC bit field in CRCSCAN.CTRLB will reflect the checked section(s).
The CRCSCAN can be enabled during Reset by configuring the CRCSRC fuse in FUSE.SYSCFG0.
Related Links
27.5.1 CTRLA
27.5.2 CTRLB
6.10 Configuration and User Fuses (FUSE)
12.3.2.2 Reset Time
27.3.2 Operation
The CRC is operating in Priority mode: the CRC peripheral has priority access to the Flash and will stall
the CPU until completed.
In Priority mode, the CRC fetches a new word (16-bit) on every third main clock cycle, or when the CRC
peripheral is configured to do a scan from start-up.
27.3.2.1 Checksum
The pre-calculated checksum must be present in the last location of the section to be checked. If the
BOOT section should be checked, the 16-bit checksum must be saved in the last two bytes of the BOOT
section, and similarly for APPLICATION and entire Flash. Table 27-2 shows explicitly how the checksum
should be stored for the different sections. Also, see the CRCSCAN.CTRLB register description for how
to configure which section to check and the device fuse description for how to configure the BOOTEND
and APPEND fuses.
Table 27-2. How to Place the Pre-Calculated 16-Bit Checksum in Flash
27.3.3 Interrupts
Table 27-3. Available Interrupt Vectors and Sources
When the interrupt condition occurs, the OK flag in the Status register (CRCSCAN.STATUS) is cleared to
'0'.
An interrupt is enabled by writing a '1' to the respective Enable bit (NMIEN) in the Control A register
(CRCSCAN.CTRLA), but can only be disabled with a system Reset. An NMI is generated when the OK
flag in CRCSCAN.STATUS is cleared and the NMIEN bit is '1'. The NMI request remains active until a
system Reset, and cannot be disabled.
A non-maskable interrupt can be triggered even if interrupts are not globally enabled.
Related Links
27.5.1 CTRLA
27.5.3 STATUS
13. CPUINT - CPU Interrupt Controller
27.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RESET NMIEN ENABLE
Access R/W R/W R/W
Reset 0 0 0
27.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
The CTRLB register contains the mode and source settings for the CRC. It is not writable when the CRC
is busy or when an NMI has been triggered.
Bit 7 6 5 4 3 2 1 0
SRC[1:0]
Access R/W R/W
Reset 0 0
Related Links
6.10 Configuration and User Fuses (FUSE)
12.3.2.2 Reset Time
27.5.3 Status
Name: STATUS
Offset: 0x02
Reset: 0x02
Property: -
The STATUS register contains the busy and OK information. It is not writable, only readable.
Bit 7 6 5 4 3 2 1 0
OK BUSY
Access R R
Reset 1 0
Bit 1 – OK CRC OK
When this bit is read as '1', the previous CRC completed successfully. The bit is set to '1' from Reset but
is cleared to '0' when enabling. As long as the CRC module is busy, it will be read '0'. When running
continuously, the CRC status must be assumed OK until it fails or is stopped by the user.
28.1 Features
• Glue Logic for General Purpose PCB Design
• Up to two Programmable Look-Up Tables LUT[1:0]
• Combinatorial Logic Functions: Any Logic Expression That is a Function of up to Three Inputs.
• Sequential Logic Functions:
Gated D Flip-Flop, JK Flip-Flop, gated D Latch, RS Latch
• Flexible Look-Up Table Inputs Selection:
– I/Os
– Events
– Subsequent LUT output
– Internal peripherals
• Analog comparator
• Timer/counters
• USART
• SPI
• Clocked by System Clock or Other Peripherals
• Output Can be Connected to I/O pins or Event System
• Optional Synchronizer, Filter, or Edge Detector Available on Each LUT Output
28.2 Overview
The Configurable Custom Logic (CCL) is a programmable logic peripheral which can be connected to the
device pins, to events, or to other internal peripherals. The CCL can serve as "glue logic" between the
device peripherals and external devices. The CCL can eliminate the need for external logic components,
and can also help the designer to overcome real-time constraints by combining core independent
peripherals to handle the most time-critical parts of the application independent of the CPU.
The CCL peripheral has one pair of Look-Up Tables (LUT). Each LUT consists of three inputs, a truth
table, and a filter/edge detector. Each LUT can generate an output as a user programmable logic
expression with three inputs. Inputs can be individually masked.
The output can be generated from the inputs combinatorially and can be filtered to remove spikes. An
optional sequential module can be enabled. The inputs to the sequential module are individually
controlled by two independent, adjacent LUT (LUT0/LUT1) outputs, enabling complex waveform
generation.
Internal
FILTSEL EDGEDET SEQSEL
Events
I/O
Peripherals
TRUTH
Filter/ Edge
CLKSRC
Synch Detector LUT0-OUT
LUT0-IN[2] CLK_MUX_OUT
Sequential
clkCCL
ENABLE
LUT1
INSEL
Internal
FILTSEL EDGEDET
Events
I/O
Peripherals
TRUTH
Filter/ Edge
CLKSRC LUT1-OUT
Synch Detector
LUT1-IN[2] CLK_MUX_OUT
clkCCL
ENABLE
Refer to I/O Multiplexing and Considerations for details on the pin mapping for this peripheral. One signal
can be mapped to several pins.
Related Links
5. I/O Multiplexing and Considerations
28.2.3.1 Clocks
By default, the CCL is using the peripheral clock of the device (CLK_PER).
Alternatively, the CCL can be clocked by a peripheral input that is available on LUT n input line 2
(LUTn_IN[2]). This is configured by writing a '1' to the Clock Source Selection bit (CLKSRC) in the LUT n
Control A register (CCL.LUTnCTRLA). The sequential block is clocked by the same clock as that of the
even LUT in the LUT pair (SEQn.clk = LUT2n.clk). It is advised to disable the peripheral by writing a '0' to
the Enable bit (ENABLE) in the Control A register (CCL.CTRLA) before configuring the CLKSRC bit in
CCL.LUTnCTRLA.
Alternatively, the input line 2 (IN[2]) of an LUT can be used to clock the LUT and the corresponding
Sequential block. This is enabled by writing a '1' to the Clock Source Selection bit (CLKSRC) in the LUT n
Control A register (CCL.LUTnCTRLA).
The CCL must be disabled before changing the LUT clock source: write a '0' to the Enable bit (ENABLE)
in Control A register (CCL.CTRLA).
Related Links
10. CLKCTRL - Clock Controller
28.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
28.2.3.4 Debug Operation
When the CPU is halted in Debug mode the CCL continues normal operation. However, the CCL cannot
be halted when the CPU is halted in Debug mode. If the CCL is configured in a way that requires it to be
periodically serviced by the CPU, improper operation or data loss may result during debugging.
28.3.1 Initialization
The following bits are enable-protected, meaning that they can only be written when the corresponding
even LUT is disabled (ENABLE=0 in CCL.LUT0CTRLA):
• Sequential Selection (SEQSEL) in Sequential Control 0 register (CCL.SEQCTRL0)
The following registers are enable-protected, meaning that they can only be written when the
corresponding LUT is disabled (ENABLE=0 in CCL.LUT0CTRLA):
• LUT n Control x register, except ENABLE bit (CCL.LUTnCTRLx)
Enable-protected bits in the CCL.LUTnCTRLx registers can be written at the same time as ENABLE in
CCL.LUTnCTRLx is written to '1', but not at the same time as ENABLE is written to '0'.
Enable-protection is denoted by the enable-protected property in the register description.
28.3.2 Operation
28.3.2.1 Enabling, Disabling, and Resetting
The CCL is enabled by writing a '1' to the ENABLE bit in the Control register (CCL.CTRLA). The CCL is
disabled by writing a '0' to that ENABLE bit.
Each LUT is enabled by writing a '1' to the LUT Enable bit (ENABLE) in the LUT n Control A register
(CCL.LUTnCTRLA). Each LUT is disabled by writing a '0' to the ENABLE bit in CCL.LUTnCTRLA.
28.3.2.2 Look-Up Table Logic
The look-up table in each LUT unit can generate a combinational logic output as a function of up to three
inputs IN[2:0]. Unused inputs can be masked (tied low). The truth table for the combinational logic
expression is defined by the bits in the CCL.TRUTHn registers. Each combination of the input bits
(IN[2:0]) corresponds to one bit in the TRUTHn register, as shown in the table below.
Table 28-2. Truth Table of LUT
Input Overview
The inputs can be individually:
• Masked
• Driven by Peripherals:
– Analog Comparator (AC) output
– Timer/Counters (TC) waveform outputs
• Driven by Internal Events from Event System
• Driven by Other CCL Sub-modules
The input selection for each input y of LUT n is configured by writing the input y source selection bit in the
LUT n Control x=[B,C] registers:
• INSEL0 in CCL.LUTnCTRLB
• INSEL1 in CCL.LUTnCTRLB
• INSEL2 in CCL.LUTnCTRLC
The output from an internal sequential module can be used as input source for the LUT, see the figure
below for an example for LUT0 and LUT1. The sequential selection for each LUT follows the formula:
IN 2N � = SEQ �
IN 2N+1 � = SEQ �
With N representing the sequencer number and i=0,1 representing the LUT input index.
For details, refer to 28.3.2.6 Sequential Logic.
Figure 28-2. Feedback Input Selection
LUT0 SEQ 0
CTRL
(ENABLE)
LUT1
input option by writing to the LUT CONTROL A or B register (CCL.LUTnCTRLB or LUTnCTRLC), the
Event System must be configured.
Peripherals
The different peripherals on the three input lines of each LUT are selected by writing to the respective
LUT n Input y bit fields in the LUT n Control B and C registers:
• INSEL0 in CCL.LUTnCTRLB
• INSEL1 in CCL.LUTnCTRLB
• INSEL2 in CCL.LUTnCTRLC
Related Links
5. I/O Multiplexing and Considerations
16. PORT - I/O Pin Configuration
10. CLKCTRL - Clock Controller
29. AC - Analog Comparator
20. TCA - 16-bit Timer/Counter Type A
22. TCD - 12-Bit Timer/Counter Type D
24. USART - Universal Synchronous and Asynchronous Receiver and Transmitter
25. SPI - Serial Peripheral Interface
26. TWI - Two-Wire Interface
5. I/O Multiplexing and Considerations
28.3.2.4 Filter
By default, the LUT output is a combinational function of the LUT inputs. This may cause some short
glitches when the inputs change the value. These glitches can be removed by clocking through filters if
demanded by application needs.
The Filter Selection bits (FILTSEL) in the LUT Control registers (CCL.LUTnCTRLA) define the digital filter
options. When a filter is enabled, the output will be delayed by two to five CLK cycles (peripheral clock or
alternative clock). One clock cycle after the corresponding LUT is disabled, all internal filter logic is
cleared.
FILTSEL
Input
OUT
G
D Q D Q D Q D Q
R R R R
CLK_MUX_OUT
CLR
CLK_MUX_OUT
The Sequential block is clocked by the same clock as the corresponding LUT, which is either the
peripheral clock or input line 2 (IN[2]). This is configured by the Clock Source bit (CLKSRC) in the LUT n
Control A register (CCL.LUTnCTRLA).
When the even LUT (LUT0) is disabled, the latch is asynchronously cleared, during which the flip-flop
Reset signal (R) is kept enabled for one clock cycle. In all other cases, the flip-flop output (OUT) is
refreshed on the rising edge of the clock, as shown in the respective Characteristics tables.
odd LUT
R G D OUT
1 X X Clear
0 1 1 Set
0 Clear
0 X Hold state (no change)
JK Flip-Flop (JK)
The J-input is driven by the even LUT output (LUT0), and the K-input is driven by the odd LUT output
(LUT1).
Figure 28-8. JK Flip-Flop
even LUT
CLK_MUX_OUT
odd LUT
R J K OUT
1 X X Clear
0 0 0 Hold state (no change)
0 0 1 Clear
0 1 0 Set
0 1 1 Toggle
odd LUT G
G D OUT
0 X Hold state (no change)
1 0 Clear
1 1 Set
RS-Latch (RS)
The S-input is driven by the even LUT output (LUT0), and the R-input is driven by the odd LUT output
(LUT1).
Figure 28-10. RS-Latch
odd LUT R
S R OUT
0 0 Hold state (no change)
0 1 Clear
1 0 Set
1 1 Forbidden state
Edge Filter
IN[2] Detector
CLK_MUX_OUT
CLK_CCL
CLKSRC
LUT0 Sequential
logic
Edge Filter
IN[2] Detector
CLK_MUX_OUT
CLK_CCL
CLKSRC
LUT1
When the Clock Source bit (CLKSRC) is '1', IN[2] is used to clock the corresponding Filter and Edge
Detector (CLK_MUX_OUT). The Sequential logic is clocked by CLK_MUX_OUT of the even LUT in the
pair. When CLKSRC bit is '1', IN[2] is treated as MASKed (low) in the TRUTH table.
The CCL peripheral must be disabled while changing the clock source to avoid undetermined outputs
from the peripheral.
28.3.3 Interrupts
Table 28-7. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
When several interrupt request conditions are supported by an interrupt vector, the interrupt requests are
ORed together into one combined interrupt request to the interrupt controller. The user must read the
peripheral's INTFLAGS register to determine which of the interrupt conditions are present.
28.3.4 Events
The CCL can generate the following output events:
• LUTnOUT: Look-Up Table Output Value
The CCL can take the following actions on an input event:
• INx: The event is used as input for the TRUTH table
Related Links
14. EVSYS - Event System
28.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTDBY ENABLE
Access R/W R/W
Reset 0 0
Value Description
0 System clock is not required in Standby Sleep mode
1 System clock is required in Standby Sleep mode
Value Description
0 The peripheral is disabled
1 The peripheral is enabled
Name: SEQCTRL0
Offset: 0x01 [ID-00000485]
Reset: 0x00
Property: Enable-Protected
Bit 7 6 5 4 3 2 1 0
SEQSEL[3:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: INTCTRL0
Offset: 0x05
Reset: 0x00
Property: R/W
Bit 7 6 5 4 3 2 1 0
INTMODE3[1:0] INTMODE2[1:0] INTMODE1[1:0] INTMODE0[1:0]
Access
Reset 0 0 0 0 0 0 0 0
Bits 0:1, 2:3, 4:5, 6:7 – INTMODE The bits in INTMODEn select the interrupt sense configuration for
LUTn-OUT.
Name: INTFLAGS
Offset: 0x07
Reset: 0
Property: R/W
Bit 7 6 5 4 3 2 1 0
INT1 INT0
Access
Reset 0 0
Name: LUTCTRLA
Offset: 0x05 + n*0x04 [n=0..1]
Reset: 0x00
Property: Enable-Protected
Bit 7 6 5 4 3 2 1 0
EDGEDET CLKSRC FILTSEL[1:0] OUTEN ENABLE
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Value Description
0 Edge detector is disabled
1 Edge detector is enabled
Value Description
0 CLK_PER is clocking the LUT
1 IN[2] is clocking the LUT
Value Description
0 Output to pin disabled
1 Output to pin enabled
Value Description
0 The LUT is disabled
1 The LUT is enabled
Name: LUTCTRLB
Offset: 0x06 + n*0x04 [n=0..1]
Reset: 0x00
Property: Enable-Protected
Bit 7 6 5 4 3 2 1 0
INSEL1[3:0] INSEL0[3:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: LUTCTRLC
Offset: 0x07 + n*0x04 [n=0..1]
Reset: 0x00
Property: Enable-Protected
Bit 7 6 5 4 3 2 1 0
INSEL2[3:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
28.5.8 TRUTHn
Name: TRUTH
Offset: 0x08 + n*0x04 [n=0..1]
Reset: 0x00
Property: Enable-Protected
Bit 7 6 5 4 3 2 1 0
TRUTH[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
29.1 Features
• Three Instances of the AC Controller, AC0, AC1, and AC2
• 50 ns Response Time for Supply Voltage Above 2.7V
• Zero-Cross Detection
• Selectable Hysteresis:
– None
– 10 mV
– 25 mV
– 50 mV
• Analog Comparator Output Available on Pin
• Comparator Output Inversion Available
• Flexible Input Selection:
– Four Positive pins
– Two Negative pins
– Output from the DAC
– Internal reference voltage
• Interrupt Generation On:
– Rising edge
– Falling edge
– Both edges
• Event Generation:
– Comparator output
29.2 Overview
The Analog Comparator (AC) compares the voltage levels on two inputs and gives a digital output based
on this comparison. The AC can be configured to generate interrupt requests and/or events upon several
different combinations of input change.
The dynamic behavior of the AC can be adjusted by a hysteresis feature. The hysteresis can be
customized to optimize the operation for each application.
The input selection includes analog port pins, DAC output, and internal references. The analog
comparator output state can also be output on a pin for use by external devices.
The AC has one positive input and one negative input. The positive input source is one of a selection of
four analog input pins. The negative inputs are chosen either from analog input pins or from internal
inputs, such as an internal voltage reference.
The digital output from the comparator is '1' when the difference between the positive and the negative
input voltage is positive and '0' otherwise.
This device provides three instances of the AC controller, AC0, AC1, and AC2.
AINP0
: Invert
AINPn + OUT
Controller
AC Logic
AINN0
: -
AINNn
Enable Hysteresis
VREF
Event
DAC
CTRLA System
Note: Refer to 29.2.2 Signal Description for the number of AINN and AINP.
29.2.3.1 Clocks
This peripheral depends on the peripheral clock.
29.3.1 Initialization
For basic operation, follow these steps:
• Configure the desired input pins in the port peripheral
• Select the positive and negative input sources by writing the Positive and Negative Input MUX
Selection bit fields (MUXPOS and MUXNEG) in the MUX Control A register (AC.MUXCTRLA)
• Optional: Enable the output to pin by writing a '1' to the Output Pad Enable bit (OUTEN) in the
Control A register (AC.CTRLA)
• Enable the AC by writing a '1' to the ENABLE bit in AC.CTRLA
During the start-up time after enabling the AC, the output of the AC may be invalid.
The start-up time of the AC by itself is at most 2.5 µs. If an internal reference is used, the reference start-
up time is normally longer than the AC start-up time. The VREF start-up time is 60 µs at most.
29.3.2 Operation
• AINN1
• AINP0
• AINP1
• AINP2
• AINP3
29.3.2.2.2 Internal Inputs
Two internal inputs are available for the analog comparator:
• Output from the DAC
• DAC and AC voltage reference
29.3.3 Events
The AC will generate the following event automatically when the AC is enabled:
• The digital output from the AC (OUT in the block diagram) is available as an Event System source.
The events from the AC are asynchronous to any clocks in the device.
The AC has no event inputs.
29.3.4 Interrupts
Table 29-2. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the STATUS register
(AC.STATUS).
An interrupt source is enabled or disabled by writing to the corresponding bit in the peripheral's Interrupt
Control register (AC.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the AC.STATUS
register description for details on how to clear interrupt flags.
29.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTDBY OUTEN INTMODE[1:0] LPMODE HYSMODE[1:0] ENABLE
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Value Description
0 In Standby Sleep mode, the peripheral is halted
1 In Standby Sleep mode, the peripheral continues operation
Value Description
0 Low-Power mode disabled
1 Low-Power mode enabled
Name: MUXCTRLA
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
INVERT MUXPOS[1:0] MUXNEG[1:0]
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
Name: INTCTRL
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CMP
Access R/W
Reset 0
29.5.4 Status
Name: STATUS
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
STATE CMP
Access R R/W
Reset 0 0
30.1 Features
• 10-Bit Resolution
• ±2 LSB Absolute Accuracy
• 6.5 - 260 μs Conversion Time
• Up to 115 ksps at 10-Bit Resolution (150 ksps at 8-bit)
• Up to Ten Multiplexed Single-ended Input Channels
• Temperature Sensor Input Channel
• 0V to VDD ADC Input Voltage Range
• Multiple Internal ADC Reference Voltages Between 0.55V and VDD
• External Reference Input VVREFA
• Free-running or Single Conversion mode
• Interrupt Available on ADC Conversion Complete
• Optional Event Triggered Conversion
• Optional Interrupt on Conversion Results
• Compare Function for Accurate Monitoring or User-Defined Thresholds (Window Comparator
mode)
• Accumulation up to 64 Samples per Conversion
30.2 Overview
The Analog-to-Digital Converter (ADC) peripheral features a 10-bit Successive Approximation ADC
(SAR), with a sampling rate up to 115 ksps at 10-bit resolution (150 ksps at 8-bit). The ADC is connected
to a 10-channel analog multiplexer, which allows twelve single-ended voltage inputs. The single-ended
voltage inputs refer to 0V (GND). The ADC input channel can either be internal (e.g. a voltage reference)
or external through the analog input pins.
An ADC conversion can be started by software or by using the Event System (EVSYS) to route an event
from other peripherals, making it possible to do a periodic sampling of input signals, trigger an ADC
conversion on a special condition, or trigger an ADC conversion in Standby Sleep mode. A window
compare feature is available for monitoring the input signal and can be configured to only trigger an
interrupt on user-defined thresholds for under, over, inside, or outside a window, with minimum software
intervention required.
The ADC input signal is fed through a sample-and-hold circuit that ensures that the input voltage to the
ADC is held at a constant level during sampling.
The ADC supports sampling in bursts where a configurable number of conversion results are
accumulated into a single ADC result (Sample Accumulation). Further, a sample delay can be configured
to tune the ADC sampling frequency associated with a single burst. This is to tune the sampling
frequency away from any harmonic noise aliased with the ADC sampling frequency (within the burst) from
the sampled signal. An automatic sampling delay variation feature can be used to randomize this delay to
slightly change the time between samples.
Selectable voltage references from the internal Voltage Reference (VREF) peripheral, VDD supply
voltage, or external VREF pin (VREFA).
This device has two instances of the ADC; ADC0 and ADC1.
When the Peripheral Touch Controller (PTC) is enabled, ADC0 is fully controlled by the PTC peripheral.
"accumulate"
VREF
"convert"
"sample"
"enable"
> WCOMP
< (IRQ)
TEMPREF
Control Logic RESRDY
(IRQ)
Related Links
1.1 Configuration Summary
5. I/O Multiplexing and Considerations
30.2.3.1 Clocks
The ADC uses the peripheral clock CLK_PER and has an internal prescaler to generate the ADC clock
source CLK_ADC.
Related Links
10. CLKCTRL - Clock Controller
30.3.2.2 Clock Generation
30.2.3.3 Interrupts
Using the interrupts of this peripheral requires the interrupt controller to be configured first.
Related Links
13. CPUINT - CPU Interrupt Controller
8.7.3 SREG
30.3.4 Interrupts
30.2.3.4 Events
The events of this peripheral are connected to the Event System.
Related Links
14. EVSYS - Event System
30.2.4 Definitions
An ideal n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2n steps (LSb).
The lowest code is read as 0, and the highest code is read as 2n-1. Several parameters describe the
deviation from the ideal behavior:
Offset Error The deviation of the first transition (0x000 to 0x001) compared to the ideal
transition (at 0.5 LSb). Ideal value: 0 LSb.
Figure 30-2. Offset Error
Output Code
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.
Figure 30-3. Gain Error
Output Code Gain
Error
Ideal ADC
Actual ADC
Integral Non- After adjusting for offset and gain error, the INL is the maximum deviation of an
Linearity (INL) actual transition compared to an ideal transition for any code. Ideal value: 0 LSb.
INL
Ideal ADC
Actual ADC
Differential Non- The maximum deviation of the actual code width (the interval between two
Linearity (DNL) adjacent transitions) from the ideal code width (1 LSb). Ideal value: 0 LSb.
Figure 30-5. Differential Non-Linearity
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 The maximum deviation of an actual (unadjusted) transition compared to an ideal
Accuracy transition for any code. This is the compound effect of all aforementioned errors.
Ideal value: ±0.5 LSb.
30.3.1 Initialization
The following steps are recommended in order to initialize ADC operation:
1. Configure the resolution by writing to the Resolution Selection bit (RESSEL) in the Control A
register (ADC.CTRLA).
2. Optional: Enable the Free-Running mode by writing a '1' to the Free-Running bit (FREERUN) in
ADC.CTRLA.
3. Optional: Configure the number of samples to be accumulated per conversion by writing the
Sample Accumulation Number Select bits (SAMPNUM) in the Control B register (ADC.CTRLB).
4. Configure a voltage reference by writing to the Reference Selection bit (REFSEL) in the Control C
register (ADC.CTRLC). Default is the internal voltage reference of the device (VREF, as configured
there).
5. Configure the CLK_ADC by writing to the Prescaler bit field (PRESC) in the Control C register
(ADC.CTRLC).
6. Configure an input by writing to the MUXPOS bit field in the MUXPOS register (ADC.MUXPOS).
7. Optional: Enable Start Event input by writing a '1' to the Start Event Input bit (STARTEI) in the
Event Control register (ADC.EVCTRL). Configure the Event System accordingly.
8. Enable the ADC by writing a '1' to the ENABLE bit in ADC.CTRLA.
Following these steps will initialize the ADC for basic measurements, which can be triggered by an event
(if configured) or by writing a '1' to the Start Conversion bit (STCONV) in the Command register
(ADC.COMMAND).
30.3.2 Operation
8-bit PRESCALER
CLK_PER
CLK_PER/128
CLK_PER/256
CLK_PER/16
CLK_PER/32
CLK_PER/64
CLK_PER/4
CLK_PER/2
CLK_PER/8
PRESC
CTRLC
CLK_PER
STCONV
CLK_PER/2
CLK_PER/4
CLK_PER/8
be cleared when the result is read from the Result registers, or by writing a ‘1’ to the RESRDY bit in
ADC.INTFLAG.
Figure 30-8. ADC Timing Diagram - Single Conversion
1 2 3 4 5 6 7 8 9 10 11 12 13
CLK_ADC
ENABLE
STCONV
RESRDY
RES Result
sample
Both sampling time and sampling length can be adjusted using the Sample Delay bit field in Control D
(ADC.CTRLD) and sampling the Sample Length bit field in the Sample Control register
(ADC.SAMPCTRL). Both of these control the ADC sampling time in a number of CLK_ADC cycles. This
allows sampling high-impedance sources without relaxing conversion speed. See the register description
for further information. Total sampling time is given by:
2 + SAMPDLY + SAMPLEN
SampleTime =
�CLK_ADC
Figure 30-9. ADC Timing Diagram - Single Conversion With Delays
1 2 3 4 5 6 7 8 9 10 11 12 13
CLK_ADC
ENABLE
STCONV
RES Result
In Free-Running mode, a new conversion will be started immediately after the conversion completes,
while the STCONV bit is ‘1’. The sampling rate RS in free-running mode is calculated by:
�CLK_ADC
�S =
13 + SAMPDLY + SAMPLEN
Figure 30-10. ADC Timing Diagram - Free-Running Conversion
1 2 3 4 5 6 7 8 9 10 11 12 13 1 2
CLK_ADC
ENABLE
STCONV
RESRDY
RES Result
sample sample
IIH
ADCn
Rin
Cin
IIL
VDD/2
RESH and RESL are the high and low bytes of the Result register (ADCn.RES), and TEMPSENSEn are
the respective values from the Signature row.
It is recommended to follow these steps in user code:
Related Links
6.10.2.3 TEMPSENSEn
30.3.3 Events
An ADC conversion can be triggered automatically by an event input if the Start Event Input bit
(STARTEI) in the Event Control register (ADCn.EVCTRL) is written to '1'.
See also the description of the Asynchronous User Channel n Input Selection in the Event System
(EVSYS.ASYNCUSERn).
Related Links
14.5.5 ASYNCUSER
30.3.4 Interrupts
Table 30-2. Available Interrupt Vectors and Sources
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags register of
the peripheral (peripheral.INTFLAGS).
An interrupt source is enabled or disabled by writing to the corresponding enable bit in the peripheral's
Interrupt Control register (peripheral.INTCTRL).
An interrupt request is generated when the corresponding interrupt source is enabled and the interrupt
flag is set. The interrupt request remains active until the interrupt flag is cleared. See the peripheral's
INTFLAGS register for details on how to clear interrupt flags.
30.3.6 Synchronization
Not applicable.
30.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTBY RESSEL FREERUN ENABLE
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
0 Full 10-bit resolution. The 10-bit ADC results are accumulated or stored in the ADC Result
register (ADC.RES).
1 8-bit resolution. The conversion results are truncated to eight bits (MSBs) before they are
accumulated or stored in the ADC Result register (ADC.RES). The two Least Significant bits
are discarded.
Value Description
0 ADC is disabled
1 ADC is enabled
30.5.2 Control B
Name: CTRLB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SAMPNUM[2:0]
Access R/W R/W R/W
Reset 0 0 0
30.5.3 Control C
Name: CTRLC
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SAMPCAP REFSEL[1:0] PRESC[2:0]
Access R R/W R/W R/W R R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Value Description
0 Recommended for reference voltage values below 1V.
1 Reduced size of sampling capacitance. Recommended for higher reference voltages.
30.5.4 Control D
Name: CTRLD
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
INITDLY[2:0] ASDV SAMPDLY[3:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
30.5.5 Control E
Name: CTRLE
Offset: 0x4
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
WINCM[2:0]
Access R/W R/W R/W
Reset 0 0 0
Name: SAMPCTRL
Offset: 0x5
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
SAMPLEN[4:0]
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
30.5.7 MUXPOS
Name: MUXPOS
Offset: 0x06
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
MUXPOS[4:0]
Access R R R R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
30.5.8 Command
Name: COMMAND
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
STCONV
Access R R R R R R R R/W
Reset 0 0 0 0 0 0 0 0
Name: EVCTRL
Offset: 0x09
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
STARTEI
Access R/W
Reset 0
Name: INTCTRL
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
WCOMP RESRDY
Access R/W R/W
Reset 0 0
Name: INTFLAGS
Offset: 0x0B
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
WCOMP RESRDY
Access R/W R/W
Reset 0 0
Name: DBGCTRL
Offset: 0x0C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DBGRUN
Access R/W
Reset 0
Value Description
0 The peripheral is halted in Break Debug mode and ignores events
1 The peripheral will continue to run in Break Debug mode when the CPU is halted
30.5.13 Temporary
Name: TEMP
Offset: 0x0D
Reset: 0x00
Property: -
The Temporary register is used by the CPU for single-cycle, 16-bit access to the 16-bit registers of this
peripheral. It can be read and written by software. Refer to 16-bit access in the AVR CPU chapter. There
is one common Temporary register for all the 16-bit registers of this peripheral.
Bit 7 6 5 4 3 2 1 0
TEMP[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
30.5.14 Result
Name: RES
Offset: 0x10
Reset: 0x00
Property: -
The ADCn.RESL and ADCn.RESH register pair represents the 16-bit value, ADCn.RES. The low byte
[7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset
+ 0x01.
If the analog input is higher than the reference level of the ADC, the 10-bit ADC result will be equal the
maximum value of 0x3FF. Likewise, if the input is below 0V, the ADC result will be 0x000. As the ADC
cannot produce a result above 0x3FF values, the accumulated value will never exceed 0xFFC0 even
after the maximum allowed 64 accumulations.
Bit 15 14 13 12 11 10 9 8
RES[15:8]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
RES[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Name: WINLT
Offset: 0x12
Reset: 0x00
Property: -
This register is the 16-bit low threshold for the digital comparator monitoring the ADCn.RES register. The
ADC itself has a 10-bit output, RES[9:0], where the MSb is RES[9]. The data format in ADC and Digital
Accumulation is 1’s complement, where 0x0000 represents the '0' and 0xFFFF represents the largest
number (full scale).
The ADCn.WINLTH and ADCn.WINLTL register pair represents the 16-bit value, ADCn.WINLT. The low
byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at
offset + 0x01.
When accumulating samples, the window comparator thresholds are applied to the accumulated value
and not on each sample.
Bit 15 14 13 12 11 10 9 8
WINLT[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
WINLT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: WINHT
Offset: 0x14
Reset: 0x00
Property: -
This register is the 16-bit high threshold for the digital comparator monitoring the ADCn.RES register. The
ADC itself has a 10-bit output, RES[9:0], where the MSb is RES[9]. The data format in ADC and Digital
Accumulation is 1’s complement, where 0x0000 represents the '0' and 0xFFFF represents the largest
number (full scale).
The ADCn.WINHTH and ADCn.WINHTL register pair represents the 16-bit value, ADCn.WINHT. The low
byte [7:0] (suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at
offset + 0x01.
Bit 15 14 13 12 11 10 9 8
WINHT[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
WINHT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
30.5.17 Calibration
Name: CALIB
Offset: 0x16
Reset: 0x01
Property: -
Bit 7 6 5 4 3 2 1 0
DUTYCYC
Access R/W R/W R/W
Reset 0 0 1
Value Description
0 50% Duty Cycle must be used if ADCclk > 1.5 MHz
1 25% Duty Cycle (high 25% and low 75%) must be used for ADCclk ≤ 1.5 MHz
31.1 Features
• 8-bit Resolution
• Up to 350 ksps Conversion Rate
• High Drive Capabilities (DAC0)
• Functioning as Input to Analog Comparator (AC) or ADC
• Three Instances of the Peripheral: DAC0, DAC1, DAC2
31.2 Overview
The Digital-to-Analog Converter (DAC) converts a digital value written to the Data register (DAC.DATA) to
an analog voltage. The conversion range is between GND and the selected reference voltage.
The DAC features an 8-bit resistor-string type DAC, capable of converting 350,000 samples per second
(350 ksps). The DAC uses the internal Voltage Reference (VREF) as the upper limit for conversion. The
DAC has one continuous time output with high drive capabilities, which is able to drive 5 kΩ and/or 30 pF
load. The DAC conversion can be started from the application by writing to the Data Conversion registers.
This device has three instances of the DAC peripheral, DAC0, DAC1, and DAC2.
DATA 8
DAC OUT
Output
Driver
VREF
ENABLE
CTRLA
OUTEN
Related Links
11.2.2.1 Clocks
31.2.3.2 I/O Lines and Connections
31.2.3.5 Debug Operation
31.2.3.1 Clocks
This peripheral depends on the peripheral clock.
Related Links
10. CLKCTRL - Clock Controller
The DAC0 has one analog output pin (OUT) that must be configured before it can be used.
A DAC is also internally connected to the AC and to the ADC. To use this internal OUT as input, both
output and input must be configured in their respective registers.
Note: Only DAC0 has an output driver for an external pin.
Related Links
16. PORT - I/O Pin Configuration
29. AC - Analog Comparator
30. ADC - Analog-to-Digital Converter
31.2.3.3 Events
Not applicable.
31.2.3.4 Interrupts
Not applicable.
31.2.3.5 Debug Operation
This peripheral is unaffected by entering Debug mode.
If the peripheral is configured to require periodical service by the CPU through interrupts or similar,
improper operation or data loss may result during halted debugging.
Related Links
16. PORT - I/O Pin Configuration
31.3.1 Initialization
To operate the DAC, the following steps are required:
• Select the DAC reference voltage in the Voltage Reference (VREF) peripheral by writing the DAC
and AC Reference Selection bits (DAC0REFSEL) in the Control A register of the Voltage Reference
(VREF.CTRLA) for DAC0. For DAC1, use DAC1REFSEL in VREF.CTRLC. For DAC2, use
DAC2REFSEL in VREF.CTRLD.
• The conversion range is between GND and the selected reference voltage.
• Configure the further usage of the DAC output:
– Configure an internal peripheral (e.g. AC, ADC) to use the DAC output. See the according
peripheral's documentation.
– Enable the output to a pin by writing a '1' to the Output Enable bit (OUTEN) in the Control A
register (DAC.CTRLA). This requires configuration of the Port peripheral.
For DAC0, either one or both options are valid. Other instances of the DAC only support internal
signaling.
• Write an initial digital value to the Data register (DAC.DATA).
• Enable the DAC by writing a '1' to the ENABLE bit in the Control A register (DAC.CTRLA).
Related Links
18. VREF - Voltage Reference
29. AC - Analog Comparator
30. ADC - Analog-to-Digital Converter
31.3.2 Operation
output is only being used internally, it is not necessary to enable the pin output driver (i.e. OUTEN=0 in
DAC.CTRLA is acceptable).
Note: Only DAC0 has an output driver for an external pin.
Related Links
29. AC - Analog Comparator
30. ADC - Analog-to-Digital Converter
31.5.1 Control A
Name: CTRLA
Offset: 0x00
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RUNSTDBY OUTEN ENABLE
Access R/W R/W R/W
Reset 0 0 0
31.5.2 DATA
Name: DATA
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
DATA[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
32.1 Overview
The Peripheral Touch Controller (PTC) acquires signals in order to detect a touch on the capacitive
sensors. The external capacitive touch sensor is typically formed on a PCB, and the sensor electrodes
are connected to the analog front end of the PTC through the I/O pins in the device. The PTC supports
both self and mutual capacitance sensors.
In the Mutual Capacitance mode, sensing is done using capacitive touch matrices in various X-Y
configurations, including indium tin oxide (ITO) sensor grids. The PTC requires one pin per X-line and one
pin per Y-line.
In the Self Capacitance mode, the PTC requires only one pin (Y-line) for each touch sensor.
The number of available pins and the assignment of X- and Y-lines is depending on both package type
and device configuration. Refer to the Configuration Summary and I/O Multiplexing table for details.
Related Links
1.1 Configuration Summary
5. I/O Multiplexing and Considerations
32.2 Features
• Low-Power, High-Sensitivity, Environmentally Robust Capacitive Touch Buttons, Sliders, and
Wheels
• Supports Wake-up on Touch from power-save Sleep mode
• Supports Mutual Capacitance and Self Capacitance Sensing
– Mix-and-Match Mutual and Self Capacitance Sensors
• One Pin per Electrode – No External Components
• Load Compensating Charge Sensing
– Parasitic capacitance compensation and adjustable gain for superior sensitivity
• Zero Drift Over the Temperature and VDD Range
– Auto calibration and recalibration of sensors
• Single-shot and free-running Charge Measurement
• Hardware Noise Filtering and Noise Signal Desynchronization for High Conducted Immunity
• Driven Shield for Better Noise Immunity and Moisture Tolerance
– Any PTC X/Y line can be used for the driven shield
– All enabled sensors will be driven at the same potential as the sensor scanned
• Selectable channel change delay allows choosing the settling time on a new channel, as required
• Acquisition-start triggered by command or through auto-triggering feature
• Low CPU utilization through interrupt on acquisition-complete
• Using ADC peripheral for signal conversion and acquisition
Related Links
1.1 Configuration Summary
5. I/O Multiplexing and Considerations
Input Compensation
Control Circuit
Y0
Y1 RS
Charge ADC IRQ
Integrator System
Ym Result
10
CX0Y0
X0
Input Compensation
Control Circuit
Y0
Y1 RS
Charge ADC IRQ
CY0 Integrator System
Ym Result
10
CYm
Shield Driver
X Line Driver
Note: The number of X- and Y-lines are device dependent. Refer to Configuration Summary for details.
Refer to I/O Multiplexing and Considerations for details on the pin mapping for this peripheral. One signal
can be mapped on several pins.
Related Links
1.1 Configuration Summary
5. I/O Multiplexing and Considerations
Y1
Ym
MCU
Sensor Capacitance Cy
Y0
Cy0
Y1
Cy1
PTC
Module
Ym Cym
For more information about designing the touch sensor, refer to Buttons, Sliders and Wheels Touch
Sensor Design Guide.
32.5.2 Clocks
The PTC is clocked by the CLK_PER clock. See the Related Links for details on configuring CLK_PER.
Related Links
10. CLKCTRL - Clock Controller
Link Application
QTouch
Library
For more information about QTouch Library, refer to the QTouch Library Peripheral Touch Controller User
Guide.
33.1 Features
• Programming:
– External programming through UPDI 1-wire (1W) interface
• Enable programming by 12V or fuse
• Uses the RESET pin of the device for programming
• No GPIO pins occupied during operation
• Asynchronous Half-Duplex UART protocol towards the programmer
• Debugging:
– Memory mapped access to device address space (NVM, RAM, I/O)
– No limitation on device clock frequency
– Unlimited number of user program breakpoints
– Two hardware breakpoints
– Run-time readout of CPU Program Counter (PC), Stack Pointer (SP), and Status register
(SREG) for code profiling
– Program flow control
• Go, Stop, Reset, Step Into
– Non-intrusive run-time chip monitoring without accessing system registers
• Monitor CRC status and sleep status
• Unified Programming and Debug Interface (UPDI):
– Built-in error detection with error signature readout
– Frequency measurement of internal oscillators using the Event System
33.2 Overview
The Unified Program and Debug Interface (UPDI) is a proprietary interface for external programming and
on-chip debugging of a device.
The UPDI supports programming of nonvolatile memory (NVM) space; FLASH, EEPROM, fuses, lockbits,
and the user row. In addition, the UPDI can access the entire I/O and data space of the device. See the
NVM controller documentation for programming via the NVM controller and executing NVM controller
commands.
Programming and debugging are done through the UPDI Physical interface (UPDI PHY), which is a 1-
wire UART-based half duplex interface using the RESET pin for data reception and transmission.
Clocking of UPDI PHY is done by an internal oscillator. Enabling of the 1-wire interface, by disabling the
Reset functionality, is either done by 12V programming or by fusing the RESET pin to UPDI by setting the
RESET Pin Configuration (RSTPINCFG) bits in FUSE.SYSCFG0. The UPDI access layer grants access
to the bus matrix, with memory mapped access to system blocks such as memories, NVM, and
peripherals.
The Asynchronous System Interface (ASI) provides direct interface access to On-Chip Debugging (OCD),
NVM, and System Management features. This gives the debugger direct access to system information,
without requesting bus access.
Related Links
9. NVMCTRL - Nonvolatile Memory Controller
33.3.7 Enabling of KEY Protected Interfaces
Bus Matrix
NVM
UPDI PAD
(RX/TX Data) UPDI UPDI
Physical Access
layer layer Peripherals
ASI Access
Controller
System
NVM
OCD
Related Links
33.2.2.2 I/O Lines and Connections
33.2.2.4 Power Management
33.2.2.1 Clocks
The UPDI Physical (UPDI PHY) layer and UPDI Access (UPDI ACC) layer can operate on different clock
domains. The UPDI PHY layer clock is derived from an internal oscillator, and the UPDI ACC layer clock
is the same as the system clock. There is a synchronization boundary between the UPDI PHY layer and
the UPDI ACC layer, which ensures correct operation between the clock domains. The UPDI clock output
frequency is selected through the ASI, and the default UPDI clock start-up frequency is 4 MHz after
enabling the UPDI. The UPDI clock frequency is changed by writing the UPDICLKSEL bits in the
ASI_CTRLA register.
Figure 33-2. UPDI Clock Domains
ASI
UPDI Controller
SYNCH
UPDI UPDI
Physical Access
layer layer
Clock Clock
Controller Controller
Clk_UPDI
UPDI clk
source Clk_sys
UPDI Clk_sys
~ CLKSEL ~
Related Links
10. CLKCTRL - Clock Controller
St 0 1 2 3 4 5 6 7 P S1 S2
IDLE
BREAK
SYNCH (0x55)
St P S1 S2
Synch Part
End_synch
ACK (0x40)
St P S1 S2
Data Data frame consists of one Start bit (always low), eight data bits, one parity bit (even parity),
Frame and two Stop bits (always high). If the Start bit, parity bit, or Stop bits have an incorrect value,
an error will be detected and signalized by the UPDI. The parity bit-check in the UPDI can be
disabled by writing the PARD bit in UPDI.CTRLA, in which case the parity generation from the
debugger can be ignored.
IDLE Special frame that consists of 12 high bits. This is the same as keeping the transmission line
Frame in an Idle state.
BREAK Special frame that consists of 12 low bits. The BREAK frame is used to reset the UPDI back
to its default state and is typically used for error recovery.
SYNCH The SYNCH frame (0x55) is used by the Baud Rate Generator to set the baud rate for the
coming transmission. A SYNCH character is always expected by the UPDI in front of every
new instruction, and after a successful BREAK has been transmitted.
ACK The Acknowledge (ACK) character is transmitted from the UPDI whenever an ST or STS
instruction has successfully crossed the synchronization boundary and have gained bus
access. When an ACK is received by the debugger, the next transmission can start.
Sample
0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3
RxD BIT n
Sample
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
The transmission baud rate must be set up in relation to the selected UPDI clock, which can be adjusted
by UPDICLKSEL in UPDI.ASI_CTRLA. See Table 33-2 for recommended maximum and minimum baud
rate settings.
Table 33-2. Recommended UART Baud Rate Based on UPDICLKSEL Setting
The UPDI Baud Rate Generator utilizes fractional baud counting to minimize the transmission error. With
the fixed frame format used by the UPDI, the maximum and recommended receiver transmission error
limits can be seen in the following table:
Table 33-3. Receiver Baud Rate Error
A single BREAK character is enough to reset the UPDI, but in some special cases where the BREAK
character is sent when the UPDI has not yet entered the error state, a double BREAK character might be
needed. A double BREAK is ensured to reset the UPDI from any state. When sending a double BREAK it
is required to have at least one Stop bit between the BREAK characters.
No SYNCH character is required before the BREAK because the BREAK is used to reset the UPDI from
any state. This means that the UPDI will sample the BREAK based on the last stored baud rate setting,
derived from the last received valid SYNCH character. If the communication error was due to an incorrect
sampling of the SYNCH character, the baud rate is unknown to the connected debugger. For this reason,
the BREAK character should be transmitted at the slowest recommended baud rate setting for the
selected UPDI clock according to Table 33-4:
Table 33-4. Recommended BREAK Character Duration
33.3.2 Operation
The UPDI must be enabled before the UART communication can start.
RESET Hi-Z St D0 D1 D2 D3 D4 D5 D6 D7 Sp
Handshake / BREAK
SYNC (0x55)
TRES
(Autobaud)
UPDI.rxd (Ignore)
3
UPDI.txd Hi-Z Hi-Z
UPDI.txd = 0
TUPDI
debugger.
Hi-Z Hi-Z
UPDI.txd
Debugger.txd = 0 Debugger.txd = z
TDeb0 TDebZ
When the pull-up is detected, the debugger initiates the enable sequence by driving the line low for a
duration of TDeb0 to ensure that the line is released from the debugger before the UPDI enable sequence
is done.
The negative edge is detected by the UPDI, which requests the UPDI clock. The UPDI will continue to
drive the line low until the clock is stable and ready for the UPDI to use. The duration of this TUPDI will
vary, depending on the status of the oscillator when the UPDI is enabled. After this duration, the data line
will be released by the UPDI and pulled high.
When the debugger detects that the line is high, the initial SYNCH character (0x55) must be sent to
properly enable the UPDI for communication. If the Start bit of the SYNCH character is not sent well
within maximum TDebZ, the UPDI will disable itself, and the enable sequence must be repeated. This time
is based on counted cycles on the 4 MHz UPDI clock, which is the default when enabling the UPDI. The
disable is performed to avoid the UPDI being enabled unintentionally.
After successful SYNCH character transmission, the first instruction frame can be transmitted.
Related Links
37.19 UPDI Timing
37.19 UPDI Timing
(Ignore) Hi-Z St D0 D1 D2 D3 D4 D5 D6 D7 Sp
UPDIPAD
12V ramp Handshake / BREAK
SYNC (0x55)
Tmin10ns Debugger.txd = z Tmin10us
(Autobaud)
Tmax4ms Tmin1us Tmax200us
Tmax10us
(Ignore)
UPDI.rxd
Hi-Z 2 Hi-Z
UPDI.txd
UPDI.txd = 0
Tmin10us,
Tmax200us
Debugger.txd = 0 Debugger.txd = z.
Tmin200ns Tmin200us,
12V Tmax1us Tmax14ms
debugger.
UPDI.o12v Vdd
When enabled by 12V, only a POR will disable the UPDI configuration on the RESET pin, and restore the
default setting. If issuing a UPDI Disable command through the UPDIDIS bit in UPDI.CTRLB, the UPDI
will be reset and the clock request will be canceled, but the RESET pin will remain in UPDI configuration.
Note: If insufficient external protection is added to the UPDI Pin, an ESD pulse can be interpreted as a
12V override by the microcontroller and enables the UPDI.
33.3.2.3 UPDI Disable
Any programming or debug session should be terminated by writing the UPDIDIS bit in UPDI.CTRLB.
Writing this bit will reset the UPDI including any decoded KEYs and disable the oscillator request for the
module. If the disable operation is not performed the UPDI will stay enabled and request its oscillator,
causing increased power consumption for the application.
During the enable sequence the UPDI can disable itself in case of a faulty enable sequence. There are
two cases that will cause an automatic disable:
• A SYNCH character is not sent within 13.5 ms after the initial enable pulse described in 33.3.2.1
UPDI Enable with Fuse Override of RESET Pin.
• The first SYNCH character after an initiated enable is too short or too long to register as a valid
SYNCH character. See Table 33-2 for recommended baud rate operating ranges.
33.3.2.4 Output Enable Timer Protection for GPIO Configuration
When the RESET Pin Configuration (RSTPINCFG) bits in FUSE.SYSCFG0 are 0x0, the RESET pin is
configured as GPIO. To avoid the potential conflict between the GPIO actively driving the output and a
12V UPDI enable sequence initiation, a timer protection is disabling the output enable for a minimum time
of 8.8 ms after each System Reset.
It is always recommended to issue a System Reset before entering the 12V programming sequence.
33.3.2.5 UPDI Communication Error Handling
The UPDI contains a comprehensive error detection system that provides information to the debugger
when recovering from an error scenario. The error detection consists of detecting physical transmission
errors like start bit error, parity error, contention error, and frame error, to more high-level errors like
access time-out error. See the PESIG bits in UPDI_STATUSB for an overview of the available error
signatures.
Whenever the UPDI detects an error, it will immediately transfer to an internal error state to avoid
unwanted system communication. In the error state, the UPDI will ignore all incoming data requests,
except if a BREAK character is transmitted. The following procedure should always be applied when
recovering from an error condition.
• Send a BREAK character. See 33.3.1.2 BREAK Character for recommended BREAK character
handling.
• Send a SYNCH character at the desired baud rate for the next data transfer. Upon receiving a
BREAK the UPDI oscillator setting in UPDI.ASI_CTRLA is reset to the 4 MHz default UPDI clock
selection. This affects the baud rate range of the UPDI according to Table 33-2.
• Do a Load Control Status (LDCS) to UPDI.STATUSB register to read the PESIG field. PESIG gives
information about the occurred error, and the error signature will be cleared when read.
• The UPDI is now recovered from the error state and ready to receive the next SYNCH character
and instruction.
33.3.2.6 Direction Change
In order to ensure correct timing for half duplex UART operation, the UPDI has a built-in Guard Time
mechanism to relax the timing when changing direction from RX mode to TX mode. The Guard Time is a
number of IDLE bits inserted before the next Start bit is transmitted. The number of IDLE bits can be
configured through GTVAL in UPDI.CTRLA. The duration of each IDLE bit is given by the baud rate used
by the current transmission.
It is not recommended to use GTVAL setting 0x7, with no additional IDLE bits.
St R X D a ta F ra m e P S1 S2 I D L E b it s St T X D a ta F r a m e P S1 S2
The UPDI Guard Time is the minimum IDLE time that the connected debugger will experience when
waiting for data from the UPDI. Because of the asynchronous interface to the system, as presented in
33.2.2.1 Clocks, the ratio between the UPDI clock and the system clock will affect the synchronization
time, and how long it takes before the UPDI can transmit data. In the cases where the synchronization
delay is shorter than the current Guard Time setting, the Guard Time will be given by GTVAL directly.
LD 0 0 1 0
S ize A - A d d re s s s ize
0 0 B y te
0 1 W o rd (2 B y te s )
ST 0 1 1 0
1 0 R e s e rv e d
1 1 R e s e rv e d
CS Address
P tr - P o in ter a c c es s
0 0 * (p tr)
L DCS 1 0 0 0
0 1 * (p tr+ + )
1 0 p tr
1 1 R e s e rv e d
STCS 1 1 0 0
C S A d d r e s s (C S - C o n t r o l /S t a t u s r e g .)
SIB Size C
0 0 0 0 R eg 0
0 0 0 1 R eg 1
K EY 1 1 1 0 0
0 0 1 0 R eg 2
0 0 1 1 R eg 3
0 1 0 0 R e g 4 (A S I C S s p a c e )
......
1 1 1 1 R e s e rv e d
S ize C - K ey s ize
0 0 6 4 b it s ( 8 B y t e s )
0 1 1 2 8 b it s ( 1 6 B y t e s )
1 0 R e s e rv e d
1 1 R e s e rv e d
S IB – S y s t e m I n f o r m a t i o n B l o c k s e l .
0 R e c e iv e K E Y
1 S e n d S IB
33.3.3.1 LDS - Load Data from Data Space Using Direct Addressing
The LDS instruction is used to load data from the bus matrix and into the serial shift register for serial
readout. The LDS instruction is based on direct addressing, and the address must be given as an
operand to the instruction for the data transfer to start. Maximum supported size for address and data is
16 bits. LDS instruction supports repeated memory access when combined with the REPEAT instruction.
As shown in Figure 33-9, after issuing the SYNCH character followed by the LDS instruction, the number
of desired address bytes, as indicated by the Size A field in the instruction, must be transmitted. The
output data size is selected by the Size B field and is issued after the specified Guard Time. When
combined with the REPEAT instruction, the address must be sent in for each iteration of the repeat,
meaning after each time the output data sampling is done. There is no automatic address increment
when using REPEAT with LDS, as it uses a direct addressing protocol.
Figure 33-9. LDS Instruction Operation
0 0 0 0 0 0 B y te
L DS
0 1 W o rd (2 B y te s )
1 0 R e s e rv e d
1 1 R e s e rv e d
ADR SIZE
Synch Rx
LDS A d r_ 0 A d r_ n
(0x55)
D a ta _ 0 D a ta _ n Tx
ΔGT
0 1 0 0 0 0 B y te
STS
0 1 W o rd (2 B y te s )
1 0 R e s e rv e d
1 1 R e s e rv e d
Synch Rx
STS A d r_ 0 A d r_ n D a ta _ 0 D a ta _ n
(0x55)
ACK ACK Tx
ΔGT ΔGT
The transfer protocol for an STS instruction is depicted in the figure as well, following this sequence:
1. The address is sent.
2. An Acknowledge (ACK) is sent back from the UPDI if the transfer was successful.
3. The number of bytes as specified in the STS instruction is sent.
4. A new ACK is received after the data has been successfully transferred.
33.3.3.3 LD - Load Data from Data Space Using Indirect Addressing
The LD instruction is used to load data from the bus matrix and into the serial shift register for serial
readout. The LD instruction is based on indirect addressing, which means that the Address Pointer in the
UPDI needs to be written prior to bus matrix access. Automatic pointer post-increment operation is
supported and is useful when the LD instruction is used with REPEAT. It is also possible to do an LD of the
UPDI Pointer register. The maximum supported size for address and data load is 16 bits.
Synch
LD
(0x55) DATA SIZE Rx
D a ta _ 0 D a ta _ n
Tx
ΔGT
The figure above shows an example of a typical LD sequence, where data is received after the Guard
Time period. Loading data from the UPDI Pointer register follows the same transmission protocol.
33.3.3.4 ST - Store Data from Data Space Using Indirect Addressing
The ST instruction is used to store data that is shifted serially into the PHY layer to the bus matrix address
space. The ST instruction is based on indirect addressing, which means that the Address Pointer in the
UPDI needs to be written prior to bus matrix access. Automatic pointer post-increment operation is
supported, and is useful when the ST instruction is used with REPEAT. ST is also used to store the UPDI
Address Pointer into the Pointer register. The maximum supported size for storing address and data is 16
bits.
ADDRESS_SIZE
Synch
ST ADR _0 ADR _n Rx
(0x55)
ACK Tx
ΔGT
Block SIZE
Synch Rx
ST D a ta _ 0 D a ta _ n
(0x55)
ACK Tx
ΔGT
The figure above gives an example of ST to the UPDI Pointer register and store of regular data. In both
cases, an Acknowledge (ACK) is returned by the UPDI if the store was successful and a SYNCH
character is sent before each instruction. To write the UPDI Pointer register, the following procedure
should be followed:
• Set the PTR field in the ST instruction to the signature 0x2
• Set the address size field Size A to the desired address size
• After issuing the ST instruction, send Size A bytes of address data
• Wait for the ACK character, which signifies a successful write to the Address register
After the Address register is written, sending data is done in a similar fashion:
• Set the PTR field in the ST instruction to the signature 0x0 to write to the address specified by the
UPDI Pointer register. If the PTR field is set to 0x1, the UPDI pointer is automatically updated to the
next address according to the data size Size B field of the instruction after the write is executed
• Set the Size B field in the instruction to the desired data size
• After sending the ST instruction, send Size B bytes of address data
• Wait for the ACK character which signifies a successful write to the bus matrix
When used with the REPEAT, it is recommended to set up the address register with the start address for
the block to be written and use the Pointer Post Increment register to automatically increase the address
for each repeat cycle. When using REPEAT, the data frame of Size B data bytes can be sent after each
received ACK.
33.3.3.5 LCDS - Load Data from Control and Status Register Space
The LCDS instruction is used to load data from the UPDI and ASI CS-space. LCDS is based on direct
addressing, where the address is part of the instruction opcode. The total address space for LCDS is 16
bytes and can only access the internal UPDI register space. This instruction only supports byte access
and the data size is not configurable.
Figure 33-13. LCDS Instruction Operation
OPCODE CS Address
CS Address (CS - Control/Status reg.)
0 0 0 0 Reg 0
L DCS 1 0 0 0 0 0 0 1 Reg 1
0 0 1 0 Reg 2
0 0 1 1 Reg 3
0 1 0 0 Reg 4 (ASI CS Space)
......
1 1 1 1 Reserved
Synch
(0x55)
LDCS Rx
Data Tx
Δgt
The figure above shows a typical example of LCDS data transmission. A data byte from the LCDS space is
transmitted from the UPDI after the Guard Time is completed.
33.3.3.6 STCS (Store Data to Control and Status Register Space)
The STCS instruction is used to store data to the UPDI and ASI CS-space. STCS is based on direct
addressing, where the address is part of the instruction opcode. The total address space for STCS is 16
bytes, and can only access the internal UPDI register space. This instruction only supports byte access,
and data size is not configurable.
OPCODE CS Address
C S A d d r e s s (C S - C o n t r o l /S t a t u s r e g .)
0 0 0 0 R eg 0
STCS 1 1 0 0 0 0 0 1 R eg 1
0 0 1 0 R eg 2
0 0 1 1 R eg 3
0 1 0 0 R e g 4 (A S I C S S p a c e )
......
1 1 1 1 R e s e rv e d
Synch
STCS D a ta
(0x55) Rx
Tx
Figure 33-14 shows the data frame transmitted after the SYNCH and instruction frames. There is no
response generated from the STCS instruction, as is the case for ST and STS.
OPCODE Size B
S ize B - D ata s ize
0 0 B y te
REPEA T 1 0 1 0 0 0
0 1 R e s e rv e d
1 0 R e s e rv e d
1 1 R e s e rv e d
REPEAT SIZE
Synch
REPEA T RPT_0
(0x55) Rpt nr of Blocks of DATA_SIZE
Synch ST Rx
D a ta _ 0 D a ta _ n D a ta B _ 1 D a ta B _ n
(0x55) (p t r + + )
ACK ACK Tx
Δd Δd Δd Δd Δd
The figure above gives an example of repeat operation with an ST instruction using pointer post-
increment operation. After the REPEAT instruction is sent with RPT_0 = n, the first ST instruction is
issued with SYNCH and Instruction frame, while the next n ST instructions are executed by only sending
in data bytes according to the ST operand DATA_SIZE, and maintaining the Acknowledge (ACK)
handshake protocol.
If using indirect addressing instructions (LD/ST) it is recommended to always use the pointer post
increment option when combined with REPEAT. Otherwise, the same address will be accessed in all
repeated access operations. For direct addressing instructions (LDS/STS), the address must always be
transmitted as specified in the instruction protocol, before data can be received (LDS) or sent (STS).
SIB Size C
S ize C - K ey s ize
0 0 6 4 b it s ( 8 B y t e s )
K EY 1 1 1 0 0
0 1 1 2 8 b it s ( 1 6 B y t e s ) ( S IB o n ly )
1 0 R e s e rv e d
1 1 R e s e rv e d
S IB – S y s t e m I n f o r m a t i o n B l o c k s e l .
0 Send KEY
1 R e c e iv e S I B
KEY SIZE
Synch
K EY KEY_0 KEY_n Rx
(0x55)
Tx
Synch Rx
K EY
(0x55)
Tx
S IB _ 0 S IB _ n
Δgt
SIB SIZE
The figure above shows the transmission of a KEY and the reception of a SIB. In both cases, the SIZE_C
field in the opcode determines the number of frames being sent or received. There is no response after
sending a KEY to the UPDI. When requesting the SIB, data will be transmitted from the UPDI according to
the current Guard Time setting.
on the input event should be used for the measurement. See the figure below for an example using
10 kbps UPDI SYNCH character pulses, giving a capture window of 200 µs for the timer.
• It is possible to read out the captured value directly after the SYNCH character by reading the
TCBn.CCMP register or the value can be written to memory by the CPU once the capture is done.
Figure 33-17. UPDI System Clock Measurement Events
Ignore first
capture event
200us
UPDI_
Input
RX
Debugger S S S S S S
RPT CNT LD*(ptr) GT D0 D1 D2 D3 D4 D5
Data B B B B B B
TX
Debugger D1lots D1lost
D0 D2 D4
Processing
RX
Debugger S IB S IB S IB S
RPT CNT LD*(ptr) GT D0 D1 D2 D3
Data B B B B
TX
Debugger
D0 D1 D2 D3
Processing
GT denotes the Guard Time insertion, SB is for Stop bit and IB is the inserted interbyte delay. The rest of
the frames are data and instructions.
The next table gives an overview of the available KEY signatures that must be shifted in to activate the
interfaces.
CAUTION
During Chip Erase, the BOD is forced ON (ACTIVE=0x1 in BOD.CTRLA) and uses the BOD
Level from the BOD Configuration fuse (LVL in BOD.CTRLB = LVL in FUSE.BODCFG). If the
supply voltage VDD is below that threshold level, the device is unserviceable until VDD is
increased adequately.
33.3.8 Events
The UPDI is connected to the Event System (EVSYS) as described in the register Asynchronous Channel
n Generator Selection.
The UPDI can generate the following output events:
• SYNCH Character Positive Edge Event
This event is set on the UPDI clock for each detected positive edge in the SYNCH character, and it is not
possible to disable this event from the UPDI. The recommended application for this event is system clock
frequency measurement through the UPDI. Section 33.3.4 System Clock Measurement with UPDI
provides the details on how to set up the system for this operation.
Related Links
14. EVSYS - Event System
33.5.1 Status A
Name: STATUSA
Offset: 0x00
Reset: 0x10
Property: -
Bit 7 6 5 4 3 2 1 0
UPDIREV[3:0]
Access R R R R
Reset 0 0 0 1
33.5.2 Status B
Name: STATUSB
Offset: 0x01
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PESIG[2:0]
Access R R R
Reset 0 0 0
33.5.3 Control A
Name: CTRLA
Offset: 0x02
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
IBDLY PARD DTD RSD GTVAL[2:0]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Value Description
0x0 UPDI Guard Time: 128 cycles (default)
0x1 UPDI Guard Time: 64 cycles
0x2 UPDI Guard Time: 32 cycles
0x3 UPDI Guard Time: 16 cycles
0x4 UPDI Guard Time: 8 cycles
0x5 UPDI Guard Time: 4 cycles
0x6 UPDI Guard Time: 2 cycles
0x7 GT off (no extra Idle bits inserted)
33.5.4 Control B
Name: CTRLB
Offset: 0x03
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
NACKDIS CCDETDIS UPDIDIS
Access R R R
Reset 0 0 0
Name: ASI_KEY_STATUS
Offset: 0x07
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
UROWWRITE NVMPROG CHIPERASE
Access R/W R R
Reset 0 0 0
Name: ASI_RESET_REQ
Offset: 0x08
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RSTREQ[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: ASI_CTRLA
Offset: 0x09
Reset: 0x02
Property: -
Bit 7 6 5 4 3 2 1 0
UPDICLKSEL[1:0]
Access R/W R/W
Reset 1 1
Value Description
0x0 Reserved
0x1 16 MHz UPDI clock
0x2 8 MHz UPDI clock
0x3 4 MHz UPDI clock (Default Setting)
Name: ASI_SYS_CTRLA
Offset: 0x0A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
UROWWRITE_ CLKREQ
FINAL
Access R R R R R R R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: ASI_SYS_STATUS
Offset: 0x0B
Reset: 0x01
Property: -
Bit 7 6 5 4 3 2 1 0
RSTSYS INSLEEP NVMPROG UROWPROG LOCKSTATUS
Access R R R R R
Reset 0 0 0 0 1
Name: ASI_CRC_STATUS
Offset: 0x0C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
CRC_STATUS[2:0]
Access R R R
Reset 0 0 0
Value Description
0x0 Not enabled
0x1 CRC enabled, busy
0x2 CRC enabled, done with OK signature
0x4 CRC enabled, done with FAILED signature
Other Reserved
FMULSU Rd,Rr Fractional Multiply Signed with R1:R0 ← Rd x Rr<<1 (SU) Z,C 2
Unsigned
PC(21:16) ← 0
SBIS A, b Skip if Bit in I/O Register Set If (I/O(A,b) =1) ← PC + 2 or 3 None 1/2/3
PC
LDS Rd, k Load Direct from data space Rd ← (k) None 3(1)
Note:
1. Cycle time for data memory accesses assume internal RAM access and are not valid for accesses
through the NVM controller. A minimum of one extra cycle must be added when accessing memory
through the NVM controller (such as Flash and EEPROM), but depending on simultaneous
accesses by other masters or the NVM controller state, there may be more than one extra cycle.
35. Conventions
Symbol Description
165 Decimal number
0b0101 Binary number (example 0b0101 = 5 decimal)
'0101' Binary numbers are given without prefix if
unambiguous
0x3B24 Hexadecimal number
X Represents an unknown or do not care value
Z Represents a high-impedance (floating) state for
either a signal or a bus
Symbol Description
KB kilobyte (210 = 1024)
MB megabyte (220 = 1024*1024)
GB gigabyte (230 = 1024*1024*1024)
b bit (binary '0' or '1')
B byte (8 bits)
1 kbit/s 1,000 bit/s rate (not 1,024 bit/s)
1 Mbit/s 1,000,000 bit/s rate
1 Gbit/s 1,000,000,000 bit/s rate
word 16-bit
Symbol Description
kHz 1 kHz = 103 Hz = 1,000 Hz
KHz 1 KHz = 1,024 Hz, 32 KHz = 32,768 Hz
MHz 1 MHz = 106 Hz = 1,000,000 Hz
Symbol Description
GHz 1 GHz = 109 Hz = 1,000,000,000 Hz
s second
ms millisecond
µs microsecond
ns nanosecond
Symbol Description
R/W Read/Write accessible register bit. The user can read from and write to this bit.
R Read-only accessible register bit. The user can only read this bit. Writes will be
ignored.
W Write-only accessible register bit. The user can only write this bit. Reading this bit will
return an undefined value.
BIT Bit names are shown in uppercase. (Example ENABLE)
FIELD[n:m] A set of bits from bit n down to m. (Example: PINA[3:0] = {PINA3, PINA2, PINA1,
PINA0}
Reserved Reserved bits are unused and reserved for future use. For compatibility with future
devices, always write reserved bits to zero when the register is written. Reserved bits
will always return zero when read.
Reserved bit field values must not be written to a bit field. A reserved value will not be
read from a read-only bit field.
Do not write any value to reserved bits of a fuse.
PERIPHERALi If several instances of a peripheral exist, the peripheral name is followed by a number
to indicate the number of the instance in the range 0-n. PERIPHERAL0 denotes one
specific instance.
Reset Value of a register after a power Reset. This is also the value of registers in a
peripheral after performing a software Reset of the peripheral, except for the Debug
Control registers.
SET/CLR Registers with SET/CLR suffix allows the user to clear and set bits in a register without
doing a read-modify-write operation. These registers always come in pairs. Writing a ‘1’
to a bit in the CLR register will clear the corresponding bit in both registers, while
writing a ‘1’ to a bit in the SET register will set the corresponding bit in both registers.
Both registers will return the same value when read. If both registers are written
simultaneously, the write to the CLR register will take precedence.
Abbreviation Description
AC Analog Comparator
ACK Acknowledge
ADC Analog-to-Digital Converter
ADDR Address
AES Advanced Encryption Standard
ALU Arithmetic Logic Unit
AREF Analog reference voltage, also VREFA
BLB Boot Lock Bit
BOD Brown-out Detector
CAL Calibration
CCMP Compare/Capture
CCL Configurable Custom Logic
CCP Configuration Change Protection
CLK Clock
CLKCTRL Clock Controller
CRC Cyclic Redundancy Check
CTRL Control
DAC Digital-to-Analog Converter
DFLL Digital Frequency Locked Loop
DMAC DMA (Direct Memory Access) Controller
DNL Differential Nonlinearity (ADC characteristics)
EEPROM Electrically Erasable Programmable Read-Only Memory
EVSYS Event System
GND Ground
GPIO General Purpose Input/Output
I2C Inter-Integrated Circuit
IF Interrupt flag
INL Integral Nonlinearity (ADC characteristics)
Abbreviation Description
INT Interrupt
IrDA Infrared Data Association
IVEC Interrupt Vector
LSB Least Significant Byte
LSb Least Significant bit
LUT Look Up Table
MBIST Memory Built-in Self-test
MSB Most Significant Byte
MSb Most Significant bit
NACK Not Acknowledge
NMI Non-maskable interrupt
NVM Nonvolatile Memory
NVMCTRL Nonvolatile Memory Controller
OPAMP Operation Amplifier
OSC Oscillator
PC Program Counter
PER Period
POR Power-on Reset
PORT I/O Pin Configuration
PTC Peripheral Touch Controller
PWM Pulse-width Modulation
RAM Random Access Memory
REF Reference
REQ Request
RISC Reduced Instruction Set Computer
RSTCTRL Reset Controller
RTC Real-time Counter
RX Receiver/Receive
SERCOM Serial Communication Interface
SLPCTRL Sleep Controller
SMBus System Management Bus
SP Stack Pointer
Abbreviation Description
SPI Serial Peripheral Interface
SRAM Static Random Access Memory
SYSCFG System Configuration
TC Timer/Counter (Optionally superseded by a letter indicating type of TC)
TRNG True Random Number Generator
TWI Two-wire Interface
TX Transmitter/Transmit
ULP Ultra Low Power
UPDI Unified Program and Debug Interface
USART Universal Synchronous and Asynchronous Serial Receiver and Transmitter
USB Universal Serial Bus
VDD Voltage to be applied to VDD
VREF Voltage Reference
VCM Voltage Common mode
WDT Watchdog Timer
XOSC Crystal Oscillator
37.1 Disclaimer
All typical values are measured at T = 25°C and VDD = 3V unless otherwise specified. All minimum and
maximum values are valid across operating temperature and voltage unless otherwise specified.
Note:
1. – If VPIN is lower than GND-0.6V, then a current limiting resistor is required. The negative DC
injection current limiting resistor is calculated as R = (GND-0.6V – Vpin)/ICn.
– If VPIN is greater than VDD+0.6V, then a current limiting resistor is required. The positive DC
injection current limiting resistor is calculated as R = (Vpin-(VDD+0.6))/ICn.
CAUTION
VRSTMAX = 13V
Care should be taken to avoid overshoot (overvoltage) when connecting the RESET pin to a
12V source. Exposing the pin to a voltage above the rated absolute maximum can activate the
pin’s ESD protection circuitry, which will remain activated until the voltage has been brought
below approximately 10V. A 12V driver can keep the ESD protection in an activated state (if
activated by an overvoltage condition) while driving currents through it, potentially causing
permanent damage to the part.
Note:
1. Refer to the device ordering codes for the device temperature range.
2. Operation ensured down to 1.8V or VBOD with BODLEVEL0, whichever is lower.
3. Extended temperature range is only ensured down to 2.7V.
Table 37-3. Operating Voltage and Frequency
0 10
VDD=[2.7, 5.5]V
T=[-40, 105]°C(2)
0 20
VDD=[4.5, 5.5]V
T=[-40, 105]°C(3)
0 8
VDD=[2.7, 5.5]V
T=[-40, 125]°C(2)
0 16
VDD=[4.5, 5.5]V
T=[-40, 125]°C(3)
Note:
1. Operation ensured down to BOD triggering level, VBOD with BODLEVEL0.
20MHz
10MHz
Safe Operating Area
5MHz
Related Links
37.6 Power Consumption of Peripherals
Note:
1. Current consumption of the module only. To calculate the total power consumption of the system,
add this value to the base power consumption as listed in Power Consumption.
2. CPU in Standby mode.
Related Links
37.4 Power Consumption for ATtiny1614
VPOR POR threshold voltage on VDD falling VDD falls/rises at 0.5 V/ms or slower 0.8 - 1.6 V
Interrupt level 1 - 13 -
Interrupt level 2 - 25 -
BODLEVEL2 - 40 -
BODLEVEL0 - 25 -
Sampled, 1 kHz - 1 - ms
Sampled, 125 Hz - 8 -
Accuracy with 16 MHz and 20 MHz Factory calibrated T=25°C, 3.0V -3.0 - 3.0 %
frequency selection
-4.0 - 4.0
T=[0, 70]°C,
VDD=[1.8, 3.6]V(3)
DC Duty cycle - 50 - %
Note:
Note:
1. These values are based on characterization and not covered by production test limits.
Table 37-14. 32.768 kHz External Crystal Oscillator (XOSC32K) Characteristics
Symbol Description Condition Min. Typ. Max. Unit
CL=12.5 pF - - 40
V IH1
V IL1
IIH / IIL I/O pin Input leakage current, except RESET pin as I/O VDD=5.5V, Pin high - < 0.05 - µA
VDD=5.0V, IOL=15 mA - - 1
VDD=5.0V, IOH=15 mA 4 - -
Itotal Maximum combined I/O sink current per pin group(1) - - 100 mA
VOL2 I/O pin drive strength on RESET pin as I/O VDD=1.8V, IOL=0.1 mA - - 0.36 V
VDD=5.0V, IOL=0.5 mA - - 1
VOH2 I/O pin drive strength on RESET pin as I/O VDD=1.8V, IOH=0.1 mA 1.44 - - V
VDD=5.0V, IOH=0.5 mA 4 - -
Rp Pull-up resistor 20 35 50 kΩ
Note:
1. Pin group A (PA[7:0]), pin group B (PB[7:0]). The combined continuous sink/source current for all
I/O ports should not exceed the limits.
37.11 USART
Figure 37-3. USART in SPI Mode - Timing Requirements in Master Mode
SS
SCK
(CPOL = 0)
tSCKW
SCK
(CPOL = 1)
tSCKW
tMIS tMIH tSCK
MISO
MSB LSB
(Data Input)
tMOH tMOH
MOSI
MSB LSB
(Data Output)
37.12 SPI
Figure 37-4. SPI - Timing Requirements in Master Mode
SS
SCK
(CPOL = 0)
tSCKW
SCK
(CPOL = 1)
tSCKW
tMIS tMIH tSCK
MISO
MSB LSB
(Data Input)
tMOH tMOH
MOSI
MSB LSB
(Data Output)
SS
SCK
(CPOL = 0)
tSSCKW
SCK
(CPOL = 1)
tSSCKW
tSIS tSIH tSSCK
MOSI
MSB LSB
(Data Input)
MISO
MSB LSB
(Data Output)
37.13 TWI
Figure 37-6. TWI - Timing Requirements
t of t HIGH tr
t LOW t LOW
SCL
t SU;STA t HD;STA t HD;DAT t SU;DAT
t SU;STO
SDA
t BUF
37.14 VREF
Table 37-20. Internal Voltage Reference Characteristics
Note:
1. These values are based on characterization and not covered by production test limits.
2. The symbols INTxxV refer to the respective values of the ADC0REFSEL and DAC0REFSEL bit
fields in the VREF.CTRLA register.
Table 37-22. DAC and AC Internal Voltage Reference Characteristics(1)
Note:
1. These values are based on characterization and not covered by production test limits.
2. The symbols INTxxV refer to the respective values of the ADC0REFSEL and DAC0REFSEL bit
fields in the VREF.CTRLA register.
37.15 ADC
Operating conditions:
• VDD = 1.8 to 5.5V
• Temperature = -40°C to 125°C
• DUTYCYC = 25%
• CLKADC = 13 * fADC
• SAMPCAP is 10 pF for 0.55V reference, while it is set to 5 pF for VREF≥1.1V
• Applies for all allowed combinations of VREF selections and Sample Rates unless otherwise noted
Table 37-23. Power Supply, Reference, and Input Range
Note:
1. A DNL error of less than or equal to 1 LSB ensures a monotonic transfer function with no missing
codes.
2. These values are based on characterization and not covered by production test limits.
3. Reference setting and fADC must fulfill the specification in "Clock and Timing Characteristics" and
"Power supply, Reference, and Input Range" tables.
37.16 DAC
VDD=3V, unless stated otherwise.
Note: 1. Supply voltage must meet the VDD specification for the VREF level used as DAC reference.
Table 37-27. Clock and Timing Characteristics
37.17 AC
Table 37-29. Analog Comparator Characteristics, Low-Power Mode Disabled
37.18 PTC
Table 37-31. Peripheral Touch Controller Characteristics - Operating Ratings
RESET Hi-Z St D0 D1 D2 D3 D4 D5 D6 D7 Sp
Handshake / BREAK
SYNC (0x55)
TRES
(Autobaud)
UPDI.rxd (Ignore)
3
UPDI.txd Hi-Z Hi-Z
UPDI.txd = 0
TUPDI
debugger.
Hi-Z Hi-Z
UPDI.txd
Debugger.txd = 0 Debugger.txd = z
TDeb0 TDebZ
Related Links
33.3.2.1 UPDI Enable with Fuse Override of RESET Pin
6.0
5.0
4.0
3.0
2.0
1.0
0.0
0 2 4 6 8 10 12 14 16 18 20
Frequency [MHz]
Figure 38-2. ATtiny1614 Active Supply Current vs. Frequency [0.1, 1.0] MHz at T=25°C
600 Vdd [V]
1.8
540 2.2
2.7
480 3
3.6
420
4.2
360 5
5.5
Idd [µA]
300
240
180
120
60
0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Frequency [MHz]
Figure 38-3. ATtiny1614 Active Supply Current vs. Temperature (f=20 MHz OSC20M)
12.0 Vdd [V]
4.5
11.0
5
10.0 5.5
9.0
8.0
7.0
Idd [mA]
6.0
5.0
4.0
3.0
2.0
1.0
0.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
Figure 38-4. ATtiny1614 Active Supply Current vs. VDD (f=[1.25, 20] MHz OSC20M) at T=25°C
12.0 Frequency [MHz]
1.25
2.5
10.0 5
10
20
8.0
Idd [mA]
6.0
4.0
2.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-5. ATtiny1614 Active Supply Current vs. VDD (f=32 KHz OSCULP32K)
40 Temperature
-40
36 -20
0
32 25
70
28
85
24 105
125
Idd [µA]
20
16
12
0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
2.5
2.0
1.5
1.0
0.5
0.0
0 2 4 6 8 10 12 14 16 18 20
Frequency [MHz]
Figure 38-7. ATtiny1614 Idle Supply Current vs. Low Frequency (0.1-1.0 MHz) at T=25°C
250 Vdd [V]
1.8
225 2.2
2.7
200 3
3.6
175
4.2
150 5
5.5
Idd [µA]
125
100
75
50
25
0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Frequency [MHz]
Figure 38-8. ATtiny1614 Idle Supply Current vs. Temperature (f=20 MHz OSC20M)
4.5
4.0
3.5
Idd [mA]
3.0
2.5
2.0
1.5
1.0
0.5
0.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
Figure 38-9. ATtiny1614 Idle Supply Current vs. VDD (f=32 KHz OSCULP32K)
20 Temperature
-40
18 -20
0
16 25
70
14
85
12 105
125
Idd [µA]
10
0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
2.5
2.0
1.5
1.0
0.5
0.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
Figure 38-11. ATtiny1614 Power-Down Mode Supply Current vs. VDD (all functions disabled)
5.0 Temperature [°C]
-40
4.5 -20
0
4.0 25
70
3.5 85
105
3.0 125
2.5
2.0
1.5
1.0
0.5
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
5.0
4.0
3.0
2.0
1.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
VDD [V]
Figure 38-13. ATtiny1614 Standby Mode Supply Current vs. VDD (RTC Running with Internal
OSCULP32K)
10.0 Temperature [°C]
-40
9.0 -20
0
8.0 25
70
7.0
85
6.0 105
125
Idd[µA]
5.0
4.0
3.0
2.0
1.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
VDD [V]
Figure 38-14. ATtiny1614 Standby Mode Supply Current vs. VDD (Sampled BOD Running at 125
Hz)
10.0 Temperature [°C]
-40
9.0 -20
0
8.0 25
70
7.0
85
6.0 105
125
Idd[µA]
5.0
4.0
3.0
2.0
1.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
VDD [V]
Figure 38-15. ATtiny1614 Standby Mode Supply Current vs. VDD (Sampled BOD Running at 1 kHz)
10.0 Temperature [°C]
-40
9.0 -20
0
8.0 25
70
7.0
85
6.0 105
125
Idd[µA]
5.0
4.0
3.0
2.0
1.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
VDD [V]
38.2 GPIO
1.0
0.8
0.6
0.4
0.2
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-17. I/O Pin Input Threshold Voltage vs. VDD (T=25°C)
75 Treshold
Vih
70 Vil
65
60
55
Threshold [%]
50
45
40
35
30
25
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-18. I/O Pin Input Threshold Voltage vs. VDD (VIH)
75 Temperature[°C]
-40
70 0
25
65 70
85
60
105
55 125
Threshold [%]
50
45
40
35
30
25
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-19. I/O Pin Input Threshold Voltage vs. VDD (VIL)
75 Temperature[°C]
-40
70 0
25
65 70
85
60
105
55 125
Threshold [%]
50
45
40
35
30
25
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
125
0.25
0.20
0.15
0.10
0.05
0.00
0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0
Sink current [mA]
Figure 38-21. I/O Pin Output Voltage vs. Sink Current (VDD=3.0V)
0.50 Temperature [°C]
-40
0.45 -20
0
0.40 25
70
0.35 85
105
0.30 125
0.25
0.20
0.15
0.10
0.05
0.00
0 1 2 3 4 5 6 7 8 9 10
Sink current [mA]
Figure 38-22. I/O Pin Output Voltage vs. Sink Current (VDD=5.0V)
1.0 Temperature [°C]
-40
0.9 -20
0
0.8 25
70
0.7 85
105
0.6 125
0.5
0.4
0.3
0.2
0.1
0.0
0 2 4 6 8 10 12 14 16 18 20
Sink current [mA]
Figure 38-23. I/O Pin Output Voltage vs. Sink Current (T=25°C)
1.0 Vdd [V]
1.8
0.9 2
2.2
0.8 3
4
0.7
5
0.6
Voutput[V]
0.5
0.4
0.3
0.2
0.1
0.0
0 2 4 6 8 10 12 14 16 18 20
Sink current [mA]
Figure 38-24. I/O Pin Output Voltage vs. Source Current (VDD=1.8V)
1.80 Temperature [°C]
-40
1.75 -20
0
1.70 25
70
1.65 85
105
1.60 125
1.55
1.50
1.45
1.40
1.35
1.30
0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0
Source current [mA]
Figure 38-25. I/O Pin Output Voltage vs. Source Current (VDD=3.0V)
3.0 Temperature [°C]
-40
2.9 -20
0
2.8 25
70
2.7 85
105
2.6 125
2.5
2.4
2.3
2.2
2.1
2.0
0 1 2 3 4 5 6 7 8 9 10
Source current [mA]
Figure 38-26. I/O Pin Output Voltage vs. Source Current (VDD=5.0V)
5.0 Temperature [°C]
-40
4.9 -20
0
4.8 25
70
4.7 85
105
4.6 125
4.5
4.4
4.3
4.2
4.1
4.0
0 2 4 6 8 10 12 14 16 18 20
Source current [mA]
Figure 38-27. I/O Pin Output Voltage vs. Source Current (T=25°C)
5.0 Vdd [V]
1.8
4.5 2
2.2
4.0 3
4
3.5
5
3.0
Voutput[V]
2.5
2.0
1.5
1.0
0.5
0.0
0 2 4 6 8 10 12 14 16 18 20
Source current [mA]
1.0
0.8
0.5
0.3
0.0
0 5 10 15 20 25 30 35 40 45 50
Pull-up resistor current [µA]
Figure 38-29. I/O Pin Pull-Up Resistor Current vs. Input Voltage (VDD=3.0V)
3.0 Temperature [°C]
-40
-20
2.8
0
25
2.5 70
85
105
2.3
125
2.0
1.8
1.5
1.3
1.0
0 5 10 15 20 25 30 35 40 45 50
Pull-up resistor current [µA]
Figure 38-30. I/O Pin Pull-Up Resistor Current vs. Input Voltage (VDD=5.0V)
5.0 Temperature [°C]
-40
-20
4.8
0
25
4.5 70
85
105
4.3
125
4.0
3.8
3.5
3.3
3.0
0 5 10 15 20 25 30 35 40 45 50
Pull-up resistor current [µA]
0.4
0.2
Vref error [%]
0.0
-0.2
-0.4
-0.6
-0.8
-1.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
0.4
0.2
Vref error [%]
0.0
-0.2
-0.4
-0.6
-0.8
-1.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
0.6
0.4
0.2
Vref error [%]
0.0
-0.2
-0.4
-0.6
-0.8
-1.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
0.6
0.4
0.2
Vref error [%]
0.0
-0.2
-0.4
-0.6
-0.8
-1.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
25
20
15
10
0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-36. BOD Current vs. VDD (Sampled BOD at 125 Hz)
5.0 Temperature [°C]
-40
4.5 0
25
4.0 70
85
3.5
105
3.0 125
Idd [µA]
2.5
2.0
1.5
1.0
0.5
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
2.5
2.0
1.5
1.0
0.5
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
1.86
1.84
1.82
BOD level [V]
1.80
1.78
1.76
1.74
1.72
1.70
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
2.70
2.68
BOD level [V]
2.66
2.64
2.62
2.60
2.58
2.56
4.30
4.28
BOD level [V]
4.26
4.24
4.22
4.20
4.18
4.16
6.0
5.0
4.0
3.0
2.0
1.0
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-42. Absolute Accuracy vs. Vref (VDD=5.0V, fADC=115 ksps), REFSEL = Internal Reference
10.0 Temperature [°C]
-40
9.0 25
85
8.0 105
7.0
Absolute Accuracy [LSB]
6.0
5.0
4.0
3.0
2.0
1.0
0.0
1.1 1.5 2.5 4.3 VDD
Vref [V]
Figure 38-43. DNL Error vs. VDD (fADC=115 ksps) at T=25°C, REFSEL = Internal Reference
2.0 Vref [V]
1.1
1.8 1.5
2.5
1.6 4.3
VDD
1.4
1.2
DNL [LSB]
1.0
0.8
0.6
0.4
0.2
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-44. DNL vs. Vref (VDD=5.0V, fADC=115 ksps), REFSEL = Internal Reference
2.0 Temperature [°C]
-40
1.8 25
85
1.6 105
1.4
1.2
DNL [LSB]
1.0
0.8
0.6
0.4
0.2
0.0
1.1 1.5 2.5 4.3 VDD
Vref [V]
Figure 38-45. Gain Error vs. VDD (fADC=115 ksps) at T=25°C, REFSEL = Internal Reference
8.0 Vref [V]
1.1
7.0 1.5
2.5
6.0 4.3
VDD
5.0
4.0
Gain [LSB]
3.0
2.0
1.0
0.0
-1.0
-2.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-46. Gain Error vs. Vref (VDD=5.0V, fADC=115 ksps), REFSEL = Internal Reference
8.0 Temperature [°C]
-40
7.0
25
85
105
6.0
5.0
Gain [LSB]
4.0
3.0
2.0
1.0
0.0
1.1 1.5 2.5 4.3 VDD
Vref [V]
Figure 38-47. INL vs. VDD (fADC=115 ksps) at T=25°C, REFSEL = Internal Reference
2.0 Vref [V]
1.1
1.8 1.5
2.5
1.6 4.3
VDD
1.4
1.2
INL [LSB]
1.0
0.8
0.6
0.4
0.2
0.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-48. INL vs. Vref (VDD=5.0V, fADC=115 ksps), REFSEL = Internal Reference
2.0 Temperature [°C]
-40
1.8 25
85
1.6 105
1.4
1.2
INL [LSB]
1.0
0.8
0.6
0.4
0.2
0.0
1.1 1.5 2.5 4.3 VDD
Vref [V]
Figure 38-49. Offset Error vs. VDD (fADC=115 ksps) at T=25°C, REFSEL = Internal Reference
2.0 Vref [V]
1.1
1.6 1.5
2.5
1.2 4.3
VDD
0.8
0.4
Offset [LSB]
0.0
-0.4
-0.8
-1.2
-1.6
-2.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Figure 38-50. Offset Error vs. Vref (VDD=5.0V, fADC=115 ksps), REFSEL = Internal Reference
2.0 Temperature [°C]
-40
1.6 25
85
1.2 105
0.8
0.4
Offset [LSB]
0.0
-0.4
-0.8
-1.2
-1.6
-2.0
1.1 1.5 2.5 4.3 VDD
Vref [V]
38.6 AC Characteristics
Figure 38-51. Hysteresis vs. VCM - 10 mV (VDD=5V)
20 Temperature [°C]
-40
18 -20
0
16 25
55
14
85
105
Hysteresis [mV]
12
125
10
0
-0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vcommon mode [V]
56
Hysteresis [mV]
48
40
32
24
16
0
-0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vcommon mode [V]
125
5.0
4.0
3.0
2.0
1.0
0.0
-0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vcommon mode [V]
6
Offset [mV]
0
-0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vcommon mode [V]
Figure 38-55. Propagation Delay vs. VCM LPMODE Enabled, Falling Positive Input, VOD = 25 mV
(T=25°C)
500 Vdd [V]
3
5
400
300
200
100
0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
V common mode [V]
Figure 38-56. Propagation Delay vs. VCM LPMODE Enabled, Rising Positive Input, VOD = 30 mV
(T=25°C)
500 Vdd [V]
3
5
400
300
200
100
0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
V common mode [V]
Figure 38-57. Propagation Delay vs. VCM LPMODE Disabled, Falling Positive Input, VOD = 30 mV
(T=25°C)
100 Vdd [V]
3
5
80
60
40
20
0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
V common mode [V]
Figure 38-58. Propagation Delay vs. VCM LPMODE Disabled, Rising Positive Input, VOD = 30 mV
(T=25°C)
100 Vdd [V]
3
5
80
60
40
20
0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
V common mode [V]
85
1.5 105
125
1.3
1.0
0.8
0.5
0.3
0.0
0 8 16 24 32 40 48 56 64
OSCCAL [x1]
Figure 38-60. OSC20M Internal Oscillator: Frequency vs. Calibration Value (VDD=3V)
30 Temperature [°C]
-40
28 -20
0
26 25
70
24
85
Frequency [MHz]
22 105
125
20
18
16
14
12
10
0 8 16 24 32 40 48 56 64
OSCCAL [x1]
20.1 5.5
20.0
19.9
19.8
19.7
19.6
19.5
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
20.1 105
125
20.0
19.9
19.8
19.7
19.6
19.5
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
36.0 5.5
35.0
34.0
33.0
32.0
31.0
30.0
-40 -20 0 20 40 60 80 100 120
Temperature [°C]
36.0
125
35.0
34.0
33.0
32.0
31.0
30.0
1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
Vdd [V]
Related Links
39.2.2 Junction Temperature
40. Errata
40.1.1.1 AC
1–
False triggering when sweeping negative input of the AC when the
Low-Power mode is disabled
A false trigger may occur if sweeping the negative input of the AC with a
negative slope and the AC has Low-Power mode disabled.
Fix/Workaround:
Enable Low-Power mode in AC.CTRLA.LPMODE
2–
AC interrupt flag not set unless interrupt is enabled
ACn.STATUS.CMP is not set if the ACn.INTCTRL.CMP is not set.
Fix/Workaround:
Enable ACn.INTCTRL.CMP or use ACn.STATUS.STATE for polling.
3–
False triggers may occur under certain conditions.
False triggers may occur on falling input pin: - If slew rate on input signal is
greater than 2V/us for Common mode voltage below 0.5V - If slew rate on
input signal is greater than 10V/us for Common mode voltage above 0.5V - If
slew rate on input signal is greater than 10V/us for any Common mode
voltage and low power mode is enabled
Fix/Workaround:
None.
40.1.1.2 ADC
1–
SAMPDLY and ASDV does not work together with SAMPLEN
Using SAMPCTRL.SAMPLEN at the same time as CTRLD.SAMPDLY or
CTRLD.ASDV will cause an unpredictable sampling length.
Fix/Workaround:
When setting SAMPCTRL.SAMPLEN greater than zero the
CTRLD.SAMPDLY and CTRLD.ASDV must be cleared.
2–
ADC interrupt flag cleared when reading RESH
ADCn.INTFLAGS.RESRDY and ADCn.INTFLAGS.WCOMP are cleared
when reading ADCn.RESH.
Fix/Workaround:
In 8-bit mode, read ADCn.RESH to clear the flag or clear the flag directly.
3–
Changing ADC control bits during Free-Running mode not working
Use an event channel to link the LUTs or do not use the corresponding I/O
pin for other purposes.
2–
D-latch is not functional
The CCL D-latch is not functional.
Fix/Workaround:
None.
40.1.1.4 RTC
1–
Any write to the RTC.CTRLA register resets the RTC and PIT prescaler
Any write to the RTC.CTRLA register resets the RTC and PIT prescaler
Fix/Workaround:
None.
2–
Disabling RTC will also stop the PIT
Writing RTC.CTRLA.RTCEN to zero will also stop the PIT and writing
RTC.PITCTRLA.PITEN to zero will also stop the RTC.
Fix/Workaround:
Do not disable the RTC or the PIT if any of the modules are used.
40.1.1.5 TCB
1–
TCB interrupt flag cleared when reading CCMPH
TCBn.INTFLAGS.CAPT is cleared when reading TCBn.CCMPH instead of
CCMPL.
Fix/Workaround:
Read both TCBn.CCMPL and TCBn.CCMPH.
2–
TCB input capture frequency and Pulse-Width Measurement mode not
working with prescaled clock
The TCB input capture frequency and Pulse-Width Measurement mode may
lock to freeze state if CLKSEL in TCB.CTRLA is set to other value than 0x0.
Fix/Workaround:
Only use CLKSEL equal to 0x0 when using Input capture frequency and
Pulse-Width Measurement mode.
3–
TCA restart command does not force a restart of TCB
The TCA restart command does not force a restart of the TCB when TCB is
running in SYNCUPD mode. TCB is only restarted after a TCA OVF.
Fix/Workaround:
None.
40.1.1.6 TCD
1–
TCD event output lines may give false events
The TCD event output lines can give out false events.
Fix/Workaround:
Use the delayed event functionality with minimum one cycle delay.
2–
TCD autoupdate not working
The TCD autoupdate feature is not working.
Fix/Workaround:
None.
40.1.1.7 TWI
1–
TIMEOUT bits in TWI.MCTRLB register is not accessible
The TIMEOUT bits in TWI.MCTRLB register is not accessible from software.
Fix/Workaround:
When initializing TWI, BUSSTATE in TWI.MSTATUS should be brought into
IDLE state by writing 0x1 to it.
2–
TWI Master Mode wrongly detect start bit as a stop bit
If TWI is enabled in Master mode followed by an immediate write to the
MADDR register, the bus monitor recognize the Start bit as a Stop bit.
Fix/Workaround:
Wait minimum two clock cycles from TWI.MCTRLA.ENABLE until
TWI.MADDR is written.
3–
TWI Smart mode gives extra clock pulse
TWI Master with Smart mode enabled gives an extra clock pulse on SCL line
after sending NACK.
Fix/Workaround:
None.
4–
TWI Master Enable Quick Command not accessible
TWI.MCTRLA.QCEN is not accessible from software.
Fix/Workaround:
None.
40.1.1.8 USART
1–
Frame error on previous message may cause false Start bit detection
If receiving a frame with RXDATAH.FERR set and reading the RXDATAL
before the RxD line goes high, will trigger a false Start bit detection.
Fix/Workaround:
Wait for the RxD pin to go high before reading RXDATA, for instance by
polling the bit in PORTn.IN where the RxD pin is located.
Note:
The ATtiny1614 device was previously described in Microchip document 40001893 rev. C (common data
sheet for ATtiny1617/1616/1614 devices).
With the introduction of the ATtiny3216 and ATtiny3217 devices, 40001893 rev. C was replaced by three
new data sheets:
• ATtiny1617 and ATtiny3217
• ATtiny1616 and ATtiny3216
• ATtiny1614 (this document)
Customer Support
Users of Microchip products can receive assistance through several channels:
• Distributor or Representative
• Local Sales Office
• Field Application Engineer (FAE)
• Technical Support
Customers should contact their distributor, representative or Field Application Engineer (FAE) for support.
Local sales offices are also available to help customers. A listing of sales offices and locations is included
in the back of this document.
Technical support is available through the web site at: http://www.microchip.com/support
AT tiny1617 - MNR
Carrier Type
AVR product family R=Tape & Reel
Flash size in KB Temperature Range
N=-40°C to +105°C
tinyAVR series
F=-40°C to +125°C
Pin count Package Type
7=24 pins M=VQFN
6=20 pins S=SOIC300
4=14 pins SS=SOIC150
Legal Notice
Information contained in this publication regarding device applications and the like is provided only for
your convenience and may be superseded by updates. It is your responsibility to ensure that your
application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY
OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS
CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE.
Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life
support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend,
indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting
from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual
property rights unless otherwise stated.
Trademarks
The Microchip name and logo, the Microchip logo, AnyRate, AVR, AVR logo, AVR Freaks, BeaconThings,
BitCloud, CryptoMemory, CryptoRF, dsPIC, FlashFlex, flexPWR, Heldo, JukeBlox, KeeLoq, KeeLoq logo,
Kleer, LANCheck, LINK MD, maXStylus, maXTouch, MediaLB, megaAVR, MOST, MOST logo, MPLAB,
OptoLyzer, PIC, picoPower, PICSTART, PIC32 logo, Prochip Designer, QTouch, RightTouch, SAM-BA,
SpyNIC, SST, SST Logo, SuperFlash, tinyAVR, UNI/O, and XMEGA are registered trademarks of
Microchip Technology Incorporated in the U.S.A. and other countries.
ClockWorks, The Embedded Control Solutions Company, EtherSynch, Hyper Speed Control, HyperLight
Load, IntelliMOS, mTouch, Precision Edge, and Quiet-Wire are registered trademarks of Microchip
Technology Incorporated in the U.S.A.
Adjacent Key Suppression, AKS, Analog-for-the-Digital Age, Any Capacitor, AnyIn, AnyOut, BodyCom,
chipKIT, chipKIT logo, CodeGuard, CryptoAuthentication, CryptoCompanion, CryptoController,
dsPICDEM, dsPICDEM.net, Dynamic Average Matching, DAM, ECAN, EtherGREEN, In-Circuit Serial
Programming, ICSP, Inter-Chip Connectivity, JitterBlocker, KleerNet, KleerNet logo, Mindi, MiWi,
motorBench, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, Omniscient
Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, PureSilicon, QMatrix, RightTouch logo, REAL
ICE, Ripple Blocker, SAM-ICE, Serial Quad I/O, SMART-I.S., SQI, SuperSwitcher, SuperSwitcher II, Total
Endurance, TSHARC, USBCheck, VariSense, ViewSpan, WiperLock, Wireless DNA, and ZENA are
trademarks of Microchip Technology Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.
Silicon Storage Technology is a registered trademark of Microchip Technology Inc. in other countries.
GestIC is a registered trademark of Microchip Technology Germany II GmbH & Co. KG, a subsidiary of
Microchip Technology Inc., in other countries.
All other trademarks mentioned herein are property of their respective companies.
© 2018, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.
ISBN: 978-1-5224-3019-3
ISO/TS 16949
Microchip received ISO/TS-16949:2009 certification for its worldwide headquarters, design and wafer
fabrication facilities in Chandler and Tempe, Arizona; Gresham, Oregon and design centers in California
® ®
and India. The Company’s quality system processes and procedures are for its PIC MCUs and dsPIC
®
DSCs, KEELOQ code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design and manufacture of development
systems is ISO 9001:2000 certified.