The ATtiny1614/1616/1617 are members of the tinyAVR® 1-series of microcontrollers, using the AVR® processor with
hardware multiplier, running at up to 20 MHz, with 16 KB Flash, 2 KB of SRAM, and 256 bytes of EEPROM in a 14-,
20- and 24-pin package. The tinyAVR® 1-series uses the latest technologies with a flexible, low-power architecture,
including Event System, accurate analog features, and Core Independent Peripherals (CIPs). Capacitive touch
interfaces with Driven Shield+ and Boost Mode technologies are supported with the integrated Peripheral Touch
Controller (PTC).
Attention: Automotive products are documented in separate data sheets.
Features
• CPU
– AVR® CPU
– Running at up to 20 MHz
– Single-cycle I/O access
– Two-level interrupt controller
– Two-cycle hardware multiplier
• Idle with all peripherals running for immediate wake-up
• Standby
– Configurable operation of selected peripherals
• Power-Down with full data retention
• Peripherals
– One 16-bit Timer/Counter type A (TCA) with a dedicated period register and three compare channels
– Two 16-bit Timer/Counter type B (TCB) with input capture
– One 12-bit Timer/Counter type D (TCD) optimized for control applications
– One 16-bit Real-Time Counter (RTC) running from an external crystal, external clock, or internal RC
oscillator
– Watchdog Timer (WDT) with Window mode, with a separate on-chip oscillator
– One USART with fractional baud rate generator, auto-baud, and start-of-frame detection
– One master/slave Serial Peripheral Interface (SPI)
– One Two-Wire Interface (TWI) with dual address match
• Philips I2C compatible
• Standard mode (Sm, 100 kHz)
• Fast mode (Fm, 400 kHz)
• Fast mode plus (Fm+, 1 MHz)
– Three Analog Comparators (AC) with a low propagation delay
– Two 10-bit 115 ksps Analog-to-Digital Converters (ADCs)
– Three 8-bit Digital-to-Analog Converters (DACs) with one external channel
– Multiple voltage references (V
• 0.55V
• 1.1V
• 1.5V
• 2.5V
• 4.3V
– Event System (EVSYS) for CPU independent and predictable inter-peripheral signaling
– Configurable Custom Logic (CCL) with two programmable look-up tables
– Automated CRC memory scan
– Peripheral Touch Controller (PTC)
• Capacitive touch buttons, sliders, wheels and 2D surfaces
• Wake-up on touch
• Driven shield for improved moisture and noise handling performance
• Up to 14 self-capacitance channels
• Up to 49 mutual capacitance channels
– External interrupt on all general purpose pins
• I/O and Packages:
– Up to 22 programmable I/O lines
– 14-pin SOIC150
– 20-pin SOIC300
– 20-pin VQFN 3x3 mm
– 24-pin VQFN 4x4 mm
• Temperature Ranges:
– -40°C to 105°C
– -40°C to 125°C
The Microchip Website...............................................................................................................................595
1. Silicon Errata and Data Sheet Clarification Document
Microchip aims to provide its customers with the best documentation possible to ensure a successful use of
Microchip products. Between data sheet updates, a Silicon errata and data sheet clarification document will contain
the most recent information for the data sheet. The ATtiny1614/1616/1617 Silicon Errata and Data Sheet Clarification
(www.microchip.com/DS80000886) is available at the device product page on https://www.microchip.com.
1.Pin names are of type Pxn, with x being the PORT instance (A, B) and n the pin number. The 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.Alternate pin positions. For selecting the alternate positions, refer to section 15. PORTMUX - Port Multiplexer.
4.Every PTC line can be configured as X- or Y-line.
The main memories are SRAM data memory, EEPROM data memory, and Flash program memory. Also, the
peripheral registers are located in the I/O memory space.
The ATtiny1614/1616/1617 contains 16 KB on-chip in-system reprogrammable Flash memory for program storage.
Since all AVR instructions are 16 or 32-bit wide, the Flash is organized as 4K x 16. For write protection, the Flash
program memory space can be divided into three sections (see the illustration below): Bootloader section, Application
code section, and Application data section, with restricted access rights among them.
The Program Counter (PC) is 13-bit wide to address the whole program memory. The procedure for writing Flash
memory is described in detail in the documentation of the Nonvolatile Memory Controller (NVMCTRL) peripheral.
The entire Flash memory is mapped in the memory space and is accessible with normal LD/ST instructions as well as
the LPM instruction. For LD/ST instructions, the Flash is mapped from address 0x8000. For the LPM instruction, the
Flash start address is 0x0000.
The ATtiny1614/1616/1617 also has a CRC peripheral that is a master on the bus.
The ATtiny1614/1616/1617 has 256 bytes of EEPROM data memory, see section 6.2 Memory Map. The EEPROM
memory supports single-byte read and write. The EEPROM is controlled by the Nonvolatile Memory Controller
(NVMCTRL).
6.6 User Row
In addition to the EEPROM, the ATtiny1614/1616/1617 has one extra page of EEPROM memory that can be used for
firmware settings; the User Row (USERROW). This memory supports single-byte read and write as the normal
EEPROM. The CPU can write and read this memory as normal EEPROM, and the UPDI can write and read it as a
normal EEPROM memory if the part is unlocked. The User Row can be written by the UPDI when the part is locked.
USERROW is not affected by a chip erase.
6.7 Signature Bytes
All tinyAVR® microcontrollers have a 3-byte signature code that identifies the device. The three bytes reside in a
separate address space. For the device, the signature bytes are given in the following table.
Note: When the device is locked, only the System Information Block (SIB) can be accessed.
All ATtiny1614/1616/1617 I/Os and peripherals are located in the I/O memory space. The I/O address range from
0x00 to 0x3F can be accessed in a single cycle using IN and OUT instructions. The extended I/O memory space from
0x0040 to 0x0FFF can be accessed by the LD/LDS/LDD and ST/STS/STD instructions, transferring data between the
32 general purpose working registers and the I/O memory space.
I/O registers within the address range 0x00-0x1F are directly bit-accessible using the SBI and CBI instructions. In
these registers, the value of single bits can be checked by using the SBIS and SBIC instructions. Refer to the
Instruction Set section for more details.
For compatibility with future devices, reserved bits must be written to ‘0’, if accessed. Reserved I/O memory
addresses must never be written.
Some of the interrupt flags are cleared by writing a ‘1’ to them. On ATtiny1614/1616/1617 devices, the CBI and SBI
instructions will only operate on the specified bit and can be used on registers containing such interrupt flags. The
CBI and SBI instructions work with registers 0x00-0x1F only.
ATtiny1614/1616/1617
Memories
0x000x010x02
General Purpose I/O Registers
The ATtiny1614/1616/1617 devices provide four general purpose I/O registers. These registers can be used for
storing any information, and they are particularly useful for storing global variables and interrupt flags. General
purpose I/O registers, which reside in the address range 0x1C-0x1F, are directly bit-accessible using the SBI, CBI,
SBIS, and SBIC instructions.
These are general purpose registers that can be used to store data, such as global variables and flags, in the bitaccessible I/O memory space.
Bit 76543210
Access
Reset 00000000
R/WR/WR/WR/WR/WR/WR/WR/W
Bits 7:0 – GPIOR[7:0] General Purpose I/O Register Byte
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, Application Code, and Application Date 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 is still enabled.
The device is locked by writing a non-valid key to the LOCKBIT bit field in FUSE.LOCKBIT.
1.Read operations marked No in the tables may appear to be successful, but the data are not valid. Hence, any
attempt of code validation through the UPDI will fail on these memory sections.
2.In the Locked mode, the USERROW can be written using the Fuse Write command, but the current
USERROW values cannot be read out.
Important: The only way to unlock a device is through a CHIPERASE. No application data are retained.
6.10 Configuration and User Fuses (FUSE)
Fuses are part of the nonvolatile memory and hold the device configuration. The fuses are available from the device
power-up. The fuses can be read by the CPU or the UPDI, but can only be programmed or cleared by the UPDI. The
configuration values stored in the fuses are written to their respective target registers at the end of the start-up
sequence.
The fuses for peripheral configuration (FUSE) are pre-programmed but can be altered by the user. Altered values in
the configuration fuse will be effective only after a Reset.
Note: When writing the fuses, all reserved bits must be written to ‘1’.
Each device has a device ID identifying this 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].
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].
The Temperature Sensor Calibration registers contain correction factors for temperature measurements from the onchip sensor. The ADC.SIGROW.TEMPSENSE0 is a correction factor for the gain/slope (unsigned), and
SIGROW.TEMPSENSE1 is a correction factor for the offset (signed).
Bit 76543210
Access
Reset xxxxxxxx
RRRRRRRR
Bits 7:0 – TEMPSENSE[7:0] Temperature Sensor Calibration Byte n
Refer to the ADC section for a description of how to use this register.
Bits 7:0 – OSC16ERR3V[7:0] OSC16 Error at 3V
These registers contain the signed oscillator frequency error value relative to the nominal oscillator frequency when
running at an internal 16 MHz at 3V, as measured during production.
Bits 7:0 – OSC16ERR5V[7:0] OSC16 Error at 5V
These registers contain the signed oscillator frequency error value relative to the nominal oscillator frequency when
running at an internal 16 MHz at 5V, as measured during production.
Bits 7:0 – OSC20ERR3V[7:0] OSC20 Error at 3V
These registers contain the signed oscillator frequency error value relative to the nominal oscillator frequency when
running at an internal 20 MHz at 3V, as measured during production.
Bits 7:0 – OSC20ERR5V[7:0] OSC20 Error at 5V
These registers contain the signed oscillator frequency error value relative to the nominal oscillator frequency when
running at an internal 20 MHz at 5V, as measured during production.
Bits 7:4 – WINDOW[3:0] Watchdog Window Time-Out Period
This value is loaded into the WINDOW bit field of the Watchdog Control A (WDT.CTRLA) register during Reset.
Bits 3:0 – PERIOD[3:0] Watchdog Time-Out Period
This value is loaded into the PERIOD bit field of the Watchdog Control A (WDT.CTRLA) register during Reset.
The bit values of this fuse register are written to the corresponding BOD configuration registers at start-up.
Bit 76543210
Access
Reset 00000000
RRRRRRRR
Bits 7:5 – LVL[2:0] BOD Level
This value is loaded into the LVL bit field of the BOD Control B (BOD.CTRLB) register during Reset.
ValueNameDescription
0x0
0x2
0x7
Note:
• The values in the description are typical
• Refer to the BOD and POR Characteristics in Electrical Characteristics for maximum and minimum values
LVL[2:0]SAMPFREQACTIVE[1:0]SLEEP[1:0]
BODLEVEL01.8V
BODLEVEL22.6V
BODLEVEL74.2V
Bit 4 – SAMPFREQ BOD Sample Frequency
This value is loaded into the SAMPFREQ bit of the BOD Control A (BOD.CTRLA) register during Reset.
ValueDescription
0x0
0x1
Bits 3:2 – ACTIVE[1:0] BOD Operation Mode in Active and Idle
This value is loaded into the ACTIVE bit field of the BOD Control A (BOD.CTRLA) register during Reset.
ValueDescription
0x0
0x1
0x2
0x3
Bits 1:0 – SLEEP[1:0] BOD Operation Mode in Sleep
This value is loaded into the SLEEP bit field of the BOD Control A (BOD.CTRLA) register during Reset.
ValueDescription
0x0
0x1
0x2
0x3
Sample frequency is 1 kHz
Sample frequency is 125 Hz
Disabled
Enabled
Sampled
Enabled with wake-up halted until BOD is ready
Bit 7 – OSCLOCK Oscillator Lock
This Fuse bit is loaded to LOCK in CLKCTRL.OSC20MCALIBB during Reset.
ValueDescription
0
1
Bits 1:0 – FREQSEL[1:0] Frequency Select
This bit field selects the operation frequency of the 16/20 MHz internal oscillator (OSC20M) and determines the
respective factory calibration values to be written to CAL20M in CLKCTRL.OSC20MCALIBA and TEMPCAL20M in
CLKCTRL.OSC20MCALIBB.
ValueDescription
0x1
0x2
Other
Calibration registers of the OSC20M oscillator are accessible
Calibration registers of the OSC20M oscillator are locked
Run at 16 MHz with corresponding factory calibration
Run at 20 MHz with corresponding factory calibration
Reserved
Bits 7:6 – CRCSRC[1:0] CRC Source
See the CRC description for more information about the functionality.
ValueNameDescription
0x0
0x1
0x2
0x3
Bits 3:2 – RSTPINCFG[1:0] Reset Pin Configuration
This bit field selects the Reset/UPDI pin configuration.
ValueDescription
0x0
0x1
0x2
Other
CRCSRC[1:0]RSTPINCFG[1:0]EESAVE
RRRRR
FLASHCRC of full Flash (boot, application code and application data)
BOOTCRC of the boot section
BOOTAPPCRC of application code and boot sections
NOCRCNo CRC
GPIO
UPDI
RESET
Reserved
Note: When configuring the RESET pin as GPIO, there is a potential conflict between the GPIO actively driving the
output, and a high-voltage UPDI enable sequence initiation. To avoid this, the GPIO output driver is disabled for 768
OSC32K cycles after a System Reset. Enable any interrupts for this pin only after this period.
Bit 0 – EESAVE EEPROM Save During Chip Erase
Note: If the device is locked, the EEPROM is always erased by a chip erase, regardless of this bit.
ValueDescription
0
1
EEPROM erased during chip erase
EEPROM not erased under chip erase
Bits 7:0 – APPEND[7:0] Application Code Section End
This bit field sets the end of the application code section in blocks of 256 bytes. The end of the application code
section will be set as (BOOT size) + (application code size). The remaining Flash will be application data. A value of
0x00 defines the Flash from BOOTEND*256 to the end of Flash as the application code. When both FUSE.APPEND
and FUSE.BOOTEND are 0x00, the entire Flash is the BOOT section.
Bits 7:0 – BOOTEND[7:0] Boot Section End
This bit field sets the end of the boot section in blocks of 256 bytes. A value of 0x00 defines the whole Flash as the
BOOT section. When both FUSE.APPEND and FUSE.BOOTEND are 0x00, the entire Flash is the BOOT section.
Bits 7:0 – LOCKBIT[7:0] Lockbits
When the part is locked, UPDI cannot access the system bus, so it cannot read out anything but the System
Information Block (SIB).
ValueDescription
0xC5
other
Valid key - memory access is unlocked
Invalid key - memory access is locked
The address map shows the base address for each peripheral. For complete register description and summary for
each peripheral, refer to the respective sections.
1.The availability of this register depends on the device pin count. PORTC/VPORTC is available for devices with
20 pins or more.
7.2 Interrupt Vector Mapping
Each of the interrupt vectors is connected to one peripheral instance, as shown in the table below. A peripheral can
have one or more interrupt sources, see the Interrupt section in the Functional Description of the respective
peripheral for more details on the available interrupt sources.
When the Interrupt condition occurs, an Interrupt flag (nameIF) is set in the Interrupt Flags register of the peripheral
(peripheral.INTFLAGS).
An interrupt is enabled or disabled by writing to the corresponding Interrupt Enable (nameIE) bit in the peripheral's
Interrupt Control (peripheral.INTCTRL) register.
The naming of the registers may vary slightly in some peripherals.
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.
Interrupts must be enabled globally for interrupt requests to be generated.
Table 7-2. Interrupt Vector Mapping
Vector Number Program Address
(word)
00x00RESETRESET
10x02CRCSCAN_NMINMI - Non-Maskable Interrupt from CRC
1.The availability of the port pins depends on the device pin count. PORTC is available for devices with 20 pins
or more.
7.3 System Configuration (SYSCFG)
The system configuration contains the revision ID of the part. The revision ID is readable from the CPU, making it
useful for implementing application changes between part revisions.
• 32 8-bit Registers Directly Connected to the ALU
• Stack in RAM
• Stack Pointer Accessible in I/O Memory Space
• Direct Addressing of up to 64 KB of Unified Memory
• Efficient Support for 8-, 16-, and 32-bit Arithmetic
• Configuration Change Protection for System-Critical Features
• Native On-Chip Debugging (OCD) Support:
– Two hardware breakpoints
– Change of flow, interrupt, and software breakpoints
– Run-time read-out of Stack Pointer (SP) register, Program Counter (PC), and Status Register (SREG)
– Register file read- and writable in Stopped mode
ATtiny1614/1616/1617
AVR® CPU
8.2 Overview
All AVR devices use the AVR 8-bit 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.
8.3 Architecture
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 a single-level pipeline. While one
instruction is being executed, the next instruction is pre-fetched from the program memory. This enables instructions
to be executed on every clock cycle.
Refer to the Instruction Set Summary section for a summary of all AVR instructions.
The Arithmetic Logic Unit (ALU) supports arithmetic and logic operations between working registers, or between a
constant and a working register. Also, single-register operations can be executed.
The ALU operates in a direct connection with all the 32 general purpose working registers in the register file.
Arithmetic operations between working registers or between a working register and an immediate operand are
executed in a single clock cycle, and the result is stored in the register file. After an arithmetic or logic operation, the
Status Register (CPU.SREG) is updated to reflect information about the result of the operation.
ALU operations are divided into three main categories – arithmetic, logical, and bit functions. Both 8- and 16-bit
arithmetic are supported, and the instruction set allows for efficient implementation of the 32-bit arithmetic. The
hardware multiplier supports signed and unsigned multiplication and fractional formats.
8.4.1 Hardware Multiplier
The multiplier is capable of multiplying two 8-bit numbers into a 16-bit result. The hardware multiplier supports
different variations of signed and unsigned integer and fractional numbers:
• Multiplication of signed/unsigned integers
• Multiplication of signed/unsigned fractional numbers
• Multiplication of a signed integer with an unsigned integer
• Multiplication of a signed fractional number with an unsigned fractional number
A multiplication takes two CPU clock cycles.
ATtiny1614/1616/1617
AVR® CPU
8.5 Functional Description
8.5.1 Program Flow
After being reset, the CPU will execute instructions from the lowest address in the Flash program memory, 0x0000.
The Program Counter (PC) addresses the next instruction to be fetched.
The program flow is supported by conditional and unconditional change of flow instructions, capable of addressing
the whole address space directly. Most AVR instructions use a 16-bit word format, and a limited number use a 32-bit
format.
During interrupts and subroutine calls, the return address PC is stored on the stack as a word pointer. The stack is
allocated in the general data SRAM, and consequently, the stack size is only limited by the total SRAM size and the
usage of the SRAM. After the Stack Pointer (SP) is reset, it points to the highest address in the internal SRAM. The
SP is read/write accessible in the I/O memory space, enabling easy implementation of multiple stacks or stack areas.
The data SRAM can easily be accessed through the five different Addressing modes supported by the AVR CPU.
8.5.2 Instruction Execution Timing
The AVR CPU is clocked by the CPU clock, CLK_CPU. No internal clock division is applied. The figure below shows
the parallel instruction fetches and executions enabled by the Harvard architecture and the fast-access register file
concept. This is the basic pipelining concept enabling up to 1 MIPS/MHz performance with high efficiency.
Figure 8-2. The Parallel Instruction Fetches and Executions
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.
The Status Register (CPU.SREG) contains information about the result of the most recently executed arithmetic or
logic instructions. This information can be used for altering the program flow to perform conditional operations.
CPU.SREG is updated after all ALU operations, as specified in the Instruction Set Summary section. This will, in
many cases, remove the need for using the dedicated compare instructions, resulting in a faster and more compact
code. CPU.SREG is not automatically stored or restored when entering or returning from an Interrupt Service Routine
(ISR). Therefore, maintaining the Status Register between context switches must be handled by user-defined
software. CPU.SREG is accessible in the I/O memory space.
8.5.4 Stack and Stack Pointer
The stack is used for storing return addresses after interrupts and subroutine calls. Also, it can be used for storing
temporary data. The Stack Pointer (SP) always points to the top of the stack. The SP is defined by the Stack Pointer
bits in the Stack Pointer register (CPU.SP). The CPU.SP is implemented as two 8-bit registers that are accessible in
the I/O memory space.
Data are pushed and popped from the stack using the PUSH and POP instructions. The stack grows from higher to
lower memory locations. This means that pushing data onto the stack decreases the SP, and popping data off the
stack increases the SP. The SP is automatically set to the highest address of the internal SRAM after being reset. If
the stack is changed, it must be set to point above the SRAM start address (see the SRAM Data Memory section in
the Memories chapter for the SRAM start address), and it must be defined before any subroutine calls are executed
and before interrupts are enabled. See the table below for SP details.
Table 8-1. Stack Pointer Instructions
ATtiny1614/1616/1617
AVR® CPU
InstructionStack PointerDescription
PUSH
Decremented by 1 Data are pushed onto the stack
CALL
ICALL
Decremented by 2 A return address is pushed onto the stack with a subroutine call or interrupt
RCALL
POP
RET RETI
Incremented by 1Data are popped from the stack
Incremented by 2
A return address is popped from the stack with a return from subroutine or return
from interrupt
During interrupts or subroutine calls, the return address is automatically pushed on the stack as a word pointer, and
the SP is decremented by two. The return address consists of two bytes and the Least Significant Byte (LSB) is
pushed on the stack first (at the higher address). As an example, a byte pointer return address of 0x0006 is saved on
the stack as 0x0003 (shifted one bit to the right), pointing to the fourth 16-bit instruction word in the program memory.
The return address is popped off the stack with RETI (when returning from interrupts) and RET (when returning from
subroutine calls), and the SP is incremented by two.
The SP is decremented by ‘1’ when data are pushed on the stack with the PUSH instruction, and incremented by ‘1’
when data are popped off the stack using the POP instruction.
To prevent corruption when updating the SP from software, a write to SPL will automatically disable interrupts for up
to four instructions or until the next I/O memory write, whichever comes first.
X-register Low Byte
X-register High Byte
Y-register Low Byte
Y-register High Byte
Z-register Low Byte
Z-register High Byte
Bit (individually)
X-register
Bit (X-register)
7
0
7
0
15
8
7
0
R27
R26
XHXL
Bit (individually)
Y-register
Bit (Y-register)
7
0
7
0
15
8
7
0
R29
R28
YHYL
Bit (individually)
Z-register
Bit (Z-register)
7
0
7
0
15
8
7
0
R31
R30
ZHZL
The register file consists of 32 8-bit general purpose working registers used by the CPU. The register file is located in
a separate address space from the data memory.
All CPU instructions that operate on working registers have direct and single-cycle access to the register file. Some
limitations apply to which working registers can be accessed by an instruction, like the constant arithmetic and logic
instructions SBCI, SUBI, CPI, ANDI ORI, and LDI. These instructions apply to the second half of the working
registers in the register file, R16 to R31. See the AVR Instruction Set Manual for further details.
Figure 8-4. AVR® CPU General Purpose Working Registers
ATtiny1614/1616/1617
AVR® CPU
8.5.5.1 The X-, Y-, and Z-Registers
8.5.6 Accessing 16-bit Registers
Working registers R26...R31 have added functions besides their general purpose usage.
These registers can form 16-bit Address Pointers for indirect addressing of data memory. These three address
registers are called the X-register, Y-register, and Z-register. The Z-register can also be used as Address Pointer for
program memory.
Figure 8-5. The X-, Y-, and Z-Registers
The lowest register address holds the Least Significant Byte (LSB), and the highest register address holds the Most
Significant Byte (MSB). These address registers can function as fixed displacement, automatic increment, and
automatic decrement, with different LD*/ST* instructions. See the Instruction Set Summary section for details.
Most of the registers for the ATtiny1614/1616/1617 devices are 8-bit registers, but the devices also features a few 16bit registers. As the AVR data bus has a width of 8 bits, accessing the 16-bit requires two read or write operations. All
the 16-bit registers of the ATtiny1614/1616/1617 devices are connected to the 8-bit bus through a temporary (TEMP)
register.
For a 16-bit write operation, the low byte register (e.g. DATAL) of the 16-bit register must be written before the high
byte register (e.g. DATAH). Writing the low byte register will result in a write to the temporary (TEMP) register instead
of the low byte register, as shown in the left side of Figure 8-6. When the high byte register of the 16-bit register is
written, TEMP will be copied into the low byte of the 16-bit register in the same clock cycle, as shown in the right side
of Figure 8-6.
Figure 8-7. 16-Bit Register Read Operation
DATAH
TEMP
DATAL
Write High Byte
A
V
R
D
A
T
A
B
U
S
A
V
DATAH
TEMP
DATAL
R
D
A
T
A
B
U
S
Read Low Byte
For a 16-bit read operation, the low byte register (e.g. DATAL) of the 16-bit register must be read before the high byte
register (e.g. DATAH). When the low byte register is read, the high byte register of the 16-bit register is copied into
the temporary (TEMP) register in the same clock cycle, as show in the left side of Figure 8-7. Reading the high byte
register will result in a read from TEMP instead of the high byte register, as shown in right side of Figure 8-7.
The described mechanism ensures that the low and high bytes of 16-bit registers are always accessed
simultaneously when reading or writing the registers.
Interrupts can corrupt the timed sequence if an interrupt is triggered during a 16-bit read/write operation and a 16-bit
register within the same peripheral is accessed in the interrupt service routine. To prevent this, interrupts should be
disabled when writing or reading 16-bit registers. Alternatively, the temporary register can be read before and
restored after the 16-bit access in the interrupt service routine.
8.5.6.1 Accessing 24-Bit Registers
For 24-bit registers, the read and write access is done in the same way as described for 16-bit registers, except there
are two temporary registers for 24-bit registers. The Least Significant Byte must be written first when doing a write,
and read first when doing a read.
8.5.7 Configuration Change Protection (CCP)
System critical I/O register settings are protected from accidental modification. Flash self-programming (via store to
NVM controller) is protected from accidental execution. This is handled globally by the Configuration Change
Protection (CCP) register.
Changes to the protected I/O registers or bits, or execution of protected instructions, are only possible after the CPU
writes a signature to the CCP register. The different signatures are listed in the description of the CCP register
(CPU.CCP).
There are two modes of operation: One for protected I/O registers, and one for protected self-programming.
ATtiny1614/1616/1617
AVR® CPU
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, or EEPROM are conducted, or if the SLEEP instruction
is executed.
8.5.7.2 Sequence for Execution of Self-Programming
In order to execute self-programming (the execution of writes to the NVM controller’s command register), the
following steps are required:
1.The software temporarily enables self-programming by writing the SPM signature to the CCP register
(CPU.CCP).
2.Within four instructions, the software must execute the appropriate instruction. The protected change is
immediately disabled if the CPU performs accesses to the Flash, NVMCTRL, or EEPROM, or if the SLEEP
instruction is executed.
Once the correct signature is written by the CPU, interrupts will be ignored for the duration of the configuration
change enable period. Any interrupt request (including non-maskable interrupts) during the CCP period will set the
corresponding Interrupt flag as normal, and the request is kept pending. After the CCP period is completed, any
pending interrupts are executed according to their level and priority.
8.5.8 On-Chip Debug Capabilities
The AVR CPU includes native On-Chip Debug (OCD) support. It includes some powerful debug capabilities to enable
profiling and detailed information about the CPU state. It is possible to alter the CPU state and resume code
execution. Also, normal debug capabilities like hardware Program Counter breakpoints, breakpoints on change of
flow instructions, breakpoints on interrupts, and software breakpoints (BREAK instruction) are present. Refer to the
Unified Program and Debug Interface section for details about OCD.
Bits 7:0 – CCP[7:0] Configuration Change Protection
Writing the correct signature to this bit field allows changing protected I/O registers or executing protected
instructions within the next four CPU instructions executed.
All interrupts are ignored during these cycles. After these cycles are completed, the interrupts will automatically be
handled again by the CPU, and any pending interrupts will be executed according to their level and priority.
When the protected I/O register signature is written, CCP[0] will read as ‘1’ as long as the CCP feature is enabled.
When the protected self-programming signature is written, CCP[1] will read as ‘1’ as long as the CCP feature is
enabled.
CCP[7:2] will always read as ‘0’.
Name: SP
Offset: 0x0D
Reset: Top of stack
Property: -
The CPU.SP register holds the Stack Pointer (SP) that points to the top of the stack. After being reset, the SP 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 ‘0’.
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, whichever comes first.
Bit 15141312111098
Access
Reset
R/WR/WR/WR/WR/WR/WR/WR/W
SP[15:8]
Bit 76543210
Access
Reset
R/WR/WR/WR/WR/WR/WR/WR/W
SP[7:0]
Bits 15:8 – SP[15:8] Stack Pointer High Byte
These bits hold the MSB of the 16-bit register.
Bits 7:0 – SP[7:0] Stack Pointer Low Byte
These bits hold the LSB of the 16-bit register.
The Status Register contains information about the result of the most recently executed arithmetic or logic
instructions. For details about the bits in this register and how they are influenced by different instructions, see the
Instruction Set Summary section.
Bit 76543210
Access
Reset 00000000
ITHSVNZC
R/WR/WR/WR/WR/WR/WR/WR/W
Bit 7 – I Global Interrupt Enable Bit
Writing a ‘1’ to this bit enables interrupts on the device.
Writing a ‘0’ to this bit disables interrupts on the device, independent of the individual interrupt enable settings of the
peripherals.
This bit is not cleared by hardware while entering an Interrupt Service Routine (ISR) or set when the RETI instruction
is executed.
This bit can be set and cleared by software with the SEI and CLI instructions.
Changing the I bit through the I/O register results in a one-cycle Wait state on the access.
Bit 6 – T Transfer Bit
The bit copy instructions, Bit Load (BLD) and Bit Store (BST), use the T bit as source or destination for the operated
bit.
Bit 5 – H Half Carry Flag
This flag is set when there is a half carry in arithmetic operations that support this, and is cleared otherwise. Half
carry is useful in BCD arithmetic.
Bit 4 – S Sign Flag
This flag is always an Exclusive Or (XOR) between the Negative flag (N) and the Two’s Complement Overflow flag
(V).
Bit 3 – V Two’s Complement Overflow Flag
This flag is set when there is an overflow in arithmetic operations that support this, and is cleared otherwise.
Bit 2 – N Negative Flag
This flag is set when there is a negative result in an arithmetic or logic operation, and is cleared otherwise.
Bit 1 – Z Zero Flag
This flag is set when there is a zero result in an arithmetic or logic operation, and is cleared otherwise.
Bit 0 – C Carry Flag
This flag is set when there is a carry in an arithmetic or logic operation, and is cleared otherwise.
• 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:
– Can be read and written from software
– Can be written from UPDI on locked device
– Content is kept after chip erase
ATtiny1614/1616/1617
9.2 Overview
The NVM Controller (NVMCTRL) is the interface between the CPU and Nonvolatile Memories (Flash, EEPROM,
Signature Row, User Row and fuses). These are reprogrammable memory blocks that retain their values even when
they are not powered. The Flash is mainly used for program storage and can also 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.
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
ATtiny1614/1616/1617
NVMCTRL - Nonvolatile Memory Controller
Section Sizes
The sizes of these sections are set by the Boot Section End fuse (FUSE.BOOTEND) and the 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 the BOOT section.
APPEND may either be set to ‘0’ or a value greater than or equal to BOOTEND.
2.Interrupt vectors are by default located after the BOOT section. This can be changed in the interrupt controller.
Inter-Section Write Protection
Between the three Flash sections, directional write protection is implemented:
• The code in the BOOT section can write to APPCODE and APPDATA
• The code in APPCODE can write to APPDATA
• The code in APPDATA cannot write to Flash or EEPROM
Boot Section Lock and Application Code Section Write Protection
The two Lock bits (APCWP and BOOTLOCK in NVMCTRL.CTRLB) can be set to lock further updates of the
respective APPCODE or BOOT section until the next Reset.
The CPU can never write to the BOOT section. NVMCTRL_CTRLB.BOOTLOCK prevents reads and execution of
code from the BOOT section.
9.3.1.2 EEPROM
The EEPROM is divided into a set of pages where one page consists of multiple bytes. The EEPROM has byte
granularity on erase/write. Within one page, only the bytes marked to be updated will be erased/written. The byte is
marked by writing a new value to the page buffer for that address location.
ATtiny1614/1616/1617
NVMCTRL - Nonvolatile Memory Controller
If FUSE.BOOTEND is written to 0x04 and FUSE.APPEND is written to 0x08, the first 4*256 bytes
will be BOOT, the next 4*256 bytes will be APPCODE, and the remaining Flash will be APPDATA.
9.3.1.3 User Row
The User Row is one extra page of EEPROM. This page can be used to store various data, such as calibration/
configuration data and serial numbers. This page is not erased by a chip erase. The User Row is written as normal
EEPROM, but in addition, it can be written through UPDI on a locked device.
9.3.2 Memory Access
9.3.2.1 Read
Reading of the Flash and EEPROM is done by using load instructions with an address according to the memory map.
Reading any of the arrays while a write or erase is in progress will result in a bus wait, and the instruction will be
suspended until the ongoing operation is complete.
9.3.2.2 Page Buffer Load
The page buffer is loaded by writing directly to the memories as defined in the memory map. Flash, EEPROM, and
User Row share the same page buffer so only one section can be programmed at a time. The Least Significant bits
(LSb) of the address are used to select where in the page buffer the data is written. The resulting data will be a binary
AND operation between the new and the previous content of the page buffer. The page buffer will automatically be
erased (all bits set) after:
• A device Reset
• Any page write or erase operation
• A Clear Page Buffer command
• A device wake-up from any Sleep mode
9.3.2.3 Programming
For page programming, filling the page buffer and writing the page buffer into Flash, User Row, and EEPROM are
two separate operations.
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:
2.Write the page buffer to Flash with the Erase and Write Page (ERWP) command.
Alternative 2:
1.Write to a location in the page to set up the address.
2.Perform an Erase Page (ER) command.
3.Fill the page buffer.
4.Perform a Write Page (WP) command.
The NVM command set supports both a single erase and write operation, and split Erase Page (ER) and Write Page
(WP) 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 the Flash/EEPROM and writing 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.
ATtiny1614/1616/1617
NVMCTRL - Nonvolatile Memory Controller
9.3.2.4.1 Write Command
The Write Page (WP) 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 automatically be cleared after the operation is finished.
9.3.2.4.2 Erase Command
The Erase Page (ER) command erases the current page. There must be one byte written in the page buffer for the
Erase Page (ER) 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 and Write Page (ERWP) command is a combination of the Erase Page and Write Page commands, but
without clearing the page buffer after the Erase Page 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 (PBC) 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).
The Chip Erase (CHER) 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 (EEER) 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 Write Fuse Command
The Write Fuse (WFU) command writes the fuses. It can only be used by the UPDI; the CPU cannot start this
command.
Follow this procedure to use the Write Fuse command:
1.Write the address of the fuse to the Address register (NVMCTRL.ADDR).
2.Write the data to be written to the fuse to the Data register (NVMCTRL.DATA).
3.Execute the Write Fuse command.
4.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.
9.3.2.5 Write Access after Reset
After a Power-on Reset (POR), the NVMCTRL rejects any write attempts to the NVM for a certain time. During this
period, the Flash Busy (FBUSY) and the EEPROM Busy (EBUSY) bits in the STATUS register will read ‘1’. EEBUSY
and FBUSY must read ‘0’ before the page buffer can be filled, or NVM commands can be issued.
ATtiny1614/1616/1617
NVMCTRL - Nonvolatile Memory Controller
This time-out period is disabled either by writing the Time-Out Disable bit (TOUTDIS) in the System Configuration 0
Fuse (FUSE.SYSCFG0) to ‘0’ or by configuring the RSTPINCFG bit field in FUSE.SYSCFG0 to UPDI.
9.3.3 Preventing Flash/EEPROM Corruption
During periods of low VDD, the Flash program or EEPROM data can be corrupted if the supply voltage is too low for
the CPU and the Flash/EEPROM to operate properly. These issues are the same on-board level systems using
Flash/EEPROM, and the same design solutions may be applied.
A Flash/EEPROM corruption can be caused by two situations when the voltage is too low:
1.A regular write sequence to the Flash, which requires a minimum voltage to operate correctly.
2.The CPU itself can execute instructions incorrectly when the supply voltage is too low.
See the Electrical Characteristics chapter for Maximum Frequency vs. VDD.
Attention: Flash/EEPROM corruption can be avoided by taking these measures:
1.Keep the device in Reset during periods of insufficient power supply voltage. This can be done by
enabling the internal Brown-Out Detector (BOD).
2.The voltage level monitor in the BOD can be used to prevent starting a write to the EEPROM close
to the BOD level.
3.If the detection levels of the internal BOD do not 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.
9.3.4 Interrupts
Table 9-2. Available Interrupt Vectors and Sources
EEREADYNVMThe EEPROM is ready for new write/erase operations.
Complete Datasheet
DS40002204A-page 64
When an interrupt condition occurs, the corresponding interrupt flag is set in the Interrupt Flags
(NVMCTRL.INTFLAGS) register.
An interrupt source is enabled or disabled by writing to the corresponding bit in the Interrupt Control
(NVMCTRL.INTCTRL) register.
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 NVMCTRL.INTFLAGS register for
details on how to clear interrupt flags.
9.3.5 Sleep Mode Operation
If there is no ongoing write operation, the NVMCTRL will enter a sleep mode when the system enters a sleep mode.
If a write operation is ongoing when the system enters a sleep mode, the NVM block, the NVM Controller, and the
system clock will remain ON until the write is finished. This is valid for all sleep modes, including Power-Down sleep
mode.
The EEPROM Ready interrupt will wake up the device only from Idle sleep mode.
The page buffer is cleared when waking up from sleep.
9.3.6 Configuration Change Protection
This peripheral has registers that are under Configuration Change Protection (CCP). To write to these registers, a
certain key must first be written to the CPU.CCP register, followed by a write access to the protected bits within four
CPU instructions.
Attempting to write to a protected register without following the appropriate CCP unlock sequence leaves the
protected register unchanged.
The following registers are under CCP:
Table 9-3. NVMCTRL - Registers under Configuration Change Protection
Bits 2:0 – CMD[2:0] Command
Write this bit field to issue a command. The Configuration Change Protection key for self-programming (SPM) has to
be written within four instructions before this write.
ValueNameDescription
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
-No command
WPWrite page buffer to memory (NVMCTRL.ADDR selects which memory)
ERErase page (NVMCTRL.ADDR selects which memory)
ERWPErase and write page (NVMCTRL.ADDR selects which memory)
PBCPage buffer clear
CHERChip erase: Erase Flash and EEPROM (unless EESAVE in FUSE.SYSCFG is ‘1’)
EEEREEPROM Erase
WFUWrite fuse (only accessible through UPDI)
Bit 1 – BOOTLOCK Boot Section Lock
Writing a ‘1’ to this bit locks the boot section from read and instruction fetch.
If this bit is ‘1’, a read from the boot section will return ‘0’. A fetch from the boot section will also return ‘0’ as
instruction.
This bit can be written from the boot section only. It can only be cleared to ‘0’ by a Reset.
This bit will take effect only when the boot section is left the first time after the bit is written.
Bit 0 – APCWP Application Code Section Write Protection
Writing a ‘1’ to this bit protects the application code section from further writes.
This bit can only be written to ‘1’. It is cleared to ‘0’ only by Reset.
Bit 2 – WRERROR Write Error
This bit will read ‘1’ when a write error has happened. A write error could be writing to different sections before doing
a page write or writing to a protected area. This bit is valid for the last operation.
Bit 1 – EEBUSY EEPROM Busy
This bit will read ‘1’ when the EEPROM is busy with a command.
Bit 0 – FBUSY Flash Busy
This bit will read ‘1’ when the Flash is busy with a command.
Bit 0 – EEREADY EEPROM Ready Interrupt
Writing a ‘1’ to this bit enables the interrupt, which indicates that the EEPROM is ready for new write/erase
operations.
This is a level interrupt that will be triggered only when the EEREADY flag in the INTFLAGS register is set to ‘0’.
Thus, the interrupt must not be enabled before triggering an NVM command, as the EEREADY flag will not be set
before the NVM command issued. The interrupt may be disabled in the interrupt handler.
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 15141312111098
Access
Reset 00000000
Bit 76543210
Access
Reset 00000000
R/WR/WR/WR/WR/WR/WR/WR/W
R/WR/WR/WR/WR/WR/WR/WR/W
Bits 15:0 – DATA[15:0] Data Register
This register is used by the UPDI for fuse write operations.
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 15141312111098
Access
Reset 00000000
Bit 76543210
Access
Reset 00000000
R/WR/WR/WR/WR/WR/WR/WR/W
R/WR/WR/WR/WR/WR/WR/WR/W
Bits 15:0 – ADDR[15:0] Address
The Address register contains the address to the last memory location that has been updated.
• Main Clock Features:
– Safe run-time switching
– Prescaler with 1x to 64x division in 12 different settings
10.2 Overview
The Clock Controller (CLKCTRL) peripheral 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.
Note: Availability of TOSC1, TOSC2 and CLKOUT pin depends on the pin count of the device. See section 5.1
Multiplexed Signals for an overview of which pins are available for each device represented in this data sheet.
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 modes 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 non-volatile 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_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.
CLK_RTC must only be changed if the peripheral is disabled.
– CLK_TCD is used by the TCD. It will be requested when the TCD is enabled. The clock source can only be
CAUTION
(Div 1, 2, 4, 8, 16, 32,
64, 6, 10, 24, 48)
OSC20M
32.768 kHz Osc.
32.768 kHz crystal Osc.
External clock
CLK_MAIN
CLK_PER
Main Clock Prescaler
changed if the peripheral is disabled.
The clock source for the Main Clock domain is configured by writing to the Clock Select (CLKSEL) bits in the Main
Clock Control A (CLKCTRL.MCLKCTRLA) register. The asynchronous clock sources are configured by registers in
the respective peripheral.
10.2.2 Signal Description
SignalTypeDescription
CLKOUTDigital outputCLK_PER output
10.3 Functional Description
10.3.1 Sleep Mode Operation
When a clock source is not used/requested, it will turn off. It is possible to request a clock source directly by writing a
'1' to the Run in Standby (RUNSTDBY) bit in the respective oscillator's Control A (CLKCTRL.[osc]CTRLA) register.
This will cause the oscillator to run constantly, except for Power-Down sleep mode. Additionally, when this bit is
written to '1', the oscillator start-up time is eliminated when the clock source is requested by a peripheral.
ATtiny1614/1616/1617
CLKCTRL - Clock Controller
The main clock will always run in Active and Idle sleep mode. In Standby sleep mode, the main clock will only run if
any peripheral is requesting it, or the Run in Standby (RUNSTDBY) bit in the respective oscillator's Control A
(CLKCTRL.[osc]CTRLA) register is written to '1'.
In Power-Down sleep mode, the main clock will stop after all NVM operations are completed.
10.3.2 Main Clock Selection and Prescaler
All internal oscillators can be used as the main clock source for CLK_MAIN. The main clock source is selectable from
software and can be safely changed during normal operation.
Upon selection of an external clock source, a switch to the chosen clock source will only occur if edges are detected,
indicating it is stable. Until a sufficient number of clock edges are detected, the switch will not occur, and it will not be
possible to change to another clock source again without executing a Reset.
An ongoing clock source switch is indicated by the System Oscillator Changing (SOSC) flag in the Main Clock Status
(CLKCTRL.MCLKSTATUS) register. The stability of the external clock sources is indicated by the respective status
(EXTS and XOSC32KS in CLKCTRL.MCLKSTATUS) flags.
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 divides
CLK_MAIN by a factor from 1 to 64.
Figure 10-2. Main Clock and Prescaler
The Main Clock and Prescaler configuration (CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLB) registers are
protected by the Configuration Change Protection Mechanism, employing a timed write procedure for changing these
registers.
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 (FREQSEL) bits of the
Oscillator Configuration (FUSE.OSCCFG) fuse, these frequencies are possible after Reset:
Table 10-1. Peripheral Clock Frequencies After Reset
CLK_MAIN as Per FREQSEL in FUSE.OSCCFGResulting CLK_PER
16 MHz2.66 MHz
20 MHz3.3 MHz
See the OSC20M description for further details.
10.3.4 Clock Sources
All internal clock sources are enabled automatically when they are requested by a peripheral. The crystal oscillator,
based on an external crystal, must be enabled by writing a '1' to the ENABLE bit in the 32.768 kHz Crystal Oscillator
Control A (CLKCTRL.XOSC32KCTRLA) register before it can serve as a clock source.
The respective Oscillator Status bits in the Main Clock Status (CLKCTRL.MCLKSTATUS) register indicate whether
the clock source is running and stable.
10.3.4.1 Internal Oscillators
The internal oscillators do not require any external components to run.
ATtiny1614/1616/1617
CLKCTRL - Clock Controller
10.3.4.1.1 16/20 MHz Oscillator (OSC20M)
This oscillator can operate at multiple frequencies, selected by the value of the Frequency Select (FREQSEL) bits in
the Oscillator Configuration (FUSE.OSCCFG) fuse. The center frequencies are:
• 16 MHz
• 20 MHz
After a System Reset, FUSE.OSCCFG determines the initial frequency of CLK_MAIN.
During Reset, the calibration values for the OSC20M are loaded from fuses. There are two different Calibration bit
fields:
• The Calibration (CAL20M) bit field in the Calibration A (CLKCTRL.OSC20MCALIBA) register enables calibration
around the current center frequency
• The Oscillator Temperature Coefficient Calibration (TEMPCAL20M) bit field in the Calibration B
(CLKCTRL.OSC20MCALIBB) register enables adjustment of the slope of the temperature drift compensation
For applications requiring a more fine-tuned frequency setting than the oscillator calibration provides, factory-stored
frequency error after calibrations are available.
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 (LOCKEN) bit in the Control B (CLKCTRL.OSC20MCALIBB) register 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.
OSC20M Stored Frequency Error Compensation
This oscillator can operate at multiple frequencies, selected by the value of the Frequency Select (FREQSEL) bits in
the Oscillator Configuration (FUSE.OSCCFG) fuse at Reset. As previously mentioned, appropriate calibration values
are loaded to adjust to center frequency (OSC20M) and temperature drift compensation (TEMPCAL20M), meeting
the specifications defined in the internal oscillator characteristics. For applications requiring a wider operating range,
the relative factory stored frequency error after calibrations can be used. The four errors are measured with different
settings and are available in the signature row as signed byte values.
• SIGROW.OSC16ERR3V is the frequency error from 16 MHz measured at 3V
• SIGROW.OSC16ERR5V is the frequency error from 16 MHz measured at 5V
• SIGROW.OSC20ERR3V is the frequency error from 20 MHz measured at 3V
• SIGROW.OSC20ERR5V is the frequency error from 20 MHz measured at 5V
The error is stored as a compressed Q1.10 fixed point 8-bit value, not to lose resolution, where the MSb is the sign
bit, and the seven LSbs are the lower bits of the Q1.10.
BAUD
act
= BAUD
+
BAUD
The minimum legal BAUD register value is 0x40, the target BAUD register value must, 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 */
int8_t sigrow_val = SIGROW.OSC16ERR3V; // read signed errorint32_t baud_reg_val = 600; // ideal BAUD register value
assert (baud_reg_val >= 0x4A); // Verify legal min BAUD register
value with max neg comp
baud_reg_val *= (1024 + sigrow_val); // sum resolution + error
baud_reg_val /= 1024; // divide by resolution
USART0.BAUD = (int16_t) baud_reg_val; // set adjusted baud rate
*
1024
10.3.4.1.2 32.768 kHz Oscillator (OSCULP32K)
The 32.768 kHz oscillator is optimized for Ultra Low-Power (ULP) operation. Power consumption is decreased at the
cost of decreased accuracy compared to an external crystal oscillator.
This oscillator provides the 1.024 kHz signal for the Real-Time Counter (RTC), the Watchdog Timer (WDT), and the
Brown-out Detector (BOD).
The start-up time of this oscillator is the oscillator start-up time plus four oscillator cycles. Refer to the Electrical
Characteristics section for the start-up time.
10.3.4.2 External Clock Sources
These external clock sources are available:
• External Clock from pin EXTCLK
• 32.768 kHz Crystal Oscillator on pins TOSC1 and TOSC2
• 32.768 kHz External Clock on pin TOSC1
10.3.4.2.1 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.
This oscillator supports two input options: Either a crystal is connected to the pins TOSC1 and TOSC2, or an external
clock running at 32.768 kHz is connected to TOSC1. The input option must be configured by writing the Source
Select (SEL) bit in the XOSC32K Control A (CLKCTRL.XOSC32KCTRLA) register.
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 (CSUT)
bits 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.5 Configuration Change Protection
This peripheral has registers that are under Configuration Change Protection (CCP). To write to these registers, a
certain key must first be written to the CPU.CCP register, followed by a write access to the protected bits within four
CPU instructions.
Attempting to write to a protected register without following the appropriate CCP unlock sequence leaves the
protected register unchanged.
The following registers are under CCP:
Table 10-2. CLKCTRL - Registers Under Configuration Change Protection
Bit 7 – CLKOUT System Clock Out
When this bit is written to '1', the system clock is output to the CLKOUT pin. The CLKOUT pin is available for devices
with 20 pins or more. See section 5.1 Multiplexed Signals, for more information.
When the device is in a sleep mode, there is no clock output unless a peripheral is using the system clock.
Bits 1:0 – CLKSEL[1:0] Clock Select
This bit field selects the source for the Main Clock (CLK_MAIN).
Bits 4:1 – PDIV[3:0] Prescaler Division
If the Prescaler Enable (PEN) bit is written to ‘1’, this bit field defines the division ratio of the main clock prescaler.
This bit field can be written during run-time to vary the clock frequency of the system to suit the application
requirements.
The user software must ensure a correct configuration of input frequency (CLK_MAIN) and prescaler settings, such
that the resulting frequency of CLK_PER never exceeds the allowed maximum (see Electrical Characteristics).
ValueDescription
Value
0x0
0x1
0x2
0x3
0x4
0x5
0x8
0x9
0xA
0xB
0xC
other
Division
2
4
8
16
32
64
6
10
12
24
48
Reserved
Bit 0 – PEN Prescaler Enable
This bit must be written '1' to enable the prescaler. When enabled, the division ratio is selected by the PDIV bit field.
When this bit is written to '0', the main clock will pass through undivided (CLK_PER=CLK_MAIN), regardless of the
value of PDIV.
Name: MCLKLOCK
Offset: 0x02
Reset: Based on OSCLOCK in FUSE.OSCCFG
Property: Configuration Change Protection
Bit 76543210
Access
Reset x
LOCKEN
Bit 0 – LOCKEN Lock Enable
Writing this bit to '1' will lock the CLKCTRL.MCLKCTRLA and CLKCTRL.MCLKCTRLB registers, and, if applicable,
the calibration settings for the current main clock source from further software updates. Once locked, the
CLKCTRL.MCLKLOCK registers cannot be accessed until the next hardware Reset.
This protects the CLKCTRL.MCLKCTRLA and CLKCTRL.MCLKCTRLB registers and calibration settings for the main
clock source from unintentional modification by software.
At Reset, the LOCKEN bit is loaded based on the OSCLOCK bit in FUSE.OSCCFG.
Bit 6 – XOSC32KS XOSC32K Status
The Status bit will only be available if the source is requested as the main clock or by another module. If the oscillator
RUNSTDBY bit is set, but the oscillator is unused/not requested, this bit will be ‘0’.
ValueDescription
0
1
EXTCLK has not started
EXTCLK has started
XOSC32K is not stable
XOSC32K is stable
Bit 5 – OSC32KS OSCULP32K Status
The Status bit will only be available if the source is requested as the main clock or by another module. If the oscillator
RUNSTDBY bit is set, but the oscillator is unused/not requested, this bit will be ‘0’.
ValueDescription
0
1
Bit 4 – OSC20MS OSC20M Status
The Status bit will only be available if the source is requested as the main clock or by another module. If the oscillator
RUNSTDBY bit is set, but the oscillator is unused/not requested, this bit will be ‘0’.
ValueDescription
0
1
Bit 0 – SOSC Main Clock Oscillator Changing
ValueDescription
0
1
OSCULP32K is not stable
OSCULP32K is stable
OSC20M is not stable
OSC20M is stable
The clock source for CLK_MAIN is not undergoing a switch
The clock source for CLK_MAIN is undergoing a switch and will change as soon as the new source is
stable
Bit 1 – RUNSTDBY Run in Standby
This bit forces the oscillator ON in all modes, even when unused by the system. In Standby sleep mode, this can be
used to ensure immediate wake-up and not waiting for the oscillator start-up time.
When not requested by peripherals, no oscillator output is provided.
It takes four oscillator cycles to open the clock gate after a request, but the oscillator analog start-up time will be
removed when this bit is set.
Name: OSC20MCALIBA
Offset: 0x11
Reset: Based on FREQSEL in FUSE.OSCCFG
Property: Configuration Change Protection
Bit 76543210
Access
Reset xxxxxx
CAL20M[5:0]
R/WR/WR/WR/WR/WR/W
Bits 5:0 – CAL20M[5:0] Calibration
This bit field changes the frequency around the current center frequency of the OSC20M for fine-tuning.
At Reset, the factory calibrated values are loaded based on the FREQSEL bits in FUSE.OSCCFG.
Name: OSC20MCALIBB
Offset: 0x12
Reset: Based on FUSE.OSCCFG
Property: Configuration Change Protection
Bit 76543210
LOCKTEMPCAL20M[3:0]
Access
Reset xxxxx
RR/WR/WR/WR/W
Bit 7 – LOCK Oscillator Calibration Locked by Fuse
When this bit is set, the calibration settings in CLKCTRL.OSC20MCALIBA and CLKCTRL.OSC20MCALIBB cannot
be changed.
At Reset, the value is loaded from the OSCLOCK bit in the Oscillator Configuration (FUSE.OSCCFG) fuse.
Bits 3:0 – TEMPCAL20M[3:0] Oscillator Temperature Coefficient Calibration
This bit field tunes the slope of the temperature compensation.
At Reset, the factory calibrated values are loaded based on the FREQSEL bits in FUSE.OSCCFG.
Bit 1 – RUNSTDBY Run in Standby
This bit forces the oscillator ON in all modes, even when unused by the system. In Standby sleep mode, this can be
used to ensure immediate wake-up and not waiting for the oscillator start-up time.
When not requested by peripherals, no oscillator output is provided.
It takes four oscillator cycles to open the clock gate after a request, but the oscillator analog start-up time will be
removed when this bit is set.
The SEL and CSUT bits cannot be changed as long as the ENABLE bit is set, or the XOSC32K Stable (XOSC32KS)
bit in CLKCTRL.MCLKSTATUS is high.
To change settings safely, write a '0' to the ENABLE bit and wait until XOSC32KS is '0' before re-enabling the
XOSC32K with new settings.
Bit 76543210
Access
Reset 00000
CSUT[1:0]SELRUNSTDBYENABLE
R/WR/WR/WR/WR/W
Bits 5:4 – CSUT[1:0] Crystal Start-Up Time
This bit field selects the start-up time for the XOSC32K. It is write-protected when the oscillator is enabled
(ENABLE=1).
If SEL=1, the start-up time will not be applied.
Bit 2 – SEL Source Select
This bit selects the external source type. It is write-protected when the oscillator is enabled (ENABLE=1).
ValueDescription
0
1
Bit 1 – RUNSTDBY Run in Standby
Writing this bit to '1' starts the crystal oscillator and forces the oscillator ON in all modes, even when unused by the
system if the ENABLE bit is set. In Standby sleep mode, this can be used to ensure immediate wake-up and not
waiting for oscillator start-up time. When this bit is '0', the crystal oscillator is only running when requested, and the
ENABLE bit is set.
The output of XOSC32K is not sent to other peripherals unless it is requested by one or more peripherals.
When the RUNSTDBY bit is set, there will only be a delay of two to three crystal oscillator cycles after a request until
the oscillator output is received, if the initial crystal start-up time has already completed.
Depending on the RUNSTBY bit, the oscillator will be turned ON all the time if the device is in Active, Idle, or Standby
sleep mode, or only be enabled when requested.
This bit is I/O protected to prevent any unintentional enabling of the oscillator.
Bit 0 – ENABLE Enable
When this bit is written to '1', the configuration of the respective input pins is overridden to TOSC1 and TOSC2. Also,
the Source Select (SEL) and Crystal Start-Up Time (CSUT) bits become read-only.
This bit is I/O protected to prevent any unintentional enabling of the oscillator.
• Power Management for Adjusting Power Consumption and Functions
• Three Sleep Modes:
– Idle
– Standby
– Power-Down
• Configurable Standby 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 modes.
There are four modes available: One Active mode in which software is executed, and three sleep modes. The
available sleep modes are Idle, Standby and Power-Down.
All sleep modes are available and can be entered from the Active mode. In Active mode, the CPU is executing
application code. When the device enters sleep mode, the program execution is stopped. 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 sleep mode.
The content of the register file, SRAM and registers, is kept during sleep. If a Reset occurs during sleep, the device
will reset, start and execute from the Reset vector.
ATtiny1614/1616/1617
SLPCTRL - Sleep Controller
11.2.1 Block Diagram
Figure 11-1. Sleep Controller in the System
11.3 Functional Description
11.3.1 Initialization
To put the device into a sleep mode, follow these steps:
1.Configure and enable the interrupts that are able to wake the device from sleep.
WARNING
Also, enable global interrupts.
2.Select which sleep mode to enter and enable the Sleep Controller by writing to the Sleep Mode (SMODE) bit
field and the Enable (SEN) bit in the Control A (SLPCTRL.CTRLA) register.
The SLEEP instruction must be executed to make the device go to sleep.
11.3.2 Operation
11.3.2.1 Sleep Modes
In addition to Active mode, there are three different sleep modes with decreasing power consumption and
functionality.
IdleThe CPU stops executing code. No peripherals are disabled, and all interrupt sources can wake the
StandbyThe user can configure peripherals to be enabled or not, using the respective RUNSTBY bit. This
PowerDown
ATtiny1614/1616/1617
SLPCTRL - Sleep Controller
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.
device.
means that the power consumption is highly dependent on what functionality is enabled, and thus may
vary between the Idle and Power-Down levels.
SleepWalking is available for the ADC module.
BOD, WDT, and PIT (a component of the RTC) are active.
The only wake-up sources are the pin change interrupt, PIT, VLM, TWI address match, and CCL.
1.The RUNSTBY bit of the corresponding peripheral must be set to enter the Active state.
2.Only the PIT is available in the Power-Down sleep mode.
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 the main
clock source:
• In Idle sleep mode, the main clock source is kept running to eliminate additional wake-up time.
• In Standby sleep mode, the main clock might be running depending on the peripheral configuration.
• In Power-Down sleep mode, only the ULP 32.768 kHz oscillator and the RTC clock may be running if it is used
by the BOD or WDT. All other clock sources will be OFF.
Table 11-2. Sleep Modes and Start-up Time
Sleep ModeStart-up Time
PORT Pin interruptXXX
TWI Address Match interruptXXX
USART Start-of-Frame interruptsXX
ADC/PTC interruptsXX
RTC interruptsXX
TCBn Capture interruptXX
(1)
(1)
(1)
(1)
X
All other interruptsX
(2)
IDLE6 CLK
Standby6 CLK + OSC start-up
Power-Down6 CLK + OSC start-up
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.3.3 Debug Operation
During run-time debugging, this peripheral will continue normal operation. The SLPCTRL is only affected by a break
in the debug operation: If the SLPCTRL is in a sleep mode when a break occurs, the device will wake up, and the
SLPCTRL will go to Active mode, even if there are no pending interrupt requests.
If the peripheral is configured to require periodic service by the CPU through interrupts or similar, improper operation
or data loss may result during halted debugging.
Bits 2:1 – SMODE[1:0] Sleep Mode
Writing these bits selects which sleep mode to enter when the Sleep Enable (SEN) bit is written to ‘1’ and the SLEEP
instruction is executed.
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 software.
The RSTCTRL is always enabled, but some of the Reset sources must be enabled individually (either by Fuses or by
software) before they can request a Reset.
After a Reset from any source, the registers in the device with automatic loading from the Fuses or from the
Signature Row are updated.
12.3.2 Operation
12.3.2.1 Reset Sources
After any Reset, the source that caused the Reset is found in the Reset Flag (RSTCTRL.RSTFR) register. The user
can identify the previous Reset source by reading this register in the software application.
There are two types of Resets based on the source:
The purpose of the Power-on Reset (POR) is to ensure a safe start-up of logic and memories. The POR will keep the
device in Reset until the voltage level is high enough. The POR is generated by an on-chip detection circuit. The
POR is always enabled and activated when VDD is below the POR threshold voltage.
The on-chip Brown-out Detection (BOD) circuit will monitor the VDD level during operation by comparing it to a fixed
trigger level. The trigger level for the BOD can be selected by fuses. If BOD is unused in the application, it is forced to
a minimum level in order to ensure a safe operation during internal Reset and chip erase.
Figure 12-4. Brown-out Detection Reset
ATtiny1614/1616/1617
RSTCTRL - Reset Controller
12.3.2.1.3 Software Reset
The software Reset makes it possible to issue a system Reset from software. The Reset is generated by writing a '1'
to the Software Reset Enable bit (SWRE) in the Software Reset register (RSTCTRL.SWRR).
The Reset will take place immediately after the bit is written, and the device will be kept in Reset until the Reset
sequence is completed.
12.3.2.1.4 External Reset
The external Reset is enabled by a fuse, see the RSTPINCFG field in FUSE.SYSCFG0.
When enabled, the external Reset requests a Reset as long as the
until RESET is high again.
The Watchdog Timer (WDT) is a system function for monitoring correct program operation. If the WDT is not reset
from software according to the programmed time-out period, a Watchdog Reset will be issued. See the WDT
documentation for further details.
12.3.2.1.6 Universal Program Debug Interface (UPDI) Reset
The Universal Program Debug Interface (UPDI) contains a separate Reset source used to reset the device during
external programming and debugging. The Reset source is accessible only from external debuggers and
programmers. More details can be found in the UPDI section.
ATtiny1614/1616/1617
RSTCTRL - Reset Controller
12.3.2.1.7 Domains Affected By Reset
The following logic domains are affected by the various Resets:
Table 12-1. Logic Domains Affected by Various Resets
Reset TypeFuses are
Reloaded
PORXXXXX
BODXXXX
Software ResetXXX
External ResetXXX
Watchdog ResetXXX
UPDI ResetXXX
12.3.2.2 Reset Time
The Reset time can be split into two parts.
The first part is when any of the Reset sources are active. This part depends on the input to the Reset sources. The
external Reset is active as long as the RESET pin is low. The Power-on Reset (POR) and the Brown-out Detector
(BOD) are active as long as the supply voltage is below the Reset source threshold.
The second part is when all the Reset sources are released, and an internal Reset initialization of the device is done.
This time will be increased with the start-up time given by the Start-Up Time Setting (SUT) bit field in the System
Configuration 1 (FUSE.SYSCFG1) fuse. The internal Reset initialization time will also increase if the Cyclic
Redundancy Check Memory Scan (CRCSCAN) is configured to run at start-up. This configuration can be changed in
the CRC Source (CRCSRC) bit field in the System Configuration 0 (FUSE.SYSCFG0) fuse.
12.3.3 Sleep Mode Operation
The RSTCTRL operates in Active mode and in all sleep modes.
This peripheral has registers that are under Configuration Change Protection (CCP). To write to these registers, a
certain key must first be written to the CPU.CCP register, followed by a write access to the protected bits within four
CPU instructions.
Attempting to write to a protected register without following the appropriate CCP unlock sequence leaves the
protected register unchanged.
The following registers are under CCP:
Table 12-2. RSTCTRL - Registers Under Configuration Change Protection