0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
ATTINY807-MNR

ATTINY807-MNR

  • 厂商:

    ACTEL(微芯科技)

  • 封装:

    VFQFN24

  • 描述:

    IC MCU 8BIT 8KB FLASH 24VQFN

  • 数据手册
  • 价格&库存
ATTINY807-MNR 数据手册
ATtiny807/1607 AVR® Microcontroller with Core Independent Peripherals and picoPower® Technology Introduction ® The ATtiny807/1607 microcontrollers are using the high-performance, low-power AVR RISC architecture, and are capable of running at up to 20 MHz, with up to 8/16 KB Flash, 512/1024 bytes of SRAM, and 128/256 bytes of EEPROM in a 24-pin package. The series uses the latest technologies with a flexible and low-power architecture including Event System and SleepWalking, accurate analog features and advanced peripherals. 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: – 8/16 KB In-system self-programmable Flash memory – 128/256B EEPROM – 512/1024B SRAM System: – Power-on Reset (POR) – Brown-out Detection (BOD) – Internal and external clock options with: • 16/20 MHz low-power internal RC oscillator • 32.768 kHz Ultra Low Power (ULP) internal RC oscillator with ±10% accuracy, ±2% calibration step size • External clock input – Single pin Unified Program Debug Interface (UPDI) – Three sleep modes: • Idle with all peripherals running and mode for immediate wake-up time • Standby Sleep mode: – Configurable operation of selected peripherals – SleepWalking peripherals • Power-Down Sleep mode with limited wake-up functionality © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 1 ATtiny807/1607 • • • • Peripherals: – 3-channel Event System – One 16-bit Timer/Counter with Dedicated Period register and Three Compare Channels (TCA) – One 16-bit Timer/Counter type B with Input Capture (TCB) – One 16-bit Real Time Counter (RTC) running from internal RC oscillator – One USART with fractional baud rate generator, auto-baud, Start-Of-Frame (SOF) detection, and Local Interconnect Network (LIN) support – Master/slave Serial Peripheral Interface (SPI) – Master/slave TWI with dual address match • Standard mode (Sm, 100 kHz) • Fast mode (Fm, 400 kHz) • Fast mode Plus (Fm+, 1 MHz) – Configurable Custom Logic (CCL) with two Programmable Lookup Tables (LUT) – One Analog Comparator (AC) with 150 ns propagation delay – 10-bit 150 ksps Analog-to-Digital Converter (ADC) – Five selectable internal voltage references: 0.55V, 1.1V, 1.5V, 2.5V and 4.3V – Automated CRC memory scan – Programmable Watchdog Timer (WDT) with separate on-chip oscillator – External interrupt on all general purpose pins I/O and Packages: – 24-pin • 22 Programmable I/O lines • VQFN 4x4 Temperature Ranges: – -40°C to 105°C operating range – -40°C to 125°C temperature graded device options available Speed Grades: – TA max. 105°C • 0-5 MHz @ 1.8V – 5.5V • 0-10 MHz @ 2.7V – 5.5V • 0-20 MHz @ 4.5V – 5.5V © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 2 Table of Contents Introduction......................................................................................................................1 Features.......................................................................................................................... 1 ® 1. tinyAVR 0-Series Overview......................................................................................9 1.1. Configuration Summary..............................................................................................................10 2. Ordering Information................................................................................................12 2.1. 2.2. ATtiny807................................................................................................................................... 12 ATtiny1607................................................................................................................................. 12 3. Block Diagram......................................................................................................... 13 4. Pinout...................................................................................................................... 14 4.1. 24-pin QFN4x4........................................................................................................................... 14 5. I/O Multiplexing and Considerations........................................................................15 5.1. 5.2. Multiplexed Signals.................................................................................................................... 15 Reset Pin Selection.................................................................................................................... 15 6. Memories.................................................................................................................17 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. 6.9. 6.10. Overview.................................................................................................................................... 17 Memory Map.............................................................................................................................. 18 In-System Reprogrammable Flash Program Memory................................................................19 SRAM Data Memory.................................................................................................................. 19 EEPROM Data Memory............................................................................................................. 20 User Row....................................................................................................................................20 Signature Bytes.......................................................................................................................... 20 I/O Memory.................................................................................................................................20 Memory Section Access from CPU and UPDI on Locked Device..............................................23 Configuration and User Fuses (FUSE).......................................................................................24 7. Peripherals and Architecture................................................................................... 43 7.1. 7.2. Peripheral Module Address Map................................................................................................ 43 Interrupt Vector Mapping............................................................................................................ 44 7.3. System Configuration (SYSCFG)...............................................................................................45 8. AVR CPU................................................................................................................. 48 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. Features..................................................................................................................................... 48 Overview.................................................................................................................................... 48 Architecture................................................................................................................................ 48 Arithmetic Logic Unit (ALU)........................................................................................................ 50 Functional Description................................................................................................................51 Register Summary - CPU...........................................................................................................56 Register Description................................................................................................................... 56 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 3 ATtiny807/1607 9. NVMCTRL - Nonvolatile Memory Controller............................................................61 9.1. 9.2. 9.3. 9.4. 9.5. Features..................................................................................................................................... 61 Overview.................................................................................................................................... 61 Functional Description................................................................................................................62 Register Summary - NVMCTRL................................................................................................. 69 Register Description................................................................................................................... 69 10. CLKCTRL - Clock Controller................................................................................... 77 10.1. 10.2. 10.3. 10.4. 10.5. Features..................................................................................................................................... 77 Overview.................................................................................................................................... 77 Functional Description................................................................................................................79 Register Summary - CLKCTRL.................................................................................................. 84 Register Description................................................................................................................... 84 11. SLPCTRL - Sleep Controller................................................................................... 93 11.1. 11.2. 11.3. 11.4. 11.5. Features..................................................................................................................................... 93 Overview.................................................................................................................................... 93 Functional Description................................................................................................................94 Register Summary - SLPCTRL.................................................................................................. 97 Register Description................................................................................................................... 97 12. RSTCTRL - Reset Controller...................................................................................99 12.1. 12.2. 12.3. 12.4. 12.5. Features..................................................................................................................................... 99 Overview.................................................................................................................................... 99 Functional Description..............................................................................................................100 Register Summary - RSTCTRL................................................................................................103 Register Description................................................................................................................. 103 13. CPUINT - CPU Interrupt Controller....................................................................... 106 13.1. 13.2. 13.3. 13.4. 13.5. Features................................................................................................................................... 106 Overview.................................................................................................................................. 106 Functional Description..............................................................................................................108 Register Summary - CPUINT................................................................................................... 115 Register Description................................................................................................................. 115 14. EVSYS - Event System......................................................................................... 120 14.1. 14.2. 14.3. 14.4. 14.5. Features................................................................................................................................... 120 Overview.................................................................................................................................. 120 Functional Description..............................................................................................................123 Register Summary - EVSYS.................................................................................................... 125 Register Description................................................................................................................. 125 15. PORTMUX - Port Multiplexer................................................................................ 134 15.1. Overview.................................................................................................................................. 134 15.2. Register Summary - PORTMUX.............................................................................................. 135 15.3. Register Description................................................................................................................. 135 16. PORT - I/O Pin Configuration................................................................................ 140 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 4 ATtiny807/1607 16.1. 16.2. 16.3. 16.4. 16.5. 16.6. 16.7. Features................................................................................................................................... 140 Overview.................................................................................................................................. 140 Functional Description..............................................................................................................142 Register Summary - PORT...................................................................................................... 146 Register Description - Ports..................................................................................................... 146 Register Summary - VPORT.................................................................................................... 158 Register Description - Virtual Ports.......................................................................................... 158 17. BOD - Brown-out Detector.....................................................................................163 17.1. 17.2. 17.3. 17.4. 17.5. Features................................................................................................................................... 163 Overview.................................................................................................................................. 163 Functional Description..............................................................................................................165 Register Summary - BOD.........................................................................................................167 Register Description................................................................................................................. 167 18. VREF - Voltage Reference.................................................................................... 174 18.1. 18.2. 18.3. 18.4. 18.5. Features................................................................................................................................... 174 Overview.................................................................................................................................. 174 Functional Description..............................................................................................................174 Register Summary - VREF.......................................................................................................176 Register Description................................................................................................................. 176 19. WDT - Watchdog Timer......................................................................................... 179 19.1. 19.2. 19.3. 19.4. 19.5. Features................................................................................................................................... 179 Overview.................................................................................................................................. 179 Functional Description..............................................................................................................181 Register Summary - WDT........................................................................................................ 185 Register Description................................................................................................................. 185 20. TCA - 16-bit Timer/Counter Type A....................................................................... 189 20.1. 20.2. 20.3. 20.4. 20.5. 20.6. 20.7. Features................................................................................................................................... 189 Overview.................................................................................................................................. 189 Functional Description..............................................................................................................193 Register Summary - TCA in Normal Mode (CTRLD.SPLITM=0)............................................. 204 Register Description - Normal Mode........................................................................................ 205 Register Summary - TCA in Split Mode (CTRLD.SPLITM=1).................................................. 225 Register Description - Split Mode.............................................................................................225 21. TCB - 16-bit Timer/Counter Type B....................................................................... 241 21.1. 21.2. 21.3. 21.4. 21.5. Features................................................................................................................................... 241 Overview.................................................................................................................................. 241 Functional Description..............................................................................................................244 Register Summary - TCB......................................................................................................... 252 Register Description................................................................................................................. 252 22. RTC - Real-Time Counter......................................................................................264 22.1. Features................................................................................................................................... 264 22.2. Overview.................................................................................................................................. 264 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 5 ATtiny807/1607 22.3. RTC Functional Description..................................................................................................... 266 22.4. PIT Functional Description....................................................................................................... 267 22.5. Events...................................................................................................................................... 269 22.6. Interrupts.................................................................................................................................. 270 22.7. Sleep Mode Operation............................................................................................................. 271 22.8. Synchronization........................................................................................................................271 22.9. Configuration Change Protection............................................................................................. 271 22.10. Register Summary - RTC.........................................................................................................272 22.11. Register Description................................................................................................................. 272 23. USART - Universal Synchronous and Asynchronous Receiver and Transmitter.. 288 23.1. 23.2. 23.3. 23.4. 23.5. Features................................................................................................................................... 288 Overview.................................................................................................................................. 288 Functional Description..............................................................................................................292 Register Summary - USART.................................................................................................... 307 Register Description................................................................................................................. 307 24. SPI - Serial Peripheral Interface............................................................................ 326 24.1. 24.2. 24.3. 24.4. 24.5. Features................................................................................................................................... 326 Overview.................................................................................................................................. 326 Functional Description..............................................................................................................329 Register Summary - SPI...........................................................................................................337 Register Description................................................................................................................. 337 25. TWI - Two-Wire Interface.......................................................................................346 25.1. 25.2. 25.3. 25.4. 25.5. Features................................................................................................................................... 346 Overview.................................................................................................................................. 346 Functional Description..............................................................................................................348 Register Summary - TWI..........................................................................................................362 Register Description................................................................................................................. 362 26. CRCSCAN - Cyclic Redundancy Check Memory Scan........................................ 382 26.1. 26.2. 26.3. 26.4. 26.5. Features................................................................................................................................... 382 Overview.................................................................................................................................. 382 Functional Description..............................................................................................................384 Register Summary - CRCSCAN...............................................................................................387 Register Description................................................................................................................. 387 27. CCL - Configurable Custom Logic.........................................................................391 27.1. 27.2. 27.3. 27.4. 27.5. Features................................................................................................................................... 391 Overview.................................................................................................................................. 391 Functional Description..............................................................................................................392 Register Summary - CCL......................................................................................................... 400 Register Description................................................................................................................. 400 28. AC - Analog Comparator....................................................................................... 407 28.1. Features................................................................................................................................... 407 28.2. Overview.................................................................................................................................. 407 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 6 ATtiny807/1607 28.3. Functional Description..............................................................................................................409 28.4. Register Summary - AC............................................................................................................411 28.5. Register Description................................................................................................................. 411 29. ADC - Analog-to-Digital Converter........................................................................ 416 29.1. 29.2. 29.3. 29.4. 29.5. Features................................................................................................................................... 416 Overview.................................................................................................................................. 416 Functional Description..............................................................................................................420 Register Summary - ADCn.......................................................................................................428 Register Description................................................................................................................. 428 30. UPDI - Unified Program and Debug Interface....................................................... 446 30.1. 30.2. 30.3. 30.4. 30.5. Features................................................................................................................................... 446 Overview.................................................................................................................................. 446 Functional Description..............................................................................................................449 Register Summary - UPDI........................................................................................................469 Register Description................................................................................................................. 469 31. Electrical Characteristics ...................................................................................... 480 31.1. Disclaimer.................................................................................................................................480 31.2. Absolute Maximum Ratings .....................................................................................................480 31.3. General Operating Ratings ......................................................................................................481 31.4. Power Consumption................................................................................................................. 482 31.5. Wake-Up Time..........................................................................................................................483 31.6. Power Consumption of Peripherals..........................................................................................484 31.7. BOD and POR Characteristics................................................................................................. 485 31.8. External Reset Characteristics................................................................................................. 486 31.9. Oscillators and Clocks..............................................................................................................486 31.10. I/O Pin Characteristics............................................................................................................. 487 31.11. USART..................................................................................................................................... 489 31.12. SPI........................................................................................................................................... 490 31.13. TWI...........................................................................................................................................491 31.14. VREF........................................................................................................................................493 31.15. ADC..........................................................................................................................................494 31.16. AC............................................................................................................................................ 497 31.17. UPDI Timing.............................................................................................................................497 31.18. Programming Time...................................................................................................................498 32. Typical Characteristics...........................................................................................499 32.1. 32.2. 32.3. 32.4. 32.5. 32.6. 32.7. 32.8. Power Consumption................................................................................................................. 499 GPIO........................................................................................................................................ 506 VREF Characteristics............................................................................................................... 513 BOD Characteristics.................................................................................................................515 ADC Characteristics................................................................................................................. 518 AC Characteristics....................................................................................................................523 OSC20M Characteristics..........................................................................................................526 OSCULP32K Characteristics................................................................................................... 528 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 7 ATtiny807/1607 33. Errata ....................................................................................................................530 33.1. Die Revision A..........................................................................................................................530 34. Package Drawings.................................................................................................532 34.1. 24-Pin VQFN............................................................................................................................ 532 34.2. Thermal Considerations........................................................................................................... 533 35. Instruction Set Summary....................................................................................... 534 36. Conventions...........................................................................................................539 36.1. 36.2. 36.3. 36.4. Numerical Notation...................................................................................................................539 Memory Size and Type.............................................................................................................539 Frequency and Time.................................................................................................................539 Registers and Bits.................................................................................................................... 540 37. Acronyms and Abbreviations.................................................................................541 38. Data Sheet Revision History..................................................................................544 38.1. Revision History....................................................................................................................... 544 The Microchip Web Site.............................................................................................. 545 Customer Change Notification Service........................................................................545 Customer Support....................................................................................................... 545 Microchip Devices Code Protection Feature............................................................... 545 Legal Notice.................................................................................................................546 Trademarks................................................................................................................. 546 Quality Management System Certified by DNV...........................................................547 Worldwide Sales and Service......................................................................................548 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 8 ATtiny807/1607 tinyAVR® 0-Series Overview 1. tinyAVR® 0-Series Overview ® The figure below shows the tinyAVR 0-series, laying out pin count variants and memory sizes: • • Vertical migration is possible without code modification, as these devices are fully pin- and feature compatible. Horizontal migration to the left reduces the pin count and therefore the available features. Figure 1-1. Device Family Overview Flash 16 KB ATtiny1604 ATtiny1606 ATtiny1607 8 KB ATtiny804 ATtiny806 ATtiny807 ATtiny406 4 KB ATtiny402 ATtiny404 2 KB ATtiny202 ATtiny204 8 14 20 24 Pins Devices with different Flash memory size typically also have different SRAM and EEPROM. The name of a device of the ATtiny family contains information as depicted below (not all options are available): Figure 1-2. Device Designations ATtiny 1607 - MFR AVR product family Carrier type R = Tape & Reel (omitted) = Tray Flash size in KB Temperature range Feature set N = -40C to +105C F = -40C to +125C Pin count Package type 7 = 24 pins 6 = 20 pins 4 = 14 pins 2 = 8 pins © 2018 Microchip Technology Inc. M = QFN S = SOIC300 SS = SOIC150 Datasheet Preliminary DS40002030A-page 9 ATtiny807/1607 tinyAVR® 0-Series Overview 1.1 Configuration Summary ATtiny807 ATtiny1607 1.1.1 Peripheral Summary Table 1-1. Peripheral Summary Pins 24 24 SRAM 512B 1024B Flash 8 KB 16 KB EEPROM 128B 256B Max. frequency (MHz) 20 20 16-bit Timer/Counter type A (TCA) 1 1 16-bit Timer/Counter type B (TCB) 1 1 12-bit Timer/Counter type D (TCD) NO NO Real Time Counter (RTC) 1 1 USART 1 1 SPI 1 1 TWI (I2C) 1 1 ADC/Channels 1/12 1/12 DAC No No AC pins 1/2p, 2n, 1 out 1/2p, 2n, 1 out Slow mode only Slow mode only Peripheral Touch Controller (PTC) No No Custom Logic 1 1 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 10 ATtiny807/1607 ATtiny807 ATtiny1607 tinyAVR® 0-Series Overview Window Watchdog 1 1 Event System channels 3 3 General purpose I/O 22 22 External interrupts 22 22 CRCSCAN YES YES © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 11 ATtiny807/1607 Ordering Information 2. Ordering Information 2.1 ATtiny807 Table 2-1. ATtiny807 Ordering Codes Ordering Code(1) Flash Package Type (GPC) Leads Power Supply Operational Range Carrier Type ATtiny807-MNR 8 KB VQFN 4x4 (ZHA) 24 1.8V - 5.5V Industrial (-40°C +105°C) Tape & Reel ATtiny807-MFR 8 KB VQFN 4x4 (ZHA) 24 1.8V - 5.5V Industrial (-40°C +125°C) Tape & Reel Note:  1. Pb-free packaging complies to the European Directive for Restriction of Hazardous Substances (RoHS directive). Also Halide free and fully Green. 2.2 ATtiny1607 Table 2-2. ATtiny1607 Ordering Codes Ordering Code(1) Flash ATtiny1607-MNR ATtiny1607-MFR Package Type (GPC) Leads Power Supply Operational Range Carrier Type 16 KB VQFN 4x4 (ZHA) 24 1.8V - 5.5V Industrial (-40°C to +105°C) Tape & Reel 16 KB VQFN 4x4 (ZHA) 24 1.8V - 5.5V Industrial (-40°C to +125°C) Tape & Reel Note:  1. Pb-free packaging complies to the European Directive for Restriction of Hazardous Substances (RoHS directive). Also Halide free and fully Green. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 12 ATtiny807/1607 Block Diagram 3. Block Diagram Figure 3-1. Block Diagram UPDI UPDI / RESET CRC CPU OCD To detectors M M Flash M S SRAM BUS Matrix S EEPROM S S AINPn AINNn OUT NVMCTRL PORTS AC0 GPIOR AINn EVOUTn LUTn-IN[2:0] LUTn-OUT W0[5:0] W0 RXD TXD XCK XDIR ADC0 EVSYS CCL TCA0 TCB0 USART0 E V E N T R O U T I N G N E T W O R K D A T A B U S CPUINT System Management RSTCTRL I N / O U T D A T A B U S PAn PBn PCn Detectors/ references RST/12V POR Bandgap BOD/ VLM CLKCTRL SLPCTRL Clock generation CLKOUT WDT OSC20M EXTCLK OSC32K MISO MOSI SCK SS SPI0 SDA SCL TWI0 © 2018 Microchip Technology Inc. RTC Datasheet Preliminary DS40002030A-page 13 ATtiny807/1607 PC5 PC4 PC3 PC2 22 21 20 19 24-pin QFN4x4 PA0 (RESET/UPDI) 4.1 23 Pinout PA1 4. 24 Pinout PB0 VDD 4 15 PB1 PA4 5 14 PB2 PA5 6 13 PB3 Power PB4 12 16 11 3 PB5 GND 10 PC0 PB6 17 9 2 PB7 (EXTCLK) PA3 8 PC1 PA7 18 7 1 PA6 PA2 Functionality Input supply Reset, Programming Ground Clock, crystal GPIO on VDD power domain TWI Digital function only Analog function © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 14 ATtiny807/1607 I/O Multiplexing and Considerations 5. I/O Multiplexing and Considerations 5.1 Multiplexed Signals QFN 24-pin Table 5-1. PORT Function Multiplexing Pin Name(1,2) 23 PA0 Special RESET, EXTINTx ADC0 S AIN0 AC0 USART0 SPI0 TWI0 TCA0 TCB0 Other CCL Scan LUT0-IN0 RESET UPDI 24 PA1 S AIN1 TXD MOSI BREAK LUT0-IN1 1 PA2 A AIN2 RXD MISO EVOUT LUT0-IN2 2 PA3 S AIN3 XCK SCK W03 3 GND 4 VCC XDIR SS W04 CLKI 5 PA4 S AIN4 6 PA5 S AIN5 OUT 7 PA6 A AIN6 AINN0 8 PA7 S AIN7 AINP0 9 PB7 S 10 PB6 A 11 PB5 S AIN8 AINP1 W02 12 PB4 S AIN9 AINN1 W01 13 PB3 S RXD W00 14 PB2 A TXD W02 15 PB1 I2C S AIN10 XCK SDA W01 16 PB0 I2C S AIN11 XDIR SCL W00 17 PC0 S SCK 18 PC1 S MISO 19 PC2 A MOSI SS W05 ENABLE CLOCK LUT0-OUT W00 SO2 SO3 SI0/SER LUT1-OUT SO0/SER CLKOUT LUT0-OUT SO1/SER EVOUT SI1/SER SI2 SI3 W00 LUT1-OUT EVOUT 20 PC3 S W03 LUT1-IN0 21 PC4 S W04 LUT1-IN1 22 PC5 S W05 LUT1-IN2 Note:  1. Pins 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. Tip:  Signals on alternative pin locations are in typewriter font. 5.2 Reset Pin Selection The reset pin needs to operate as both GPIO, Reset, programming and enable of programming interface (12V) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 15 ATtiny807/1607 I/O Multiplexing and Considerations RSTPINCFG[1:0] Functionality Description 00 GPIO Reset pin used for GPIO Output functionality no sooner than 10 ms External Reset functionality is not available 01 RESET Reset pin operating as external Reset with pull-up enabled 10 PDI Reset pin used for programming interface External Reset functionality is not available Note:  1. Refer to fuses SYSCFG0 in chapter Memories for more information 2. Selected reset pin will have filter 3. Option 2’b10 will be setting after production. Before fuses are read option 2’b00 is assumed 4. A pin cannot be set as output before at least 10ms after Reset is released internally © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 16 ATtiny807/1607 Memories 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 ATtiny1607 ATtiny807 Size 256B 128B Page size 32B 32B Number of pages 8 4 Start address 0x1400 0x1400 AUX rows 3 3 Table 6-2. Physical Properties of SRAM Property ATtiny1607 ATtiny807 Size 1 KB 512B Start address 0x3C00 0x3E00 Table 6-3. Physical Properties of Flash Memory Property ATtiny1607 ATtiny807 Size 16 KB 8 KB Page size 64B 64B Number of pages 256 128 Start address 0x8000 0x8000 AUX rows 1 1 The SRAM is mirrored within the address space 0x2000 - 0x3FFF Self programming between sections in memory is only possible in the following combinations: • Boot – to application code – to application data • Application code – to application data It is not possible for the different sections to write to themselves. Application data cannot write to Flash or EEPROM. CPU execution will be halted while doing self programming © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 17 ATtiny807/1607 Memories EEPROM can be written from Boot and application code Related Links 6.8 I/O Memory 6.2 Memory Map Figure 6-1. Memory Map: Flash 8/16KB, Internal SRAM 512B/1KB, EEPROM 128/256B CPU Code space 0x0000 PDI/CPU Data space 64 I/O Registers 0x0000 – 0x003F 960 Ext I/O Registers 0x0040 – 0x0FFF NVM I/O Registers and data 0x1000 – 0x13FF 0x1400 EEPROM 128/256B 0x147F (For EEPROM 128B)/ 0x14FF (For EEPROM 256B) (Reserved) 0x3C00 (for SRAM 1 KB)/ 0x3E00 (for SRAM 512B) Flash code 8/16 KB Internal SRAM 512B/1 KB 0x3FFF (Reserved) 0x8000 Flash code 8/16 KB 0x9FFF (For Flash 8 KB)/ 0xBFFF (For Flash 16 KB) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 18 ATtiny807/1607 Memories 6.3 In-System Reprogrammable Flash Program Memory The ATtiny807/1607 contains 16/8 KB on-chip in-system reprogrammable Flash memory for program storage. Since all AVR instructions are 16 or 32 bits 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 12/13-bits 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 ATtiny807/1607 also has a CRC peripheral that is a master on the bus. Figure 6-2. Flash and the Three Sections FLASHSTART: 0x8000 BO OT BOOTEND>0: 0x8000+BOOTEND*256 FLASH AP PL ICA TIO N CO DE APPEND>0: 0x8000+APPEND*256 AP PL ICA TIO N DA TA FLASHEND Related Links 9. NVMCTRL - Nonvolatile Memory Controller 6.4 SRAM Data Memory The 512B/1 KB SRAM is used for data storage and stack. Related Links 8. AVR CPU 8.5.4 Stack and Stack Pointer © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 19 ATtiny807/1607 Memories 6.5 EEPROM Data Memory The ATtiny807/1607 has 128/256 bytes of EEPROM data memory, see Memory Map section. The EEPROM memory supports single byte read and write. The EEPROM is controlled by the Nonvolatile Memory Controller (NVMCTRL). Related Links 9. NVMCTRL - Nonvolatile Memory Controller 6.2 Memory Map 6.6 User Row In addition to the EEPROM, the ATtiny807/1607 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. Related Links 6.2 Memory Map 9. NVMCTRL - Nonvolatile Memory Controller 30. UPDI - Unified Program and Debug Interface 6.7 Signature Bytes All ATtiny microcontrollers have a 3-byte signature code that identifies the device. This code can be read in both Serial and Parallel mode. 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 obtained. Table 6-4. Device ID Device Name Signature Bytes Address 0x00 0x01 0x02 ATtiny807 0x1E 0x93 0x23 ATtiny1607 0x1E 0x94 0x23 Related Links 30.3.6 System Information Block 6.8 I/O Memory All ATtiny807/1607 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 - 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 20 ATtiny807/1607 Memories 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 should be written to zero if accessed. Reserved I/O memory addresses should never be written. Some of the interrupt flags are cleared by writing a '1' to them. On ATtiny807/1607 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. General Purpose I/O Registers The ATtiny807/1607 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. Related Links 6.2 Memory Map 7.1 Peripheral Module Address Map 35. Instruction Set Summary © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 21 ATtiny807/1607 Memories 6.8.1 Register Summary - GPIOR Offset Name Bit Pos. 0x00 GPIOR0 7:0 GPIOR[7:0] 0x01 GPIOR1 7:0 GPIOR[7:0] 0x02 GPIOR2 7:0 GPIOR[7:0] 0x03 GPIOR3 7:0 GPIOR[7:0] 6.8.2 Register Description - GPIOR © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 22 ATtiny807/1607 Memories 6.8.2.1 General Purpose I/O Register n Name:  Offset:  Reset:  Property:  GPIOR 0x00 + n*0x01 [n=0..3] 0x00 - These are general purpose registers that can be used to store data, such as global variables and flags, in the bit accessible I/O memory space. Bit 7 6 5 4 3 2 1 0 GPIOR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – GPIOR[7:0] GPIO 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, 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) Memory Section CPU Access UPDI Access Read Write Read Write SRAM Yes Yes Yes Yes Registers Yes Yes Yes Yes Flash Yes Yes Yes Yes EEPROM Yes Yes Yes Yes USERROW Yes Yes Yes Yes SIGROW Yes No Yes No Other Fuses Yes No Yes Yes Table 6-6. Memory Access in Locked Mode (FUSE.LOCKBIT Invalid)(1) Memory Section CPU Access UPDI Access Read Write Read Write SRAM Yes Yes No No Registers Yes Yes No No Flash Yes Yes No No © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 23 ATtiny807/1607 Memories Memory Section CPU Access UPDI Access Read Write Read Write EEPROM Yes No No No USERROW Yes Yes No Yes(2) SIGROW Yes No No No Other Fuses Yes No No No 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. 6.10 Configuration and User Fuses (FUSE) Fuses are part of the nonvolatile memory and hold factory calibration data and device configuration. The fuses are available from 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 and calibration values stored in the fuses are written to their respective target registers at the end of the start-up sequence. The content of the Signature Row fuses (SIGROW) is pre-programmed and cannot be altered. SIGROW holds information such as device ID, serial number, and calibration values. 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 write all reserved bits to ‘1’. This device provides a User Row fuse area (USERROW) that can hold application data. The USERROW can be programmed on a locked device by the UPDI. This can be used for final configuration without having programming or debugging capabilities enabled. Related Links 6.10.2 Signature Row Description 6.10.4 Fuse Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 24 ATtiny807/1607 Memories 6.10.1 Signature Row Summary (SIGROW) Offset Name Bit Pos. 0x00 DEVICEID0 7:0 DEVICEID[7:0] 0x01 DEVICEID1 7:0 DEVICEID[7:0] 0x02 DEVICEID2 7:0 DEVICEID[7:0] 0x03 SERNUM0 7:0 SERNUM[7:0] 0x04 SERNUM1 7:0 SERNUM[7:0] 0x05 SERNUM2 7:0 SERNUM[7:0] 0x06 SERNUM3 7:0 SERNUM[7:0] 0x07 SERNUM4 7:0 SERNUM[7:0] 0x08 SERNUM5 7:0 SERNUM[7:0] 0x09 SERNUM6 7:0 SERNUM[7:0] 0x0A SERNUM7 7:0 SERNUM[7:0] 0x0B SERNUM8 7:0 SERNUM[7:0] 0x0C SERNUM9 7:0 SERNUM[7:0] 0x0D ... Reserved 0x1F 0x20 TEMPSENSE0 7:0 TEMPSENSE[7:0] 0x21 TEMPSENSE1 7:0 TEMPSENSE[7:0] 0x22 OSC16ERR3V 7:0 OSC16ERR3V[7:0] 0x23 OSC16ERR5V 7:0 OSC16ERR5V[7:0] 0x24 OSC20ERR3V 7:0 OSC20ERR3V[7:0] 0x25 OSC20ERR5V 7:0 OSC20ERR5V[7:0] 6.10.2 Signature Row Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 25 ATtiny807/1607 Memories 6.10.2.1 Device ID n Name:  Offset:  Reset:  Property:  DEVICEIDn 0x00 + n*0x01 [n=0..2] [Device ID] - 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 Access R R R R Reset x x x R R R R x x x x x DEVICEID[7:0] Bits 7:0 – DEVICEID[7:0] Byte n of the Device ID © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 26 ATtiny807/1607 Memories 6.10.2.2 Serial Number Byte n Name:  Offset:  Reset:  Property:  SERNUMn 0x03 + n*0x01 [n=0..9] [device serial number] - 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 Bits 7:0 – SERNUM[7:0] Serial Number Byte n © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 27 ATtiny807/1607 Memories 6.10.2.3 Temperature Sensor Calibration n Name:  Offset:  Reset:  Property:  TEMPSENSEn 0x20 + n*0x01 [n=0..1] [Temperature sensor calibration value] - 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 Access R R R R Reset x x x x 3 2 1 0 R R R R x x x x TEMPSENSE[7:0] Bits 7:0 – TEMPSENSE[7:0] Temperature Sensor Calibration Byte n Refer to the ADC chapter for a description on how to use this register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 28 ATtiny807/1607 Memories 6.10.2.4 OSC16 Error at 3V Name:  Offset:  Reset:  Property:  OSC16ERR3V 0x22 [Oscillator frequency error value] - Bit 7 6 5 4 Access R R R R Reset x x x x 3 2 1 0 R R R R x x x x OSC16ERR3V[7:0] Bits 7:0 – OSC16ERR3V[7:0] OSC16 Error at 3V These registers contain the signed oscillator frequency error value when running at internal 16 MHz at 3V, as measured during production. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 29 ATtiny807/1607 Memories 6.10.2.5 OSC16 Error at 5V Name:  Offset:  Reset:  Property:  OSC16ERR5V 0x23 [Oscillator frequency error value] - Bit 7 6 5 4 Access R R R R Reset x x x x 3 2 1 0 R R R R x x x x OSC16ERR5V[7:0] Bits 7:0 – OSC16ERR5V[7:0] OSC16 Error at 5V These registers contain the signed oscillator frequency error value when running at internal 16 MHz at 5V, as measured during production. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 30 ATtiny807/1607 Memories 6.10.2.6 OSC20 Error at 3V Name:  Offset:  Reset:  Property:  OSC20ERR3V 0x24 [Oscillator frequency error value] - Bit 7 6 5 4 Access R R R R Reset x x x x 3 2 1 0 R R R R x x x x OSC20ERR3V[7:0] Bits 7:0 – OSC20ERR3V[7:0] OSC20 Error at 3V These registers contain the signed oscillator frequency error value when running at internal 20 MHz at 3V, as measured during production. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 31 ATtiny807/1607 Memories 6.10.2.7 OSC20 Error at 5V Name:  Offset:  Reset:  Property:  OSC20ERR5V 0x25 [Oscillator frequency error value] - Bit 7 6 5 4 Access R R R R Reset x x x x 3 2 1 0 R R R R x x x x OSC20ERR5V[7:0] Bits 7:0 – OSC20ERR5V[7:0] OSC20 Error at 5V These registers contain the signed oscillator frequency error value when running at internal 20 MHz at 5V, as measured during production. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 32 ATtiny807/1607 Memories 6.10.3 Fuse Summary - FUSE Offset Name Bit Pos. 0x00 WDTCFG 7:0 0x01 BODCFG 7:0 0x02 OSCCFG 7:0 WINDOW[3:0] LVL[2:0] PERIOD[3:0] SAMPFREQ ACTIVE[1:0] OSCLOCK SLEEP[1:0] FREQSEL[1:0] 0x03 ... Reserved 0x04 0x05 SYSCFG0 7:0 CRCSRC[1:0] RSTPINCFG[1:0] 0x06 SYSCFG1 7:0 0x07 APPEND 7:0 APPEND[7:0] 0x08 BOOTEND 7:0 BOOTEND[7:0] 0x09 Reserved 0x0A LOCKBIT 7:0 LOCKBIT[7:0] 6.10.4 EESAVE SUT[2:0] Fuse Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 33 ATtiny807/1607 Memories 6.10.4.1 Watchdog Configuration Name:  Offset:  Reset:  Property:  WDTCFG 0x00 - Bit 7 6 5 4 3 2 Access R Reset 0 1 0 R R R R R 0 0 0 0 R R 0 0 0 WINDOW[3:0] PERIOD[3:0] 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 register (WDT.CTRLA) 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 register (WDT.CTRLA) during Reset. Related Links 19.4 Register Summary - WDT 12. RSTCTRL - Reset Controller © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 34 ATtiny807/1607 Memories 6.10.4.2 BOD Configuration Name:  Offset:  Reset:  Property:  BODCFG 0x01 - 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 LVL[2:0] 4 3 SAMPFREQ 2 1 ACTIVE[1:0] 0 SLEEP[1:0] Access R R R R R R R R Reset 0 0 0 0 0 0 0 0 Bits 7:5 – LVL[2:0] BOD Level This value is loaded into the LVL bit field of the BOD Control B register (BOD.CTRLB) during Reset. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name BODLEVEL0 BODLEVEL1 BODLEVEL2 BODLEVEL3 BODLEVEL4 BODLEVEL5 BODLEVEL6 BODLEVEL7 Description 1.8V 2.15V 2.60V 2.95V 3.30V 3.70V 4.00V 4.30V Bit 4 – SAMPFREQ BOD Sample Frequency This value is loaded into the SAMPFREQ bit of the BOD Control A register (BOD.CTRLA) during Reset. Value 0x0 0x1 Description Sample frequency is 1 kHz Sample frequency is 125 Hz 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 register (BOD.CTRLA) during Reset. Value 0x0 0x1 0x2 0x3 Description Disabled Enabled Sampled Enabled with wake-up halted until BOD is ready 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 register (BOD.CTRLA) during Reset. Value 0x0 0x1 Description Disabled Enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 35 ATtiny807/1607 Memories Value 0x2 0x3 Description Sampled Reserved Related Links 17.4 Register Summary - BOD 12. RSTCTRL - Reset Controller © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 36 ATtiny807/1607 Memories 6.10.4.3 Oscillator Configuration Name:  Offset:  Reset:  Property:  Bit 7 OSCCFG 0x02 - 6 5 4 3 2 1 OSCLOCK 0 FREQSEL[1:0] Access R R R Reset 0 1 0 Bit 7 – OSCLOCK Oscillator Lock This fuse bit is loaded to LOCK in CLKCTRL.OSC20MCALIBB during Reset. Value 0 1 Description Calibration registers of the 20 MHz oscillator are accessible Calibration registers of the 20 MHz oscillator are locked Bits 1:0 – FREQSEL[1:0] Frequency Select These bits select the operation frequency of the 16/20 MHz internal oscillator (OSC20M) and determine the respective factory calibration values to be written to CAL20M in CLKCTRL.OSC20MCALIBA and TEMPCAL20M in CLKCTRL.OSC20MCALIBB. Value 0x1 0x2 Other Description Run at 16 MHz with corresponding factory calibration Run at 20 MHz with corresponding factory calibration Reserved Related Links 10.4 Register Summary - CLKCTRL 12. RSTCTRL - Reset Controller © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 37 ATtiny807/1607 Memories 6.10.4.4 System Configuration 0 Name:  Offset:  Reset:  Property:  SYSCFG0 0x05 0xC4 - Bit 7 6 5 4 Access R R R R R Reset 1 1 0 1 0 CRCSRC[1:0] 3 2 1 0 RSTPINCFG[1:0] EESAVE Bits 7:6 – CRCSRC[1:0] CRC Source See CRC description for more information about the functionality. Value 00 01 10 11 Name FLASH BOOT BOOTAPP NOCRC Description CRC of full Flash (boot, application code and application data) CRC of boot section CRC of application code and boot sections No CRC Bits 3:2 – RSTPINCFG[1:0] Reset Pin Configuration These bits select the Reset/UPDI pin configuration. Value 0x0 0x1 0x2 0x3 Description GPIO UPDI RESET Reserved Bit 0 – EESAVE EEPROM Save During Chip Erase If the device is locked the EEPROM is always erased by a chip erase, regardless of this bit. Value 0 1 Description EEPROM erased during chip erase EEPROM not erased under chip erase © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 38 ATtiny807/1607 Memories 6.10.4.5 System Configuration 1 Name:  Offset:  Reset:  Property:  Bit 7 SYSCFG1 0x06 - 6 5 4 3 2 1 0 SUT[2:0] Access R R R Reset 1 1 1 Bits 2:0 – SUT[2:0] Start-Up Time Setting These bits select the start-up time between power-on and code execution. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Description 0 ms 1 ms 2 ms 4 ms 8 ms 16 ms 32 ms 64 ms © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 39 ATtiny807/1607 Memories 6.10.4.6 Application Code End Name:  Offset:  Reset:  Property:  APPEND 0x07 - Bit 7 6 5 4 3 2 1 0 Access R R R R Reset 0 0 0 R R R R 0 0 0 0 0 APPEND[7:0] Bits 7:0 – APPEND[7:0] Application Code Section End These bits set the end of the application code section in blocks of 256 bytes. The end of the application code section should be set as BOOT size plus application code size. The remaining Flash will be application data. A value of 0x00 defines the Flash from BOOTEND*256 to end of Flash as application code. When both FUSE.APPEND and FUSE.BOOTEND are 0x00, the entire Flash is BOOT section. Related Links 9. NVMCTRL - Nonvolatile Memory Controller 9.3.1.1 Flash © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 40 ATtiny807/1607 Memories 6.10.4.7 Boot End Name:  Offset:  Reset:  Property:  BOOTEND 0x08 - Bit 7 6 5 4 Access R R R R Reset 0 0 0 0 3 2 1 0 R R R R 0 0 0 0 BOOTEND[7:0] Bits 7:0 – BOOTEND[7:0] Boot Section End These bits set the end of the boot section in blocks of 256 bytes. A value of 0x00 defines the whole Flash as BOOT section. When both FUSE.APPEND and FUSE.BOOTEND are 0x00, the entire Flash is BOOT section. Related Links 9. NVMCTRL - Nonvolatile Memory Controller 9.3.1.1 Flash © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 41 ATtiny807/1607 Memories 6.10.4.8 Lockbits Name:  Offset:  Reset:  Property:  Bit LOCKBIT 0x0A - 7 6 5 4 3 2 1 0 R/W R/W R/W R/W 0 0 0 R/W R/W R/W R/W 0 0 0 0 0 LOCKBIT[7:0] Access Reset 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 CSspace. Value 0xC5 other Description Valid key - the device is open Invalid - the device is locked © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 42 ATtiny807/1607 Peripherals and Architecture 7. Peripherals and Architecture 7.1 Peripheral Module Address Map The address map shows the base address for each peripheral. For complete register description and summary for each peripheral module, refer to the respective module chapters. Table 7-1. Peripheral Module Address Map Base Address Name Description 0x0000 VPORTA Virtual Port A 0x0004 VPORTB Virtual Port B 0x0008 VPORTC Virtual Port C 0x001C GPIO General Purpose I/O registers 0x0030 CPU CPU 0x0040 RSTCTRL Reset Controller 0x0050 SLPCTRL Sleep Controller 0x0060 CLKCTRL Clock Controller 0x0080 BOD Brown-Out Detector 0x00A0 VREF Voltage Reference 0x0100 WDT Watchdog Timer 0x0110 CPUINT Interrupt Controller 0x0120 CRCSCAN Cyclic Redundancy Check Memory Scan 0x0140 RTC Real-Time Counter 0x0180 EVSYS Event System 0x01C0 CCL Configurable Custom Logic 0x0200 PORTMUX Port Multiplexer 0x0400 PORTA Port A Configuration 0x0420 PORTB Port B Configuration 0x0440 PORTC Port C Configuration 0x0600 ADC0 Analog-to-Digital Converter 0x0680 AC0 Analog Comparator 0 0x0800 USART0 Universal Synchronous Asynchronous Receiver Transmitter 0x0810 TWI0 Two-Wire Interface 0x0820 SPI0 Serial Peripheral Interface © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 43 ATtiny807/1607 Peripherals and Architecture 7.2 Base Address Name Description 0x0A00 TCA0 Timer/Counter Type A instance 0 0x0A40 TCB0 Timer/Counter Type B instance 0 0x0F00 SYSCFG System Configuration 0x1000 NVMCTRL Nonvolatile Memory Controller 0x1100 SIGROW Signature Row 0x1280 FUSES Device-specific fuses 0x1300 USERROW User Row 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 bit (nameIE) in the peripheral's Interrupt Control register (peripheral.INTCTRL). 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 Peripheral Source Definition 0 RESET RESET 1 CRCSCAN_NMI NMI - Non-Maskable Interrupt from CRC 2 BOD_VLM VLM - Voltage Level Monitor 3 PORTA_PORT PORTA - Port A 4 PORTB_PORT PORTB - Port B 5 PORTC_PORT PORTC - Port C 6 RTC_CNT RTC - Real-Time Counter 7 RTC_PIT PIT - Periodic Interrupt Timer (in RTC peripheral) 8 TCA0_LUNF/TCA0_OVF TCA0 - Timer Counter Type A, LUNF/OVF 9 TCA0_HUNF TCA0, HUNF 10 TCA0_LCMP0/TCA0_CMP0 TCA0, LCMP0/CMP0 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 44 ATtiny807/1607 Peripherals and Architecture Vector Number Peripheral Source Definition 11 TCA0_LCMP1/TCA0_CMP1 TCA0, LCMP1/CMP1 12 TCA0_CMP2/TCA0_LCMP2 TCA0, LCMP2/CMP2 13 TCB0_INT TCB0 - Timer Counter Type B 16 - - 17 AC0_AC AC0 – Analog Comparator 18 - - 19 - - 20 ADC0_RESRDY ADC0 – Analog-to-Digital Converter, RESRDY 21 ADC0_WCOMP ADC0, WCOMP 22 - - 23 - - 24 TWI0_TWIS TWI0 - Two-Wire Interface/I2C, TWIS 25 TWI0_TWIM TWI0, TWIM 26 SPI0_INT SPI0 - Serial Peripheral Interface 27 USART0_RXC USART0 - Universal Asynchronous ReceiverTransmitter, RXC 28 USART0_DRE USART0, DRE 29 USART0_TXC USART0, TXC 30 NVMCTRL_EE NVM - Nonvolatile Memory Related Links 9. NVMCTRL - Nonvolatile Memory Controller 16. PORT - I/O Pin Configuration 22. RTC - Real-Time Counter 24. SPI - Serial Peripheral Interface 23. USART - Universal Synchronous and Asynchronous Receiver and Transmitter 25. TWI - Two-Wire Interface 26. CRCSCAN - Cyclic Redundancy Check Memory Scan 20. TCA - 16-bit Timer/Counter Type A 21. TCB - 16-bit Timer/Counter Type B 28. AC - Analog Comparator 29. ADC - Analog-to-Digital Converter 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 45 ATtiny807/1607 Peripherals and Architecture 7.3.1 Register Summary - SYSCFG Offset Name Bit Pos. 0x01 REVID 7:0 7.3.2 REVID[7:0] Register Description - SYSCFG © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 46 ATtiny807/1607 Peripherals and Architecture 7.3.2.1 Device Revision ID Register Name:  Offset:  Reset:  Property:  REVID 0x01 [revision ID] - This register is read-only and displays the device revision ID. Bit 7 6 5 4 3 2 1 0 R R R R REVID[7:0] Access R R R R Reset Bits 7:0 – REVID[7:0] Revision ID These bits contain the device revision. 0x00 = A, 0x01 = B, and so on. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 47 ATtiny807/1607 AVR CPU 8. AVR CPU 8.1 Features • • • • • • • • 8.2 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-Bit Access to 16-Bit I/O Registers Efficient Support for 8-, 16-, and 32-Bit Arithmetic Configuration Change Protection for System Critical Features 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 48 ATtiny807/1607 AVR CPU Figure 8-1. AVR CPU Architecture Register file R31 (ZH) R29 (YH) R27 (XH) R25 R23 R21 R19 R17 R15 R13 R11 R9 R7 R5 R3 R1 R30 (ZL) R28 (YL) R26 (XL) R24 R22 R20 R18 R16 R14 R12 R10 R8 R6 R4 R2 R0 Program Counter Flash Program Memory Instruction Register Instruction Decode Data Memory Stack Pointer 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 49 ATtiny807/1607 AVR CPU 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 35. Instruction Set Summary 8.4 Arithmetic Logic Unit (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. The ALU operates in direct connection with all 32 general purpose registers. Arithmetic operations between general purpose registers or between a register and an immediate 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 32-bit arithmetic. The hardware multiplier supports signed and unsigned multiplication and fractional format. 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 one A multiplication takes two CPU clock cycles. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 50 ATtiny807/1607 AVR CPU 8.5 Functional Description 8.5.1 Program Flow After 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. Program flow is supported by conditional and unconditional JUMP and CALL 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 Reset, the Stack Pointer (SP) 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 instruction 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 Instruction Executions T1 T2 T3 T4 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 Register Operands Fetch ALU Operation Execute Result Write Back 8.5.3 Status Register The Status register (CPU.SREG) contains information about the result of the most recently executed arithmetic or logic instruction. This information can be used for altering program flow in order to perform conditional operations. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 51 ATtiny807/1607 AVR CPU 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 35. Instruction Set Summary 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 is pushed and popped from the stack using the PUSH and POP instructions. The stack grows from higher to lower memory locations. This implies that pushing data onto the stack decreases the SP, and popping data off the stack increases the SP. The Stack Pointer is automatically set to the highest address of the internal SRAM after Reset. If the stack is changed, it must be set to point above address 0x2000, and it must be defined before any subroutine calls are executed and before interrupts are enabled. During interrupts or subroutine calls the return address is automatically pushed on the stack as a word pointer and the SP is decremented by '2'. The return address consists of two bytes and the Least Significant Byte 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 16bit 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 is pushed on the stack with the PUSH instruction, and incremented by '1' when data is popped off the stack using the POP instruction. To prevent corruption when updating the Stack Pointer from software, a write to SPL will automatically disable interrupts for up to four instructions or until the next I/O memory write. 8.5.5 Register File The register file consists of 32 8-bit general purpose working registers with single clock cycle access time. The register file supports the following input/output schemes: • • • • One 8-bit output operand and one 8-bit result input Two 8-bit output operands and one 8-bit result input Two 8-bit output operands and one 16-bit result input One 16-bit output operand and one 16-bit result input Six of the 32 registers can be used as three 16-bit Address Register Pointers for data space addressing, enabling efficient address calculations. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 52 ATtiny807/1607 AVR CPU Figure 8-4. AVR CPU General Purpose Working Registers R0 R1 R2 Addr. 0x00 0x01 0x02 R13 R14 R15 R16 R17 0x0D 0x0E 0x0F 0x10 0x11 R26 R27 R28 R29 R30 R31 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F 0 7 ... ... X-register Low Byte X-register High Byte Y-register Low Byte Y-register High Byte Z-register Low Byte Z-register High Byte The register file is located in a separate address space and is, therefore, not accessible through instructions operation on data memory. 8.5.5.1 The X-, Y-, and Z-Registers Registers R26...R31 have added functions besides their general purpose usage. These registers can form 16-bit Address Pointers for addressing data memory. These three address registers are called the X-register, Y-register, and Z-register. Load and store instructions can use all X-, Y-, and Z-registers, while the LPM instructions can only use the Z-register. Indirect calls and jumps (ICALL and IJMP ) also use the Z-register. Refer to the instruction set or Instruction Set Summary for more information about how the X-, Y-, and Zregisters are used. Figure 8-5. The X-, Y-, and Z-Registers Bit (individually) 7 X-register 15 Bit (individually) 7 Y-register Bit (individually) R29 7 8 7 0 7 8 7 7 R31 0 7 0 0 R28 0 YL ZH 15 R26 XL YH 15 Z-register Bit (Z-register) 0 XH Bit (X-register) Bit (Y-register) R27 0 R30 0 ZL 8 7 0 The lowest register address holds the Least Significant Byte (LSB), and the highest register address holds the Most Significant Byte (MSB). In the different addressing modes, these address registers function as fixed displacement, automatic increment, and automatic decrement. Related Links 35. Instruction Set Summary © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 53 ATtiny807/1607 AVR CPU 8.5.6 Accessing 16-Bit Registers The AVR data bus has a width of 8 bit, and so accessing 16-bit registers requires atomic operations. These registers must be byte accessed using two read or write operations. 16-bit registers are connected to the 8-bit bus and a temporary register using a 16-bit bus. For a write operation, the low byte of the 16-bit register must be written before the high byte. The low byte is then written into the temporary register. When the high byte of the 16-bit register is written, the temporary register is copied into the low byte of the 16-bit register in the same clock cycle. For a read operation, the low byte of the 16-bit register must be read before the high byte. When the low byte register is read by the CPU, the high byte of the 16-bit register is copied into the temporary register in the same clock cycle as the low byte is read. When the high byte is read, it is then read from the temporary register. This ensures that the low and high bytes of 16-bit registers are always accessed simultaneously when reading or writing the register. Interrupts can corrupt the timed sequence if an interrupt is triggered and accesses the same 16-bit register during an atomic 16-bit read/write operation. To prevent this, interrupts can be disabled when writing or reading 16-bit registers. The temporary registers can be read and written directly from user software. 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 the protected selfprogramming. Related Links 8.7.1 CCP 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. 2. The software writes the signature that enables change of protected I/O registers to the CCP bit field in the CPU.CCP register. 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. 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: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 54 ATtiny807/1607 AVR CPU 1. 2. The software temporarily enables self-programming by writing the SPM signature to the CCP register (CPU.CCP). 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 55 ATtiny807/1607 AVR CPU 8.6 Register Summary - CPU Offset Name Bit Pos. 0x04 CCP 7:0 CCP[7:0] 0x05 ... Reserved 0x0C 0x0D SP 0x0F SREG 8.7 7:0 SP[7:0] 15:8 SP[15:8] 7:0 I T H S V N Z C Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 56 ATtiny807/1607 AVR CPU 8.7.1 Configuration Change Protection Name:  Offset:  Reset:  Property:  Bit 7 CCP 0x04 0x00 - 6 5 4 3 2 1 0 CCP[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 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, 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 zero. Value 0x9D 0xD8 Name SPM IOREG © 2018 Microchip Technology Inc. Description Allow Self-Programming Un-protect protected I/O registers Datasheet Preliminary DS40002030A-page 57 ATtiny807/1607 AVR CPU 8.7.2 Stack Pointer Name:  Offset:  Reset:  Property:  SP 0x0D Top of stack - 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 R/W R/W R/W R/W 7 6 5 4 11 10 9 8 R/W R/W R/W R/W 3 2 1 0 R/W R/W R/W R/W SP[15:8] Access Reset Bit SP[7:0] Access R/W R/W R/W R/W Reset 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 58 ATtiny807/1607 AVR CPU 8.7.3 Status Register Name:  Offset:  Reset:  Property:  SREG 0x0F 0x00 - 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 Access Reset 7 6 5 4 3 2 1 0 I T H S V N Z C R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit 7 – I Global Interrupt Enable 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 after an interrupt has occurred. This bit can be set and cleared by software with the SEI and CLI instructions. Changing the I flag through the I/O register results in a one-cycle Wait state on the access. Bit 6 – T Bit Copy Storage The bit copy instructions bit load (BLD) and bit store (BST) use the T bit as source or destination for the operated bit. A bit from a register in the register file can be copied into this bit by the BST instruction, and this bit can be copied into a bit in a register in the register file by the BLD instruction. Bit 5 – H Half Carry Flag This bit indicates a half carry in some arithmetic operations. Half carry is useful in BCD arithmetic. Bit 4 – S Sign Bit, S = N ⊕ V The sign bit (S) 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 The two’s complement overflow flag (V) supports two’s complement arithmetic. Bit 2 – N Negative Flag The negative flag (N) indicates a negative result in an arithmetic or logic operation. Bit 1 – Z Zero Flag The zero flag (Z) indicates a zero result in an arithmetic or logic operation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 59 ATtiny807/1607 AVR CPU Bit 0 – C Carry Flag The carry flag (C) indicates a carry in an arithmetic or logic operation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 60 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9. NVMCTRL - Nonvolatile Memory Controller 9.1 Features • • • • • • 9.2 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 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. 9.2.1 Block Diagram Figure 9-1. NVMCTRL Block Diagram NVM Block Program Memory Bus Flash NVMCTRL Data Memory Bus EEPROM Signature Row User Row © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 61 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.2.2 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 9-1. NVMCTRL System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts Yes CPUINT Events No - Debug Yes UPDI 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.2.2.2 I/O Lines and Connections Not applicable. 9.2.2.3 Interrupts Using the interrupts of this peripheral requires the interrupt controller to be configured first. 9.2.2.4 Events Not applicable. 9.2.2.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. 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 30. UPDI - Unified Program and Debug Interface 9.3 Functional Description 9.3.1 Memory Organization 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 62 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 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 BOOTEND APPEND BOOT Section APPCODE Section APPDATA Section 0 0 0 to FLASHEND - - >0 0 0 to 256*BOOTEND 256*BOOTEND to FLASHEND - >0 == BOOTEND 0 to 256*BOOTEND - 256*BOOTEND to FLASHEND >0 > BOOTEND 0 to 256*BOOTEND 256*BOOTEND to 256*APPEND 256*APPEND to FLASHEND Note:  • See also the BOOTEND and APPEND descriptions. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 63 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller • Interrupt vectors are by default located after the BOOT section. This can be changed in the interrupt 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. Inter-Section Write Protection Between the three Flash sections, a 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 lockbits (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. 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 9.3.2.1 Memory Access 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 • The device wakes 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 64 ATtiny807/1607 NVMCTRL - Nonvolatile Memory 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 65 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 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. 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 as for board level systems using Flash/EEPROM, and the same design solutions should 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. Flash/EEPROM corruption can be avoided by these measures: • Keep the device in Reset during periods of insufficient power supply voltage. This can be done by enabling the internal Brown-Out Detector (BOD). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 66 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller • • 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 31.3 General Operating Ratings 17. BOD - Brown-out Detector 9.3.4 Interrupts Table 9-3. Available Interrupt Vectors and Sources Offset Name Vector Description Conditions 0x00 NVM The EEPROM is ready for new write/erase operations. EEREADY 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. 9.3.5 Sleep Mode Operation If there is no ongoing write operation, the NVMCTRL will enter sleep mode when the system enters 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). In order to write to these, a certain key must be written to the CPU.CCP register first, 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-4. NVMCTRL - Registers under Configuration Change Protection Register Key NVMCTRL.CTRLA SPM Related Links © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 67 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 8.5.7.2 Sequence for Execution of Self-Programming © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 68 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.4 Register Summary - NVMCTRL Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 0x02 STATUS 7:0 0x03 INTCTRL 7:0 EEREADY 0x04 INTFLAGS 7:0 EEREADY 0x05 Reserved 0x06 DATA 0x08 ADDR 9.5 CMD[2:0] WRERROR 7:0 DATA[7:0] 15:8 DATA[15:8] 7:0 ADDR[7:0] 15:8 ADDR[15:8] BOOTLOCK APCWP EEBUSY FBUSY Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 69 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.1 Control A Name:  Offset:  Reset:  Property:  Bit CTRLA 0x00 0x00 Configuration Change Protection 7 6 5 4 3 2 1 0 CMD[2:0] Access Reset R/W R/W R/W 0 0 0 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. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name WP ER ERWP PBC CHER EEER WFU Description No command Write page buffer to memory (NVMCTRL.ADDR selects which memory) Erase page (NVMCTRL.ADDR selects which memory) Erase and write page (NVMCTRL.ADDR selects which memory) Page buffer clear Chip erase: erase Flash and EEPROM (unless EESAVE in FUSE.SYSCFG is '1') EEPROM Erase Write fuse (only accessible through UPDI) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 70 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x01 0x00 - 6 5 4 3 2 Access Reset 1 0 BOOTLOCK APCWP R/W R/W 0 0 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 71 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.3 Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x02 0x00 - 6 5 4 3 2 1 0 WRERROR EEBUSY FBUSY Access R R R Reset 0 0 0 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 72 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.4 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x03 0x00 - 6 5 4 3 2 1 0 EEREADY Access R/W Reset 0 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 zero. Thus, the interrupt should not be enabled before triggering an NVM command, as the EEREADY flag will not be set before the NVM command issued. The interrupt should be disabled in the interrupt handler. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 73 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.5 Interrupt Flags Name:  Offset:  Reset:  Property:  Bit 7 INTFLAGS 0x04 0x00 - 6 5 4 3 2 1 0 EEREADY Access R/W Reset 0 Bit 0 – EEREADY EEREADY Interrupt Flag This flag is set continuously as long as the EEPROM is not busy. This flag is cleared by writing a '1' to it. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 74 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.6 Data Name:  Offset:  Reset:  Property:  DATA 0x06 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:0 – DATA[15:0] Data Register This register is used by the UPDI for fuse write operations. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 75 ATtiny807/1607 NVMCTRL - Nonvolatile Memory Controller 9.5.7 Address Name:  Offset:  Reset:  Property:  ADDR 0x08 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:0 – ADDR[15:0] Address The Address register contains the address to the last memory location that has been updated. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 76 ATtiny807/1607 CLKCTRL - Clock Controller 10. CLKCTRL - Clock Controller 10.1 Features • • • • 10.2 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: – External clock Main Clock Features: – Safe run-time switching – Prescaler with 1x to 64x division in 12 different settings 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 77 ATtiny807/1607 CLKCTRL - Clock Controller 10.2.1 Block Diagram - CLKCTRL Figure 10-1. CLKCTRL Block Diagram NVM RAM CPU CLK_CPU CLK_PER CLKOUT RTC Other Peripherals WDT INT BOD PRESCALER CLK_RTC CLK_WDT CLK_BOD Main Clock Prescaler CLK_MAIN RTC CLKSEL Main Clock Switch DIV32 OSCULP32K OSC20M OSC20M int. Oscillator 32 KHz ULP Int. Oscillator EXTCLK 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 78 ATtiny807/1607 CLKCTRL - Clock Controller – 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. 10.2.2 Signal Description Signal Type Description CLKOUT Digital output CLK_PER output Related Links 5. I/O Multiplexing and Considerations 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 Standby bit (RUNSTDBY) in the respective oscillator's Control A register (CLKCTRL.[osc]CTRLA). 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. 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 bit (RUNSTDBY) in the respective oscillator's Control A register (CLKCTRL.[osc]CTRLA) 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. Built-in hardware protection prevents unsafe clock switching: 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 flag (SOSC) in the Main Clock Status register (CLKCTRL.MCLKSTATUS). The stability of the external clock sources is indicated by the respective status flags (EXTS in CLKCTRL.MCLKSTATUS). 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 79 ATtiny807/1607 CLKCTRL - Clock Controller Figure 10-2. Main Clock and Prescaler OSC20M 32 kHz Osc. CLK_MAIN Main Clock Prescaler (Div 1, 2, 4, 8, 16, 32, 64, 6, 10, 24, 48) External clock CLK_PER The Main Clock and Prescaler configuration registers (CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLB) are protected by the Configuration Change Protection Mechanism, employing a timed write procedure for changing these registers. Related Links 8.5.7 Configuration Change Protection (CCP) 10.3.3 Main Clock After Reset 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 CLK_MAIN as Per FREQSEL in FUSE.OSCCFG Resulting CLK_PER 16 MHz 2.66 MHz 20 MHz 3.3 MHz See the OSC20M description for further details. Related Links 10.3.4.1.1 16/20 MHz Oscillator (OSC20M) 10.3.4 Clock Sources All internal clock sources are enabled automatically when they are requested by a peripheral. The respective Oscillator Status bits in the Main Clock Status register (CLKCTRL.MCLKSTATUS) indicate whether the clock source is running and stable. Related Links 6.10 Configuration and User Fuses (FUSE) 8.5.7 Configuration Change Protection (CCP) 10.3.4.1 Internal Oscillators The internal oscillators do not require any external components to run. See the related links for accuracy and electrical characteristics. Related Links 31. Electrical Characteristics 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 bits (FREQSEL) in the Oscillator Configuration Fuse (FUSE.OSCCFG). The center frequencies are: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 80 ATtiny807/1607 CLKCTRL - Clock Controller • • 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 bit field (CAL20M) in the Calibration A register (CLKCTRL.OSC20MCALIBA) enables calibration around the current center frequency. The Oscillator Temperature Coefficient Calibration bit field (TEMPCAL20M) in the Calibration B register (CLKCTRL.OSC20MCALIBB) enables adjustment of the slope of the temperature drift compensation. For applications requiring 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 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 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 31. Electrical Characteristics 6.10 Configuration and User Fuses (FUSE) 10.3.5 Configuration Change Protection 31.3 General Operating Ratings 10.3.3 Main Clock After Reset 31.9 Oscillators and Clocks OSC20M Stored Frequency Error Compensation This oscillator can operate at multiple frequencies, selected by the value of the Frequency Select bits (FREQSEL) in the Oscillator Configuration fuse (FUSE.OSCCFG) 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 wider operating range, the relative factory stored frequency error after calibrations can be used. The four errors are measured at 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 81 ATtiny807/1607 CLKCTRL - Clock Controller The error is stored as a compressed Q1.10 fixed point 8-bit value, in order not to lose resolution, where the MSB is the sign bit and the seven LSBs the lower bits of the Q1.10. BAUDact��� = BAUD����� + BAUD����� * ����������� 1024 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 /* 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 int32_t baud_reg_val = SIGROW.OSC16ERR3V; = 600; assert (baud_reg_val >= 0x4A); value with max neg comp baud_reg_val *= (1024 + sigrow_val); baud_reg_val /= 1024; USART0.BAUD = (int16_t) baud_reg_val; // read signed error // ideal BAUD register value // Verify legal min BAUD register // sum resolution + error // divide by resolution // set adjusted baud rate Related Links 31.9 Oscillators and Clocks 10.3.4.1.2 32 KHz Oscillator (OSCULP32K) The 32 KHz oscillator is optimized for Ultra Low-Power (ULP) operation. This oscillator provides the 1 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 chapter for the start-up time. Related Links 31. Electrical Characteristics 17. BOD - Brown-out Detector 19. WDT - Watchdog Timer 22. RTC - Real-Time Counter 10.3.4.2 External Clock Sources This external clock source is available: • External Clock from pin. (EXTCLK). 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. 10.3.5 Configuration Change Protection This peripheral has registers that are under Configuration Change Protection (CCP). In order to write to these, a certain key must be written to the CPU.CCP register first, followed by a write access to the protected bits within four CPU instructions. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 82 ATtiny807/1607 CLKCTRL - Clock Controller 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 Register Key CLKCTRL.MCLKCTRLB IOREG CLKCTRL.MCLKLOCK 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 83 ATtiny807/1607 CLKCTRL - Clock Controller 10.4 Register Summary - CLKCTRL Offset Name Bit Pos. 0x00 MCLKCTRLA 7:0 0x01 MCLKCTRLB 7:0 0x02 MCLKLOCK 7:0 0x03 MCLKSTATUS 7:0 CLKOUT CLKSEL[1:0] PDIV[3:0] PEN LOCKEN EXTS OSC32KS OSC20MS SOSC 0x04 ... Reserved 0x0F 0x10 OSC20MCTRLA 7:0 0x11 OSC20MCALIBA 7:0 0x12 OSC20MCALIBB 7:0 RUNSTDBY CAL20M[5:0] LOCK TEMPCAL20M[3:0] 0x13 ... Reserved 0x17 0x18 10.5 OSC32KCTRLA 7:0 RUNSTDBY Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 84 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.1 Main Clock Control A Name:  Offset:  Reset:  Property:  Bit 7 MCLKCTRLA 0x00 0x00 Configuration Change Protection 6 5 4 3 2 1 CLKOUT Access Reset 0 CLKSEL[1:0] R/W R/W R/W 0 0 0 Bit 7 – CLKOUT System Clock Out When this bit is written to '1', the system clock is output to CLKOUT pin. 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). Value 0x0 0x1 0x2 0x3 Name OSC20M OSCULP32K Reserved EXTCLK © 2018 Microchip Technology Inc. Description 16/20 MHz internal oscillator 32 KHz internal ultra low-power oscillator Reserved External clock Datasheet Preliminary DS40002030A-page 85 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.2 Main Clock Control B Name:  Offset:  Reset:  Property:  Bit 7 MCLKCTRLB 0x01 0x11 Configuration Change Protection 6 5 4 3 2 1 0 PDIV[3:0] Access Reset PEN R/W R/W R/W R/W R/W 1 0 0 0 1 Bits 4:1 – PDIV[3:0] Prescaler Division If the Prescaler Enable (PEN) bit is written to ‘1’, these bits define the division ratio of the main clock prescaler. These bits 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). Value Value 0x0 0x1 0x2 0x3 0x4 0x5 0x8 0x9 0xA 0xB 0xC other Description 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 86 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.3 Main Clock Lock Name:  Offset:  Reset:  Property:  Bit 7 MCLKLOCK 0x02 Based on OSCLOCK in FUSE.OSCCFG Configuration Change Protection 6 5 4 3 2 1 0 LOCKEN Access R/W Reset x 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 provides protection for 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. Related Links 6.10 Configuration and User Fuses (FUSE) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 87 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.4 Main Clock Status Name:  Offset:  Reset:  Property:  Bit 7 MCLKSTATUS 0x03 0x00 - 5 4 EXTS 6 OSC32KS OSC20MS 3 2 1 SOSC 0 Access R R R R Reset 0 0 0 0 Bit 7 – EXTS External Clock Status Value 0 1 Description EXTCLK has not started EXTCLK has started 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. Value 0 1 Description OSCULP32K is not stable OSCULP32K is stable 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. Value 0 1 Description OSC20M is not stable OSC20M is stable Bit 0 – SOSC Main Clock Oscillator Changing Value 0 1 Description 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 88 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.5 16/20 MHz Oscillator Control A Name:  Offset:  Reset:  Property:  Bit 7 OSC20MCTRLA 0x10 0x00 Configuration Change Protection 6 5 4 3 2 1 0 RUNSTDBY Access R/W Reset 0 Bit 1 – RUNSTDBY Run 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 89 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.6 16/20 MHz Oscillator Calibration A Name:  Offset:  Reset:  Property:  Bit 7 OSC20MCALIBA 0x11 Based on FREQSEL in FUSE.OSCCFG Configuration Change Protection 6 5 4 3 2 1 0 CAL20M[5:0] Access Reset R/W R/W R/W R/W R/W R/W x x x x x x Bits 5:0 – CAL20M[5:0] Calibration These bits change 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 90 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.7 16/20 MHz Oscillator Calibration B Name:  Offset:  Reset:  Property:  Bit 7 OSC20MCALIBB 0x12 Based on FUSE.OSCCFG Configuration Change Protection 6 5 4 3 LOCK 2 1 0 TEMPCAL20M[3:0] Access R R/W R/W R/W R/W Reset x x x x x 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. The reset value is loaded from the OSCLOCK bit in the Oscillator Configuration Fuse (FUSE.OSCCFG). Bits 3:0 – TEMPCAL20M[3:0] Oscillator Temperature Coefficient Calibration These bits tune the slope of the temperature compensation. At Reset, the factory calibrated values are loaded based on the FREQSEL bits in FUSE.OSCCFG. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 91 ATtiny807/1607 CLKCTRL - Clock Controller 10.5.8 32 KHz Oscillator Control A Name:  Offset:  Reset:  Property:  Bit 7 OSC32KCTRLA 0x18 0x00 Configuration Change Protection 6 5 4 3 2 1 0 RUNSTDBY Access R/W Reset 0 Bit 1 – RUNSTDBY Run 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 92 ATtiny807/1607 SLPCTRL - Sleep Controller 11. SLPCTRL - Sleep Controller 11.1 Features • • • 11.2 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. 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 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 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. 11.2.1 Block Diagram Figure 11-1. Sleep Controller in System SLEEP Instruction SLPCTRL Interrupt Request CPU Sleep State Interrupt Request Peripheral © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 93 ATtiny807/1607 SLPCTRL - Sleep Controller 11.2.2 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 11-1. SLPCTRL System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts No - Events No - Debug Yes UPDI 11.2.2.1 Clocks This peripheral depends on the peripheral clock. Related Links 10. CLKCTRL - Clock Controller 11.2.2.2 I/O Lines and Connections Not applicable. 11.2.2.3 Interrupts Not applicable. 11.2.2.4 Events Not applicable. 11.2.2.5 Debug Operation When run-time debugging, this peripheral will continue normal operation. The SLPCTRL is only affected by a break in 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 periodical service by the CPU through interrupts or similar, improper operation or data loss may result during halted debugging. 11.3 Functional Description 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 94 ATtiny807/1607 SLPCTRL - Sleep Controller 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. Idle The CPU stops executing code, no peripherals are disabled. All interrupt sources can wake-up the device. Standby The user can configure peripherals to be enabled or not, using the respective RUNSTBY bit. This 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. The wake-up sources are pin interrupts, TWI address match, UART Start-of-Frame interrupt (if USART is enabled to run in Standby), RTC interrupt (if RTC enabled to run in Standby), and TCB interrupt. Only the WDT and the PIT (a component of the RTC) are active. The only wake-up sources are the pin change interrupt and TWI address match. PowerDown Table 11-2. Sleep Mode Activity Overview Group Peripheral Active in Sleep Mode Clock Active Clock Domain Oscillators Wake-Up Sources Idle Standby Power-Down CPU CLK_CPU Peripherals CLK_PER X RTC CLK_RTC X X* ADC CLK_PER X X* PIT (RTC) CLK_RTC X X X WDT CLK_WDT X X X Main Clock Source X X* RTC Clock Source X X* WDT Oscillator X X X INTn and Pin Change X X X TWI Address Match X X X Periodic Interrupt Timer X X X UART Start-of-Frame X X* ADC Window X X* RTC Interrupt X X* All other Interrupts X Note:  • X means active. X* indicates that the RUNSTBY bit of the corresponding peripheral must be set to enter the active state. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 95 ATtiny807/1607 SLPCTRL - Sleep Controller 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 Sleep Mode Start-Up Time IDLE 6 CLK Standby 6 CLK + OSC start-up Power-Down 6 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 wakeup 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 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 96 ATtiny807/1607 SLPCTRL - Sleep Controller 11.4 Register Summary - SLPCTRL Offset Name Bit Pos. 0x00 CTRLA 7:0 11.5 SMODE[1:0] SEN Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 97 ATtiny807/1607 SLPCTRL - Sleep Controller 11.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 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 Bits 2:1 – SMODE[1:0] Sleep Mode Writing these bits selects the sleep mode entered when the Sleep Enable bit (SEN) is written to '1' and the SLEEP instruction is executed. Value 0x0 0x1 0x2 other Name IDLE STANDBY PDOWN - Description Idle Sleep mode enabled Standby Sleep mode enabled Power-Down Sleep mode enabled Reserved Bit 0 – SEN Sleep Enable This bit must be written to '1' before the SLEEP instruction is executed to make the MCU enter the selected sleep mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 98 ATtiny807/1607 RSTCTRL - Reset Controller 12. RSTCTRL - Reset Controller 12.1 Features • • • Reset the device and set it to an initial state. Reset Flag register for identifying the Reset source in software. Multiple Reset sources: – – 12.2 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. 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. 12.2.1 Block Diagram Figure 12-1. Reset System Overview RESET SOURCES VDD POR Pull-up Resistor RESET RESET CONTROLLER BOD FILTER UPDI External Reset WDT All other Peripherals UPDI CPU (SW) 12.2.2 Signal Description Signal Description Type RESET External Reset (active-low) Digital input © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 99 ATtiny807/1607 RSTCTRL - Reset Controller 12.3 Functional Description 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 12.3.2.1 Reset Sources There are two kinds of sources for Resets: • Power supply Resets, which are caused by changes in the power supply voltage: Power-on Reset (POR) and Brown-out Detector (BOD). • User Resets, which are issued by the application, by the debug operation, or by pin changes (Software Reset, Watchdog Reset, UPDI Reset, and external Reset pin RESET). 12.3.2.1.1 Power-On Reset (POR) A Power-on Reset (POR) is generated by an on-chip detection circuit. The POR is activated when the VDD rises until it reaches the POR threshold voltage. The POR is always enabled and will also detect when the VDD falls below the threshold voltage. All volatile logic is reset on POR. All fuses are reloaded after the Reset is released. 12.3.2.1.2 Brown-Out Detector (BOD) Reset Source The on-chip Brown-out Detection 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. All logic is reset on BOD Reset, except the BOD configuration. All fuses are reloaded after the Reset is released. Related Links 17. BOD - Brown-out Detector 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. All logic is reset on software Reset, except UPDI and BOD configuration. All fuses are reloaded after the Reset is released. 12.3.2.1.4 External Reset The external Reset is enabled by fuse (see fuse map). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 100 ATtiny807/1607 RSTCTRL - Reset Controller 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) 12.3.2.1.5 Watchdog Reset 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. All logic is reset on WDT Reset, except UPDI and BOD configuration. All fuses are reloaded after the Reset is released. Related Links 19. WDT - Watchdog Timer 12.3.2.1.6 Universal Program Debug Interface (UPDI) Reset The UPDI contains a separate Reset source that is used to reset the device during external programming and debugging. The Reset source is accessible only from external debuggers and programmers. All logic is reset on UPDI Reset, except the UPDI itself and BOD configuration. All fuses are reloaded after the Reset is released. See UPDI chapter on how to generate a UPDI Reset request. Related Links 30. UPDI - Unified Program and Debug Interface 12.3.2.2 Reset Time The Reset time can be split in two. 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 Brown-out Detector (BOD) is active as long as the supply voltage is below the Reset source threshold. When all the Reset sources are released, 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 fuse setting (SUT in FUSE.SYSCFG1). The internal Reset initialization time will also increase if the CRCSCAN is configured to run at start-up (CRCSRC in FUSE.SYSCFG0). 12.3.3 Sleep Mode Operation The Reset Controller continues to operate in all active and sleep modes. 12.3.4 Configuration Change Protection This peripheral has registers that are under Configuration Change Protection (CCP). In order to write to these, a certain key must be written to the CPU.CCP register first, 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: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 101 ATtiny807/1607 RSTCTRL - Reset Controller Table 12-1. RSTCTRL - Registers Under Configuration Change Protection Register Key RSTCTRL.SWRR IOREG Related Links 8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 102 ATtiny807/1607 RSTCTRL - Reset Controller 12.4 Register Summary - RSTCTRL Offset Name Bit Pos. 0x00 RSTFR 7:0 0x01 SWRR 7:0 12.5 UPDIRF SWRF WDRF EXTRF BORF PORF SWRE Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 103 ATtiny807/1607 RSTCTRL - Reset Controller 12.5.1 Reset Flag Register Name:  Offset:  Reset:  Property:  RSTFR 0x00 0xXX - 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 Access R R Reset 0 0 5 4 3 2 1 0 UPDIRF SWRF WDRF EXTRF BORF PORF R/W R/W R/W R/W R/W R/W x x x x x x Bit 5 – UPDIRF UPDI Reset Flag This bit is set if a UPDI Reset occurs. Bit 4 – SWRF Software Reset Flag This bit is set if a Software Reset occurs. Bit 3 – WDRF Watchdog Reset Flag This bit is set if a Watchdog Reset occurs. Bit 2 – EXTRF External Reset Flag This bit is set if an External Reset occurs. Bit 1 – BORF Brown-Out Reset Flag This bit is set if a Brown-out Reset occurs. Bit 0 – PORF Power-On Reset Flag This bit is set if a Power-on Reset occurs. This flag is only cleared by writing a '1' to it. After a POR, only the POR flag is set and all other flags are cleared. No other flags can be set before a full system boot is run after the POR. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 104 ATtiny807/1607 RSTCTRL - Reset Controller 12.5.2 Software Reset Register Name:  Offset:  Reset:  Property:  Bit 7 SWRR 0x01 0x00 Configuration Change Protection 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 Bit 0 – SWRE Software Reset Enable When this bit is written to '1', a software Reset will occur. This bit will always read as '0'. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 105 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13. CPUINT - CPU Interrupt Controller 13.1 Features • • • • • • • • 13.2 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 106 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.2.1 Block Diagram Figure 13-1. CPUINT Block Diagram Interrupt Controller Priority Decoder Peripheral 1 INT REQ CPU "RETI" CPU INT ACK CPU INT LEVEL Peripheral n INT REQ CPU INT REQ INT REQ INT ACK STATUS LVL0PRI LVL1VEC Global Interrupt Enable Wake-up CPU.SREG Sleep Controller 13.2.2 Signal Description Not applicable. 13.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 13-1. CPUINT System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts No - Events No - Debug Yes UPDI 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.2.3.2 I/O Lines and Connections Not applicable. 13.2.3.3 Interrupts Not applicable. 13.2.3.4 Events Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 107 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.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. 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 30. UPDI - Unified Program and Debug Interface 13.3 Functional Description 13.3.1 Initialization An interrupt must be initialized in the following order: 1. 2. 3. 13.3.2 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). Configure the interrupt conditions within the peripheral, and enable the peripheral's interrupt. Enable interrupts globally by writing a '1' to the Global Interrupt Enable bit (I) in the CPU Status register (CPU.SREG). 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 108 ATtiny807/1607 CPUINT - CPU Interrupt Controller 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 109 ATtiny807/1607 CPUINT - CPU Interrupt Controller 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. 13.3.2.4 Interrupt Priority All interrupt vectors are assigned to one of three possible priority levels as shown in the table. An interrupt request from a high priority source will interrupt any ongoing interrupt handler from a normal priority source. When returning from the high priority interrupt handler, the execution of the normal priority interrupt handler will resume. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 110 ATtiny807/1607 CPUINT - CPU Interrupt Controller Table 13-2. Interrupt Priority Levels Priority Level Source Highest Non-Maskable Interrupt (NMI) Device dependent and statically assigned ... High Priority (Level 1) One vector is optionally user selectable as Level 1 Lowest Normal Priority (Level 0) The remaining interrupt vectors 13.3.2.5 Scheduling of Normal Priority Interrupts 13.3.2.5.1 Non-Maskable Interrupts (NMI) An NMI will be executed regardless of the setting of the I bit in CPU.SREG, and it will never change the I bit. No other interrupt can interrupt an NMI handler. If more than one NMI is requested at the same time, priority is static according to the interrupt vector address, where the lowest address has the highest priority. Which interrupts are non-maskable is device-dependent and not subject to configuration. Non-maskable interrupts must be enabled before they can be used. Refer to the Interrupt Vector Mapping of the device for available NMI lines. Related Links 7.2 Interrupt Vector Mapping 13.3.2.5.2 Static Scheduling If several level 0 interrupt requests are pending at the same time, the one with the highest priority is scheduled for execution first. The CPUINT.LVL0PRI register makes it possible to change the default priority. The Reset value for CPUINT.LVL0PRI is zero, resulting in a default priority as shown in the following figure. As the figure shows, IVEC0 has the highest priority, and IVECn has the lowest priority. Figure 13-3. Static Scheduling when CPUINT.LVL0PRI is Zero Lowest Address IVEC 0 Highest Priority IVEC 1 : : : IVEC Y IVEC Y+1 : : : Highest Address IVEC n Lowest Priority 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 111 ATtiny807/1607 CPUINT - CPU Interrupt Controller 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 : : : IVEC Y Lowest Priority IVEC Y+1 Highest Priority : : : Highest Address IVEC n Related Links 7.2 Interrupt Vector Mapping 13.3.2.5.3 Round Robin Scheduling Static scheduling may cause starvation, i.e. some interrupts might never be serviced. To avoid this, the CPUINT offers round robin scheduling for normal priority (LVL0) interrupts. In round robin scheduling, CPUINT.LVL0PRI contains the number of the vector number in IVEC with the lowest priority. This register is automatically updated by hardware with the interrupt vector number for the last acknowledged LVL0 interrupt. This interrupt vector will, therefore, have the lowest priority next time one or more LVL0 interrupts are pending. Figure 13-5 explains the new priority ordering after IVEC Y was the last interrupt to be acknowledged, and after IVEC Y+1 was the last interrupt to be acknowledged. Round robin scheduling for LVL0 interrupt requests is enabled by writing a ‘1’ to the Round Robin Priority Enable bit (LVL0RR) in the Control A register (CPUINT.CTRLA). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 112 ATtiny807/1607 CPUINT - CPU Interrupt Controller Figure 13-5. Round Robin Scheduling IVEC Y was last acknowledged interrupt IVEC Y+1 was last acknowledged interrupt IVEC 0 IVEC 0 : : : : : : IVEC Y Lowest Priority IVEC Y IVEC Y+1 Highest Priority IVEC Y+1 Lowest Priority IVEC Y+2 Highest Priority : : : IVEC n : : : IVEC n 13.3.2.5.4 Compact Vector Table The Compact Vector Table (CVT) is a feature to allow writing of compact code. When CVT is enabled by writing a '1' to the CVT bit in the Control A register (CPUINT.CTRLA), the vector table contains these three interrupt vectors: 1. The non-maskable interrupts (NMI) at vector address 1. 2. The priority level 1 (LVL1) interrupt at vector address 2. 3. All priority level 0 (LVL0) interrupts share vector address 3. This feature is most suitable for applications using a small number of interrupt generators. 13.3.3 Events Not applicable. 13.3.4 Sleep Mode Operation Not applicable. 13.3.5 Configuration Change Protection This peripheral has registers that are under Configuration Change Protection (CCP). In order to write to these, a certain key must be written to the CPU.CCP register first, 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: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 113 ATtiny807/1607 CPUINT - CPU Interrupt Controller Table 13-3. INTCTRL - Registers under Configuration Change Protection 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 114 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.4 Register Summary - CPUINT Offset Name Bit Pos. 0x00 CTRLA 7:0 IVSEL CVT LVL0RR 0x01 STATUS 7:0 0x02 LVL0PRI 7:0 LVL0PRI[7:0] 0x03 LVL1VEC 7:0 LVL1VEC[7:0] 13.5 NMIEX LVL1EX LVL0EX Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 115 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLA 0x00 0x00 Configuration Change Protection 6 5 IVSEL CVT 4 3 2 1 LVL0RR 0 R/W R/W R/W 0 0 0 Bit 6 – IVSEL Interrupt Vector Select If the boot section is defined, it will be placed before the application section. The actual start address of the application section is determined by the BOOTEND fuse. This bit is protected by the Configuration Change Protection mechanism. Value 0 1 Description Interrupt vectors are placed at the start of the application section of the Flash Interrupt vectors are placed at the start of the boot section of the Flash Bit 5 – CVT Compact Vector Table This bit is protected by the Configuration Change Protection mechanism. Value 0 1 Description Compact Vector Table function is disabled Compact Vector Table function is enabled Bit 0 – LVL0RR Round Robin Priority Enable This bit is not protected by the Configuration Change Protection mechanism. Value 0 1 Description Priority is fixed for priority level 0 interrupt requests: The lowest interrupt vector address has the highest priority. Round Robin priority scheme is enabled for priority level 0 interrupt requests © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 116 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.5.2 Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x01 0x00 - 1 0 NMIEX 6 5 4 3 2 LVL1EX LVL0EX Access R R R Reset 0 0 0 Bit 7 – NMIEX Non-Maskable Interrupt Executing This flag is set if a non-maskable interrupt is executing. The flag is cleared when returning (RETI) from the interrupt handler. Bit 1 – LVL1EX Level 1 Interrupt Executing This flag is set when a priority level 1 interrupt is executing, or when the interrupt handler has been interrupted by an NMI. The flag is cleared when returning (RETI) from the interrupt handler. Bit 0 – LVL0EX Level 0 Interrupt Executing This flag is set when a priority level 0 interrupt is executing, or when the interrupt handler has been interrupted by a priority level 1 interrupt or an NMI. The flag is cleared when returning (RETI) from the interrupt handler. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 117 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.5.3 Interrupt Priority Level 0 Name:  Offset:  Reset:  Property:  Bit 7 LVL0PRI 0x02 0x00 - 6 5 4 3 2 1 0 LVL0PRI[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – LVL0PRI[7:0] Interrupt Priority Level 0 When Round Robin is enabled (LVL0RR bit in CPUINT.CTRLA is '1'), this bit field stores the vector of the last acknowledged priority level 0 (LVL0) interrupt. The stored vector will have the lowest priority next time one or more LVL0 interrupts are pending. If Round Robin is disabled (LVL0RR in CPUINT.CTRLA is '0'), the vector address-based priority scheme (lowest address has the highest priority) is governing the priorities of LVL0 interrupt requests. If a system Reset is asserted, the lowest interrupt vector address will have the highest priority within the LVL0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 118 ATtiny807/1607 CPUINT - CPU Interrupt Controller 13.5.4 Interrupt Vector with Priority Level 1 Name:  Offset:  Reset:  Property:  Bit 7 LVL1VEC 0x03 0x00 - 6 5 4 3 2 1 0 LVL1VEC[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – LVL1VEC[7:0] Interrupt Vector with Priority Level 1 This bit field contains the number of the single vector with increased priority level 1 (LVL1). If this bit field has the value 0x00, no vector has LVL1. Consequently, the LVL1 interrupt is disabled. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 119 ATtiny807/1607 EVSYS - Event System 14. EVSYS - Event System 14.1 Features • • • • • • • • 14.2 System for Direct Peripheral-to-Peripheral Signaling Peripherals can Directly Produce, Use, and React to Peripheral Events Short Response Time Up to Three Parallel Event Channels Available; Two Asynchronous and One 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 120 ATtiny807/1607 EVSYS - Event System 14.2.1 Block Diagram Figure 14-1. Block Diagram Sync user x Sync event channel ”k” Sync event channel 0 Sync source 0 Sync source 1 Sync user 0 Sync source n SYNCCH SYNCSTROBE .. . .. . .. . Async source m ASYNCCH SYNCUSER Async user y Async user 0 Async event channel ”l” Async event channel 0 Async source 0 Async source 1 To sync user .. . .. . ASYNCSTROBE To async user ASYNCUSER Figure 14-2. Example of Event Source, Generator, User, and Action Event Generator Event User Timer/Counter ADC Compare Match Over-/Underflow | Event Routing Network Error Channel Sweep Single Conversion Event Action Selection Event Source Event Action Note:  1. For an overview of peripherals supporting events, refer the block diagram of the device. 2. For a list of event generators, refer to the Channel n Generator Selection registers (EVSYS.SYNCCH and EVSYS.ASYNCCH). 3. For a list of event users, refer to the User Channel n Input Selection registers (EVSYS.SYNCUSER and EVSYS.ASYNCUSER). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 121 ATtiny807/1607 EVSYS - Event System 14.2.2 Signal Description Internal Event Signaling The event signaling can happen either synchronously or asynchronously to the main clock (CLK_MAIN). Depending on the underlying event, the event signal can be a pulse with a duration of one clock cycle, or a level signal (similar to a status flag). Event Output to Pin Signal Type Description EVOUT[2:0] Digital Output Event Output Related Links 14.2.3.2 I/O Lines 10.2.1 Block Diagram - CLKCTRL 14.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 14-1. EVSYS System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORTMUX Interrupts No - Events Yes EVSYS Debug Yes UPDI 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 set up correctly, 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.2.3.2 I/O Lines The EVSYS can output three event channels asynchronously on pins. The output signals are called EVOUT[2:0]. 1. Configure which event channel (one of SYNCCH[1:0] or ASYNCCH[3:0]) is output on which EVOUTn bit by writing to EVSYS.ASYNCUSER10, EVSYS.ASYNCUSER9, or EVSYS.ASYNCUSER8, respectively. 2. Optional: configure the pin properties using the port peripheral. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 122 ATtiny807/1607 EVSYS - Event System 3. Enable the pin output by writing '1' to the respective EVOUTn bit in the Control A register of the PORTMUX peripheral (PORTMUX.CTRLA). Related Links 15. PORTMUX - Port Multiplexer 16. PORT - I/O Pin Configuration 14.3 Functional Description 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.2.3 Event Generators Each event channel can receive the events from several event generators. For details on event generation, refer to the documentation of the corresponding peripheral. For each event channel, there are several possible event generators, only one of which can be selected at a time. The event generator trigger is selected for each channel by writing to the respective channel registers (EVSYS.ASYNCCHn, EVSYS.SYNCCHn). By default, the channels are not connected to any event generator. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 123 ATtiny807/1607 EVSYS - Event System 14.3.2.4 Software Event In a software event, the CPU will “strobe” an event channel by inverting the current value for one system clock cycle. A software event is triggered on a channel by writing a '1' to the respective Strobe bit in the appropriate Channel Strobe register: • Software events on asynchronous channel l are initiated by writing a '1' to the ASYNCSTROBE[l] bit in the Asynchronous Channel Strobe register (EVSYS.ASYNCSTROBE). • Software events on synchronous channel k are initiated by writing a '1' to the SYNCSTROBE[k] bit in the Synchronous Channel Strobe register (EVSYS.SYNCSTROBE). Software events are no different to those produced by event generator peripherals with respect to event users: when the bit is written to '1', an event will be generated on the respective channel, and received and processed by the event user. 14.3.3 Interrupts Not applicable. 14.3.4 Sleep Mode Operation When configured, the Event System will work in all sleep modes. One exception is software events that require a system clock. 14.3.5 Debug Operation This peripheral is unaffected by entering Debug mode. Related Links 30. UPDI - Unified Program and Debug Interface 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. 14.3.7 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 124 ATtiny807/1607 EVSYS - Event System 14.4 Register Summary - EVSYS Offset Name Bit Pos. 0x00 ASYNCSTROBE 7:0 ASYNCSTROBE[7:0] 0x01 SYNCSTROBE 7:0 SYNCSTROBE[7:0] 0x02 ASYNCCH0 7:0 ASYNCCH[7:0] 0x03 ASYNCCH1 7:0 ASYNCCH[7:0] 7:0 SYNCCH[7:0] 0x04 ... Reserved 0x09 0x0A SYNCCH0 0x0B ... Reserved 0x11 0x12 ASYNCUSER0 7:0 ASYNCUSER[7:0] 0x13 ASYNCUSER1 7:0 ASYNCUSER[7:0] 0x14 ASYNCUSER2 7:0 ASYNCUSER[7:0] 0x15 ASYNCUSER3 7:0 ASYNCUSER[7:0] 0x16 ASYNCUSER4 7:0 ASYNCUSER[7:0] 0x17 ASYNCUSER5 7:0 ASYNCUSER[7:0] 0x18 ASYNCUSER6 7:0 ASYNCUSER[7:0] 0x19 ASYNCUSER7 7:0 ASYNCUSER[7:0] 0x1A ASYNCUSER8 7:0 ASYNCUSER[7:0] 0x1B ASYNCUSER9 7:0 ASYNCUSER[7:0] 0x1C ASYNCUSER10 7:0 ASYNCUSER[7:0] 0x1D ... Reserved 0x21 0x22 SYNCUSER0 7:0 SYNCUSER[7:0] 0x23 SYNCUSER1 7:0 SYNCUSER[7:0] 14.5 Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 125 ATtiny807/1607 EVSYS - Event System 14.5.1 Asynchronous Channel Strobe Name:  Offset:  Reset:  Property:  Bit 7 ASYNCSTROBE 0x00 0x00 - 6 5 4 3 2 1 0 ASYNCSTROBE[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – ASYNCSTROBE[7:0] Asynchronous Channel Strobe If the Strobe register location is written, each event channel will be inverted for one system clock cycle (i.e., a single event is generated). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 126 ATtiny807/1607 EVSYS - Event System 14.5.2 Synchronous Channel Strobe Name:  Offset:  Reset:  Property:  Bit 7 SYNCSTROBE 0x01 0x00 - 6 5 4 3 2 1 0 SYNCSTROBE[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – SYNCSTROBE[7:0] Synchronous Channel Strobe If the Strobe register location is written, each event channel will be inverted for one system clock cycle (i.e., a single event is generated). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 127 ATtiny807/1607 EVSYS - Event System 14.5.3 Asynchronous Channel n Generator Selection Name:  Offset:  Reset:  Property:  Bit 7 ASYNCCH 0x02 + n*0x01 [n=0..1] 0x00 - 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 0 0 0 0 0 0 0 0 Reset Bits 7:0 – ASYNCCH[7:0] Asynchronous Channel Generator Selection Table 14-2. ASYNCCH0 Value Description 0x00 OFF 0x01 CCL_LUT0 0x02 CCL_LUT1 0x03 AC0_OUT 0x04 Reserved 0x05 Reserved 0x06 Reserved 0x07 Reserved 0x08 RTC_OVF 0x09 RTC_CMP 0x0A PORTA0 0x0B PORTA1 0x0C PORTA2 0x0D PORTA3 0x0E PORTA4 0x0F PORTA5 0x10 PORTA6 0x11 PORTA7 0x12 UPDI Other Reserved © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 128 ATtiny807/1607 EVSYS - Event System Table 14-3. ASYNCCH1 Value Description 0x00 OFF 0x01 CCL_LUT0 0x02 CCL_LUT1 0x03 AC0_OUT 0x04 Reserved 0x05 Reserved 0x06 Reserved 0x07 Reserved 0x08 RTC_OVF 0x09 RTC_CMP 0x0A PORTB0 0x0B PORTB1 0x0C PORTB2 0x0D PORTB3 0x0E PORTB4 0x0F PORTB5 0x10 PORTB6 0x11 PORTB7 Other Reserved 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 129 ATtiny807/1607 EVSYS - Event System 14.5.4 Synchronous Channel n Generator Selection Name:  Offset:  Reset:  Property:  Bit 7 SYNCCH 0x0A 0x00 - 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 0 0 0 0 0 0 0 0 Reset Bits 7:0 – SYNCCH[7:0] Synchronous Channel Generator Selection Table 14-4. SYNCCH0 Value Description 0x00 OFF 0x01 TCB0 0x02 TCA0_OVF_LUNF 0x03 TCA0_HUNF 0x04 TCA0_CMP0 0x05 TCA0_CMP1 0x06 TCA0_CMP2 0x07 PORTC0 0x08 PORTC1 0x09 PORTC2 0x0A PORTC3 0x0B PORTC4 0x0C PORTC5 0x0D PORTA0 0x0E PORTA1 0x0F PORTA2 0x10 PORTA3 0x11 PORTA4 0x12 PORTA5 0x13 PORTA6 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 130 ATtiny807/1607 EVSYS - Event System Value Description 0x14 PORTA7 Other Reserved 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 131 ATtiny807/1607 EVSYS - Event System 14.5.5 Asynchronous User Channel n Input Selection Name:  Offset:  Reset:  Property:  Bit 7 ASYNCUSER 0x12 + n*0x01 [n=0..10] 0x00 - 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 0 0 0 0 0 0 0 0 Reset Bits 7:0 – ASYNCUSER[7:0] Asynchronous User Channel Selection Table 14-5. User Multiplexer Numbers USERn User Multiplexer Description n=0 TCB0 Timer/Counter B 0 n=1 ADC0 ADC 0 n=2 CCL_LUT0EV0 CCL LUT0 Event 0 n=3 CCL_LUT1EV0 CCL LUT1 Event 0 n=4 CCL_LUT0EV1 CCL LUT0 Event 1 n=5 CCL_LUT1EV1 CCL LUT1 Event 1 n=6,7 Reserved Reserved n=8 EVOUT0 Event OUT 0 n=9 EVOUT1 Event OUT 1 n=10 EVOUT2 Event OUT 2 Value 0x0 0x1 0x3 0x4 Description OFF SYNCCH0 ASYNCCH0 ASYNCCH1 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 132 ATtiny807/1607 EVSYS - Event System 14.5.6 Synchronous User Channel n Input Selection Name:  Offset:  Reset:  Property:  Bit 7 SYNCUSER 0x22 + n*0x01 [n=0..1] 0x00 - 6 5 4 3 2 1 0 SYNCUSER[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – SYNCUSER[7:0] Synchronous User Channel Selection Table 14-6. User Multiplexer Numbers USERn User Multiplexer Description n=0 TCA0 Timer/Counter A n=1 USART0 USART Value 0x0 0x1 Name OFF SYNCCH0 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 133 ATtiny807/1607 PORTMUX - Port Multiplexer 15. PORTMUX - Port Multiplexer 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 134 ATtiny807/1607 PORTMUX - Port Multiplexer 15.2 Register Summary - PORTMUX Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 0x02 CTRLC 7:0 0x03 CTRLD 7:0 15.3 LUT1 LUT0 TCA05 TCA04 EVOUT2 EVOUT1 SPI0 TCA03 TCA02 EVOUT0 USART0 TCA01 TCA00 TCB0 Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 135 ATtiny807/1607 PORTMUX - Port Multiplexer 15.3.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 6 Access Reset 5 4 2 1 0 LUT1 LUT0 3 EVOUT2 EVOUT1 EVOUT0 R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 5 – LUT1 CCL LUT 1 output Write this bit to '1' to select alternative pin location for CCL LUT 1. Bit 4 – LUT0 CCL LUT 0 output Write this bit to '1' to select alternative pin location for CCL LUT 0. Bit 2 – EVOUT2 Event Output 2 Write this bit to '1' to enable event output 2. Bit 1 – EVOUT1 Event Output 1 Write this bit to '1' to enable event output 1. Bit 0 – EVOUT0 Event Output 0 Write this bit to '1' to enable event output 0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 136 ATtiny807/1607 PORTMUX - Port Multiplexer 15.3.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x01 0x00 - 6 5 4 3 Access Reset 2 1 0 SPI0 USART0 R/W R/W 0 0 Bit 2 – SPI0 SPI 0 communication Write this bit to '1' to select alternative communication pins for SPI 0. Bit 0 – USART0 USART 0 communication Write this bit to '1' to select alternative communication pins for USART 0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 137 ATtiny807/1607 PORTMUX - Port Multiplexer 15.3.3 Control C Name:  Offset:  Reset:  Property:  Bit 7 CTRLC 0x02 0x00 - 6 Access Reset 5 4 3 2 1 0 TCA05 TCA04 TCA03 TCA02 TCA01 TCA00 R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bit 5 – TCA05 TCA0 Waveform output 5 Write this bit to '1' to select alternative output pin for TCA0 waveform output 5 in Split mode. Not applicable when TCA in normal mode. Bit 4 – TCA04 TCA0 Waveform output 4 Write this bit to '1' to select alternative output pin for TCA0 waveform output 4 in Split mode. Not applicable when TCA in normal mode. Bit 3 – TCA03 TCA0 Waveform output 3 Write this bit to '1' to select alternative output pin for TCA0 waveform output 3 in Split mode. Not applicable when TCA in normal mode. Bit 2 – TCA02 TCA0 Waveform output 2 Write this bit to '1' to select alternative output pin for TCA0 waveform output 2. In Split Mode, this bit controls output from low byte compare channel 2. Bit 1 – TCA01 TCA0 Waveform output 1 Write this bit to '1' to select alternative output pin for TCA0 waveform output 1. In Split mode, this bit controls output from low byte compare channel 1. Bit 0 – TCA00 TCA0 Waveform output 0 Write this bit to '1' to select alternative output pin for TCA0 waveform output 0. In Split mode, this bit controls output from low byte compare channel 0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 138 ATtiny807/1607 PORTMUX - Port Multiplexer 15.3.4 Control D Name:  Offset:  Reset:  Property:  Bit 7 CTRLD 0x03 0x00 - 6 5 4 3 2 1 0 TCB0 Access R/W Reset 0 Bit 0 – TCB0 TCB0 output Write this bit to '1' to select alternative output pin for 16-bit timer/counter B 0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 139 ATtiny807/1607 PORT - I/O Pin Configuration 16. PORT - I/O Pin Configuration 16.1 Features • • • • • 16.2 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) 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, and PORTC. 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 140 ATtiny807/1607 PORT - I/O Pin Configuration 16.2.1 Block Diagram Figure 16-1. PORT Block Diagram Pullup Enable Invert Enable OUTn Q D Pxn OUT Override R DIRn Q D DIR Override R Interrupt Interrupt Generator Input Disable Input Disable Override Synchronizer INn Synchronized Input Q D Q R D R Digital Input / Asynchronous Event Analog Input/Output 16.2.2 Signal Description Signal Type Description Pxn I/O pin I/O pin n on PORTx Related Links 5. I/O Multiplexing and Considerations 16.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 141 ATtiny807/1607 PORT - I/O Pin Configuration Table 16-1. PORT System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts Yes CPUINT Events Yes EVSYS Debug No - 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.2 I/O Lines and Connections Not applicable. 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.2.3.5 Debug Operation This peripheral is unaffected by entering Debug mode. 16.3 Functional Description 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 142 ATtiny807/1607 PORT - I/O Pin Configuration 16.3.2 Operation 16.3.2.1 Basic Functions Each I/O pin Pxn can be controlled by the registers in PORTx. Each pin group x has its own set of PORT registers. The base address of the register set for pin n is at the byte address PORT + 0x10 + � . The index within that register set is n. To use pin number n as an output only, write bit n of the PORTx.DIR register to '1'. This can be done by writing bit n in the PORTx.DIRSET register to '1', which will avoid disturbing the configuration of other pins in that group. The nth bit in the PORTx.OUT register must be written to the desired output value. Similarly, writing a PORTx.OUTSET bit to '1' will set the corresponding bit in the PORTx.OUT register to '1'. Writing a bit in PORTx.OUTCLR to '1' will clear that bit in PORTx.OUT to zero. Writing a bit in PORTx.OUTTGL or PORTx.IN to '1' will toggle that bit in PORTx.OUT. To use pin n as an input, bit n in the PORTx.DIR register must be written to '0' to disable the output driver. This can be done by writing bit n in the PORTx.DIRCLR register to '1', which will avoid disturbing the configuration of other pins in that group. The input value can be read from bit n in register PORTx.IN as long as the ISC bit is not set to INPUT_DISABLE. Writing a bit to '1' in PORTx.DIRTGL will toggle that bit in PORTx.DIR and toggle the direction of the corresponding pin. 16.3.2.2 Virtual Ports The Virtual PORT registers map the most frequently used regular PORT registers into the bit-accessible I/O space. 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. Table 16-2. Virtual Port Mapping Regular PORT Register Mapped to Virtual PORT Register PORT.DIR VPORT.DIR PORT.OUT VPORT.OUT PORT.IN VPORT.IN PORT.INTFLAG VPORT.INTFLAG Related Links 16.6 Register Summary - VPORT 5. I/O Multiplexing and Considerations 7. Peripherals and Architecture 16.3.2.3 Pin Configuration The Pin n Configuration register (PORT.PINnCTRL) is used to configure inverted I/O, pullup, and input sensing of a pin. All input and output on the respective pin n can be inverted by writing a '1' to the Inverted I/O Enable bit (INVEN) in PORT.PINnCTRL. Toggling the INVEN bit causes an edge on the pin, which can be detected by all peripherals using this pin, and is seen by interrupts or events if enabled. Pullup of pin n is enabled by writing a '1' to the Pullup Enable bit (PULLUPEN) in PORT.PINnCTRL. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 143 ATtiny807/1607 PORT - I/O Pin Configuration 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 reenabling 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: Interrupt Type Fully Asynchronous Pins Other Pins BOTHEDGES Will wake the system Will wake the system RISING Will wake the system Will not wake the system FALLING Will wake the system Will not wake the system LEVEL Will wake the system Will wake the system Related Links 5. I/O Multiplexing and Considerations 16.3.3 Interrupts Table 16-3. Available Interrupt Vectors and Sources Offset Name 0x00 Vector Description Conditions PORTx PORT A, B, C interrupt INTn in PORT.INTFLAGS is raised as configured by ISC bit in PORT.PINnCTRL. 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 144 ATtiny807/1607 PORT - I/O Pin Configuration Asynchronous Sensing Pin Properties Table 16-4. Behavior Comparison of Fully/Partly Asynchronous Sense Pin Property Synchronous or Partly Asynchronous Sense Support Minimum pulse-width Minimum one system clock cycle to trigger interrupt Full Asynchronous Sense Support Less than a system clock cycle Waking the device from sleep From all interrupt sense configurations from sleep From all interrupt sense modes with main clock running. Only from configurations from all sleep BOTHEDGES or LEVEL interrupt sense modes configuration from sleep modes with main clock stopped. Interrupt "dead time" No new interrupt for three cycles after the previous No limitation Minimum wake-up pulse length Value on pad must be kept until the system clock has restarted No limitation 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.5 Sleep Mode Operation With the exception of interrupts and input synchronization, all pin configurations are independent of the Sleep mode. Peripherals connected to the ports can be affected by Sleep modes, described in the respective peripherals' documentation. The port peripheral will always use the main clock. Input synchronization will halt when this clock stops. 16.3.6 Synchronization Not applicable. 16.3.7 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 145 ATtiny807/1607 PORT - I/O Pin Configuration 16.4 Register Summary - PORT Offset Name Bit Pos. 0x00 DIR 7:0 0x01 DIRSET 7:0 DIRSET[7:0] 0x02 DIRCLR 7:0 DIRCLR[7:0] 0x03 DIRTGL 7:0 DIRTGL[7:0] 0x04 OUT 7:0 OUT[7:0] 0x05 OUTSET 7:0 OUTSET[7:0] 0x06 OUTCLR 7:0 OUTCLR[7:0] 0x07 OUTTGL 7:0 OUTTGL[7:0] 0x08 IN 7:0 IN[7:0] 0x09 INTFLAGS 7:0 INT[7:0] DIR[7:0] 0x0A ... Reserved 0x0F 0x10 PIN0CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x11 PIN1CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x12 PIN2CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x13 PIN3CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x14 PIN4CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x15 PIN5CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x16 PIN6CTRL 7:0 INVEN PULLUPEN ISC[2:0] 0x17 PIN7CTRL 7:0 INVEN PULLUPEN ISC[2:0] 16.5 Register Description - Ports © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 146 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.1 Data Direction Name:  Offset:  Reset:  Property:  Bit 7 DIR 0x00 0x00 - 6 5 4 3 2 1 0 DIR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DIR[7:0] Data Direction This bit field selects the data direction for the individual pins n of the port. Writing a '1' to PORT.DIR[n] configures and enables pin n as an output pin. Writing a '0' to PORT.DIR[n] configures pin n as an input pin. It can be configured by writing to the ISC bit in PORT.PINnCTRL. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 147 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.2 Data Direction Set Name:  Offset:  Reset:  Property:  Bit 7 DIRSET 0x01 0x00 - 6 5 4 3 2 1 0 DIRSET[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DIRSET[7:0] Data Direction Set This bit field can be used instead of a read-modify-write to set individual pins as output. Writing a '1' to DIRSET[n] will set the corresponding PORT.DIR[n] bit. Reading this bit field will always return the value of PORT.DIR. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 148 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.3 Data Direction Clear Name:  Offset:  Reset:  Property:  Bit 7 DIRCLR 0x02 0x00 - 6 5 4 3 2 1 0 DIRCLR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DIRCLR[7:0] Data Direction Clear This register can be used instead of a read-modify-write to configure individual pins as input. Writing a '1' to DIRCLR[n] will clear the corresponding bit in PORT.DIR. Reading this bit field will always return the value of PORT.DIR. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 149 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.4 Data Direction Toggle Name:  Offset:  Reset:  Property:  Bit 7 DIRTGL 0x03 0x00 - 6 5 4 3 2 1 0 DIRTGL[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DIRTGL[7:0] Data Direction Toggle This bit field can be used instead of a read-modify-write to toggle the direction of individual pins. Writing a '1' to DIRTGL[n] will toggle the corresponding bit in PORT.DIR. Reading this bit field will always return the value of PORT.DIR. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 150 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.5 Output Value Name:  Offset:  Reset:  Property:  Bit 7 OUT 0x04 0x00 - 6 5 4 3 2 1 0 OUT[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – OUT[7:0] Output Value This bit field defines the data output value for the individual pins n of the port. If OUT[n] is written to '1', pin n is driven high. If OUT[n] is written to '0', pin n is driven low. In order to have any effect, the pin direction must be configured as output. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 151 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.6 Output Value Set Name:  Offset:  Reset:  Property:  Bit 7 OUTSET 0x05 0x00 - 6 5 4 3 2 1 0 OUTSET[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – OUTSET[7:0] Output Value Set This bit field can be used instead of a read-modify-write to set the output value of individual pins to '1'. Writing a '1' to OUTSET[n] will set the corresponding bit in PORT.OUT. Reading this bit field will always return the value of PORT.OUT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 152 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.7 Output Value Clear Name:  Offset:  Reset:  Property:  Bit 7 OUTCLR 0x06 0x00 - 6 5 4 3 2 1 0 OUTCLR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – OUTCLR[7:0] Output Value Clear This register can be used instead of a read-modify-write to clear the output value of individual pins to '0'. Writing a '1' to OUTCLR[n] will clear the corresponding bit in PORT.OUT. Reading this bit field will always return the value of PORT.OUT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 153 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.8 Output Value Toggle Name:  Offset:  Reset:  Property:  Bit 7 OUTTGL 0x07 0x00 - 6 5 4 3 2 1 0 OUTTGL[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – OUTTGL[7:0] Output Value Toggle This register can be used instead of a read-modify-write to toggle the output value of individual pins. Writing a '1' to OUTTGL[n] will toggle the corresponding bit in PORT.OUT. Reading this bit field will always return the value of PORT.OUT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 154 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.9 Input Value Name:  Offset:  Reset:  Property:  Bit 7 IN 0x08 0x00 - 6 5 4 3 2 1 0 IN[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – IN[7:0] Input Value This register shows the value present on the pins if the digital input driver is enabled. IN[n] shows the value of pin n of the port. The input is not sampled and cannot be read if the digital input buffers are disabled. Writing to a bit of PORT.IN will toggle the corresponding bit in PORT.OUT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 155 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.10 Interrupt Flags Name:  Offset:  Reset:  Property:  Bit 7 INTFLAGS 0x09 0x00 - 6 5 4 3 2 1 0 INT[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – INT[7:0] Interrupt Pin Flag The INT Flag is set when a pin change/state matches the pin's input sense configuration. Writing a '1' to a flag's bit location will clear the flag. For enabling and executing the interrupt, refer to ISC bit description in PORT.PINnCTRL. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 156 ATtiny807/1607 PORT - I/O Pin Configuration 16.5.11 Pin n Control Name:  Offset:  Reset:  Property:  Bit Access Reset 7 PINCTRL 0x10 + n*0x01 [n=0..7] 0x00 - 6 5 4 3 2 1 0 INVEN PULLUPEN ISC[2:0] R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 7 – INVEN Inverted I/O Enable Value 0 1 Description I/O on pin n not inverted I/O on pin n inverted Bit 3 – PULLUPEN Pullup Enable Value 0 1 Description Pullup disabled for pin n Pullup enabled for pin n Bits 2:0 – ISC[2:0] Input/Sense Configuration These bits configure the input and sense configuration of pin n. The sense configuration determines how a port interrupt can be triggered. If the input buffer is disabled, the input cannot be read in the IN register. Value 0x0 0x1 0x2 0x3 0x4 0x5 other Name INTDISABLE BOTHEDGES RISING FALLING INPUT_DISABLE LEVEL - © 2018 Microchip Technology Inc. Description Interrupt disabled but input buffer enabled Sense both edges Sense rising edge Sense falling edge Digital input buffer disabled Sense low level Reserved Datasheet Preliminary DS40002030A-page 157 ATtiny807/1607 PORT - I/O Pin Configuration 16.6 Register Summary - VPORT Offset Name Bit Pos. 0x00 DIR 7:0 DIR[7:0] 0x01 OUT 7:0 OUT[7:0] 0x02 IN 7:0 IN[7:0] 0x03 INTFLAGS 7:0 INT[7:0] 16.7 Register Description - Virtual Ports © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 158 ATtiny807/1607 PORT - I/O Pin Configuration 16.7.1 Data Direction Name:  Offset:  Reset:  Property:  DIR 0x00 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DIR[7:0] Data Direction This bit field selects the data direction for the individual pins in the port. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 159 ATtiny807/1607 PORT - I/O Pin Configuration 16.7.2 Output Value Name:  Offset:  Reset:  Property:  OUT 0x01 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – OUT[7:0] Output Value This bit field selects the data output value for the individual pins in the port. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 160 ATtiny807/1607 PORT - I/O Pin Configuration 16.7.3 Input Value Name:  Offset:  Reset:  Property:  IN 0x02 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – IN[7:0] Input Value This bit field holds the value present on the pins if the digital input buffer is enabled. Writing to a bit of VPORT.IN will toggle the corresponding bit in VPORT.OUT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 161 ATtiny807/1607 PORT - I/O Pin Configuration 16.7.4 Interrupt Flag Name:  Offset:  Reset:  Property:  INTFLAGS 0x03 0x00 - 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 Bits 7:0 – INT[7:0] Interrupt Pin Flag The INT flag is set when a pin change/state matches the pin's input sense configuration, and the pin is configured as source for port interrupt. Writing a '1' to this flag's bit location will clear the flag. For enabling and executing the interrupt, refer to PORT_PINnCTRL.ISC. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 162 ATtiny807/1607 BOD - Brown-out Detector 17. BOD - Brown-out Detector 17.1 Features • • • • • 17.2 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 Overview The Brown-out Detector (BOD) monitors the power supply and compares the voltage with two programmable brown-out 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 163 ATtiny807/1607 BOD - Brown-out Detector 17.2.1 Block Diagram Figure 17-1. BOD Block Diagram VDD BOD Level and Calibration - Brown-out Detection + Bandgap VLM Interrupt Level Bandgap 17.2.2 + VLM Interrupt Detection System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 17-1. BOD System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 164 ATtiny807/1607 BOD - Brown-out Detector 17.2.2.2 I/O Lines and Connections Not applicable. 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.2.2.5 Debug Operation This peripheral is unaffected by entering Debug mode. The VLM interrupt will not be executed if the CPU is halted in 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. 17.3 Functional Description 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 Offset Name Vector Description 0x00 VLM Conditions Voltage Level Monitor Supply voltage crossing the VLM threshold as configured by VLMCFG in BOD.INTCTRL © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 165 ATtiny807/1607 BOD - Brown-out Detector 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.3 Sleep Mode Operation There are two separate fuses defining the BOD configuration in different sleep modes; One fuse defines the mode used in Active mode and Idle Sleep mode (ACTIVE in FUSE.BODCFG) and is written to the ACTIVE bits in the Control A register (BOD.CTRLA). The second fuse (SLEEP in FUSE.BODCFG) selects the mode used in Standby Sleep mode and Power-Down Sleep mode and is loaded into the SLEEP bits in the Control A register (BOD.CTRLA). The operating mode in Active mode and Idle Sleep mode (i.e., ACTIVE in BOD.CTRLA) cannot be altered by software. The operating mode in Standby Sleep mode and Power-Down Sleep mode can be altered by writing to the SLEEP bits in the Control A register (BOD.CTRLA). When the device is going into Standby Sleep mode or Power-Down Sleep mode, the BOD will change operation mode as defined by SLEEP in BOD.CTRLA. When the device is waking up from Standby or Power-Down Sleep mode, the BOD will operate in the mode defined by the ACTIVE bit field in BOD.CTRLA. 17.3.4 Synchronization Not applicable. 17.3.5 Configuration Change Protection This peripheral has registers that are under Configuration Change Protection (CCP). In order to write to these, a certain key must be written to the CPU.CCP register first, 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 17-3. Registers Under Configuration Change Protection Register Key SLEEP in BOD.CTRLA IOREG Related Links 8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 166 ATtiny807/1607 BOD - Brown-out Detector 17.4 Register Summary - BOD Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 SAMPFREQ ACTIVE[1:0] SLEEP[1:0] LVL[2:0] 0x02 ... Reserved 0x07 0x08 VLMCTRLA 7:0 0x09 INTCTRL 7:0 0x0A INTFLAGS 7:0 VLMIF 0x0B STATUS 7:0 VLMS 17.5 VLMLVL[1:0] VLMCFG[1:0] VLMIE Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 167 ATtiny807/1607 BOD - Brown-out Detector 17.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 Loaded from fuse Configuration Change Protection 6 5 4 3 SAMPFREQ 2 1 ACTIVE[1:0] 0 SLEEP[1:0] Access R R R R/W R/W Reset x x x x x Bit 4 – SAMPFREQ Sample Frequency This bit selects the BOD sample frequency. The Reset value is loaded from the SAMPFREQ bit in FUSE.BODCFG. This bit is under Configuration Change Protection (CCP). Value 0x0 0x1 Description Sample frequency is 1 kHz Sample frequency is 125 Hz Bits 3:2 – ACTIVE[1:0] Active These bits select the BOD operation mode when the device is in Active or Idle mode. The Reset value is loaded from the ACTIVE bits in FUSE.BODCFG. Value 0x0 0x1 0x2 0x3 Description Disabled Enabled Sampled Enabled with wake-up halted until BOD is ready Bits 1:0 – SLEEP[1:0] Sleep These bits select the BOD operation mode when the device is in Standby or Power-Down Sleep mode. The Reset value is loaded from the SLEEP bits in FUSE.BODCFG. These bits are under Configuration Change Protection (CCP). Value 0x0 0x1 0x2 0x3 Description Disabled Enabled Sampled Reserved © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 168 ATtiny807/1607 BOD - Brown-out Detector 17.5.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x01 Loaded from fuse - 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 Bits 2:0 – LVL[2:0] BOD Level These bits select the BOD threshold level. The Reset value is loaded from the BOD Level bits (LVL) in the BOD Configuration Fuse (FUSE.BODCFG). Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name BODLEVEL0 BODLEVEL1 BODLEVEL2 BODLEVEL3 BODLEVEL4 BODLEVEL5 BODLEVEL6 BODLEVEL7 © 2018 Microchip Technology Inc. Description 1.8V 2.15V 2.60V 2.95V 3.30V 3.70V 4.00V 4.30V Datasheet Preliminary DS40002030A-page 169 ATtiny807/1607 BOD - Brown-out Detector 17.5.3 VLM Control A Name:  Offset:  Reset:  Property:  Bit 7 VLMCTRLA 0x08 0x00 - 6 5 4 3 2 1 0 VLMLVL[1:0] Access Reset R/W R/W 0 0 Bits 1:0 – VLMLVL[1:0] VLM Level These bits select the VLM threshold relative to the BOD threshold (LVL in BOD.CTRLB). Value 0x0 0x1 0x2 other Description VLM threshold 5% above BOD threshold VLM threshold 15% above BOD threshold VLM threshold 25% above BOD threshold Reserved © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 170 ATtiny807/1607 BOD - Brown-out Detector 17.5.4 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x09 0x00 - 6 5 4 3 2 1 VLMCFG[1:0] Access Reset 0 VLMIE R/W R/W R/W 0 0 0 Bits 2:1 – VLMCFG[1:0] VLM Configuration These bits select which incidents will trigger a VLM interrupt. Value 0x0 0x1 0x2 Other Description Voltage crosses VLM threshold from above Voltage crosses VLM threshold from below Either direction is triggering an interrupt request Reserved Bit 0 – VLMIE VLM Interrupt Enable Writing a '1' to this bit enables the VLM interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 171 ATtiny807/1607 BOD - Brown-out Detector 17.5.5 VLM Interrupt Flags Name:  Offset:  Reset:  Property:  Bit 7 INTFLAGS 0x0A 0x00 - 6 5 4 3 2 1 0 VLMIF Access R/W Reset 0 Bit 0 – VLMIF VLM Interrupt Flag This flag is set when a trigger from the VLM is given, as configured by the VLMCFG bit in the BOD.INTCTRL register. The flag is only updated when the BOD is enabled. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 172 ATtiny807/1607 BOD - Brown-out Detector 17.5.6 VLM Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x0B 0x00 - 6 5 4 3 2 1 0 VLMS Access R Reset 0 Bit 0 – VLMS VLM Status This bit is only valid when the BOD is enabled. Value 0 1 Description The voltage is above the VLM threshold level The voltage is below the VLM threshold level © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 173 ATtiny807/1607 VREF - Voltage Reference 18. VREF - Voltage Reference 18.1 Features 18.2 • Programmable Voltage Reference Sources: – One for each ADC peripheral – One for each AC peripheral • Each Reference Source Supports Five Different Voltages: – 0.55V – 1.1V – 1.5V – 2.5V – 4.3V 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 AC0 by writing to the 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) in the Control B register (VREF.CTRLB). This may be desirable to decrease start-up time, at the cost of increased power consumption. 18.2.1 Block Diagram Figure 18-1. VREF Block Diagram Reference reque st Reference enable Reference se lect Bandgap Reference Gen erator Ban dgap ena ble 18.3 Functional Description 18.3.1 Initialization 0.55V 1.1V 1.5V 2.5V 4.3V BUF Inte rnal Reference The default configuration will enable the respective source when the ADC0, AC0 is requesting a reference voltage. The default reference voltages are 0.55V but can be configured by writing to the © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 174 ATtiny807/1607 VREF - Voltage Reference respective Reference Select bit field (ADC0REFSEL, DAC0REFSEL) in the Control A register (VREF.CTRLA). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 175 ATtiny807/1607 VREF - Voltage Reference 18.4 Register Summary - VREF Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 18.5 ADC0REFSEL[2:0] DAC0REFSEL[2:0] ADC0REFEN DAC0REFEN Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 176 ATtiny807/1607 VREF - Voltage Reference 18.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 6 5 4 3 2 ADC0REFSEL[2:0] Access Reset 1 0 DAC0REFSEL[2:0] R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bits 6:4 – ADC0REFSEL[2:0] ADC0 Reference Select These bits select the reference voltage for the ADC0. Value 0x0 0x1 0x2 0x3 0x4 other Description 0.55V 1.1V 2.5V 4.3V 1.5V Reserved Bits 2:0 – DAC0REFSEL[2:0] AC0 Reference Select These bits select the reference voltage for the AC0. Value 0x0 0x1 0x2 0x3 0x4 other Description 0.55V 1.1V 2.5V 4.3V 1.5V Reserved © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 177 ATtiny807/1607 VREF - Voltage Reference 18.5.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x01 0x00 - 6 5 4 3 Access Reset 2 1 0 ADC0REFEN DAC0REFEN R/W R/W 0 0 Bit 1 – ADC0REFEN ADC0 Reference Force Enable Writing a '1' to this bit forces the voltage reference for the ADC0 to be running, even if it is not requested. Writing a '0' to this bit allows automatic enable/disable of the reference source by the peripheral. Bit 0 – DAC0REFEN AC0 Reference Force Enable Writing a '1' to this bit forces the voltage reference for the AC0 to be running, even if it is not requested. Writing a '0' to this bit allows automatic enable/disable of the reference source by the peripheral. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 178 ATtiny807/1607 WDT - Watchdog Timer 19. WDT - Watchdog Timer 19.1 Features • • • • • • • 19.2 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 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 configured to 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 from 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) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 179 ATtiny807/1607 WDT - Watchdog Timer 19.2.1 Block Diagram Figure 19-1. WDT Block Diagram "Inside closed window" CTRLA WINDOW CLK_WDT "Enable open window and clear count" = COUNT = PERIOD System Reset CTRLA WDR (instruction) 19.2.2 Signal Description Not applicable. 19.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 19-1. WDT System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts No - Events No - Debug Yes UPDI 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.2 I/O Lines and Connections Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 180 ATtiny807/1607 WDT - Watchdog Timer 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 timeout period will be disabled, and a Normal mode time-out period is executed. Related Links 19.3.2.2 Window Mode 19.3 Functional Description 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 19.3.2.1 Normal Mode In Normal mode operation, a single time-out period is set for the WDT. If the WDT is not reset from software using the WDR any time before the time-out occurs, the WDT will issue a system Reset. A new WDT time-out period will be started each time the WDT is reset by WDR. There are 11 possible WDT time-out periods (TOWDT), selectable from 8 ms to 8s by writing to the Period bit field (PERIOD) in the Control A register (WDT.CTRLA). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 181 ATtiny807/1607 WDT - Watchdog Timer Figure 19-2. Normal Mode Operation WDT Count Timely WDT Reset (WDR) WDT Timeout System Reset Here: TO WDT = 16 ms 5 10 15 20 25 30 TOWDT 35 t [ms] 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 19.3.2.2 Window Mode In Window mode operation, the WDT uses two different time-out periods; a closed Window Time-out period (TOWDTW) and the normal time-out period (TOWDT): • The closed window time-out period defines a duration from 8 ms to 8s where the WDT cannot be reset. If the WDT is reset during this period, the WDT will issue a system Reset. • The normal WDT time-out period, which is also 8 ms to 8s, defines the duration of the open period during which the WDT can (and should) be reset. The open period will always follow the closed period, so the total duration of the time-out period is the sum of the closed window and the open window time-out periods. When enabling Window mode or when going out of Debug mode, the first closed period is activated after the first WDR instruction. If a second WDR is issued while a previous WDR is being synchronized, the second one will be ignored. Figure 19-3. Window Mode Operation WDT Count Open Timely WDT Reset (WDR) Closed WDR too early: System Reset Here: TOWDTW =TOWDT = 8 ms 5 10 15 20 TOWDTW 25 30 TOWDT 35 t [ms] 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 182 ATtiny807/1607 WDT - Watchdog Timer 19.3.2.3 Configuration Protection and Lock The WDT provides two security mechanisms to avoid unintentional changes to the WDT settings: The first mechanism is the Configuration Change Protection mechanism, employing a timed write procedure for changing the WDT control registers. The second mechanism locks the configuration by writing a '1' to the LOCK bit in the STATUS register (WDT.STATUS). When this bit is '1', the Control A register (WDT.CTRLA) cannot be changed. Consequently, the WDT cannot be disabled from software. LOCK in WDT.STATUS can only be written to '1'. It can only be cleared in Debug mode. If the WDT configuration is loaded from fuses, LOCK is automatically set in WDT.STATUS. Related Links 8.5.7 Configuration Change Protection (CCP) 19.3.3 Events Not applicable. 19.3.4 Interrupts Not applicable. 19.3.5 Sleep Mode Operation The WDT will continue to operate in any sleep mode where the source clock is active. 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. 19.3.7 Configuration Change Protection This peripheral has registers that are under Configuration Change Protection (CCP). In order to write to these, a certain key must be written to the CPU.CCP register first, 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: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 183 ATtiny807/1607 WDT - Watchdog Timer Table 19-2. WDT - Registers Under Configuration Change Protection Register Key WDT.CTRLA IOREG LOCK bit in WDT.STATUS IOREG List of bits/registers protected by CCP: • • • Period bits in Control A register (CTRLA.PERIOD) Window Period bits in Control A register (CTRLA.WINDOW) LOCK bit in STATUS register (STATUS.LOCK) Related Links 8.5.7 Configuration Change Protection (CCP) 8.5.7.1 Sequence for Write Operation to Configuration Change Protected I/O Registers 8.7.1 CCP © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 184 ATtiny807/1607 WDT - Watchdog Timer 19.4 Register Summary - WDT Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 STATUS 7:0 19.5 WINDOW[3:0] LOCK PERIOD[3:0] SYNCBUSY Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 185 ATtiny807/1607 WDT - Watchdog Timer 19.5.1 Control A Name:  Offset:  Reset:  Property:  Bit CTRLA 0x00 From FUSE.WDTCFG Configuration Change Protection 7 6 5 4 3 2 WINDOW[3:0] Access Reset 1 0 PERIOD[3:0] R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bits 7:4 – WINDOW[3:0] Window Writing a non-zero value to these bits enables the Window mode, and selects the duration of the closed period accordingly. The bits are optionally lock-protected: • • If LOCK bit in WDT.STATUS is '1', all bits are change-protected (Access = R) If LOCK bit in WDT.STATUS is '0', all bits can be changed (Access = R/W) Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB other Name OFF 8CLK 16CLK 32CLK 64CLK 128CLK 256CLK 512CLK 1KCLK 2KCLK 4KCLK 8KCLK - Description 0.008s 0.016s 0.032s 0.064s 0.128s 0.256s 0.512s 1.024s 2.048s 4.096s 8.192s Reserved Bits 3:0 – PERIOD[3:0] Period Writing a non-zero value to this bit enables the WDT, and selects the time-out period in Normal mode accordingly. In Window mode, these bits select the duration of the open window. The bits are optionally lock-protected: • • If LOCK in WDT.STATUS is '1', all bits are change-protected (Access = R) If LOCK in WDT.STATUS is '0', all bits can be changed (Access = R/W) Value 0x0 0x1 0x2 0x3 Name OFF 8CLK 16CLK 32CLK © 2018 Microchip Technology Inc. Description 0.008s 0.016s 0.032s Datasheet Preliminary DS40002030A-page 186 ATtiny807/1607 WDT - Watchdog Timer Value 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB other Name 64CLK 128CLK 256CLK 512CLK 1KCLK 2KCLK 4KCLK 8KCLK - © 2018 Microchip Technology Inc. Description 0.064s 0.128s 0.256s 0.512s 1.0s 2.0s 4.1s 8.2s Reserved Datasheet Preliminary DS40002030A-page 187 ATtiny807/1607 WDT - Watchdog Timer 19.5.2 Status Name:  Offset:  Reset:  Property:  Bit Access Reset 7 STATUS 0x01 0x00 Configuration Change Protection 6 5 4 3 2 1 0 LOCK SYNCBUSY R/W R 0 0 Bit 7 – LOCK Lock Writing this bit to '1' write-protects the WDT.CTRLA register. It is only possible to write this bit to '1'. This bit can be cleared in Debug mode only. If the PERIOD bits in WDT.CTRLA are different from zero after boot code, the lock will automatically be set. This bit is under CCP. Bit 0 – SYNCBUSY Synchronization Busy This bit is set after writing to the WDT.CTRLA register while the data is being synchronized from the system clock domain to the WDT clock domain. This bit is cleared by the system after the synchronization is finished. This bit is not under CCP. Related Links 19.3.6 Synchronization 19.3.7 Configuration Change Protection © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 188 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20. TCA - 16-bit Timer/Counter Type A 20.1 Features • • • • • • • • • 20.2 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 189 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Figure 20-1. 16-bit Timer/Counter and Closely Related Peripherals Timer/Counter Base Counter Counter Control Logic Compare Channel 0 Compare Channel 1 Compare Channel 2 Comparator Buffer Waveform Generation CLK_PER Event System PORTS Timer Period Prescaler This device provides one instance of the TCA peripheral, TCA0. 20.2.1 Block Diagram The figure below shows a detailed block diagram of the timer/counter. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 190 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Figure 20-2. Timer/Counter Block Diagram Base Coun ter PERB CTRLA PER EVCTRL Clock Select Event Select "count" "clear" "load" "direction" Counter CNT = =0 TOP BOTTOM OVF/UNF (INT Req.) Control Logi c "ev" UPDATE BV Compare (Unit x = {A,B,C}) BV CMPnBUF Control Logi c CMPn = Wav efo rm Generation "match" WOn Out 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 191 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Figure 20-3. Timer/Counter Clock Logic CLK_PER Prescaler Event System event CKSEL EVACT (Encoding) CLK_TCA CNT CNTEI 20.2.2 20.2.3 Signal Description Signal Description Type WO[2:0] Digital output Waveform output WO[5:3] Digital output Waveform output - Split Mode only System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 20-1. TCA System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes WO[5:0] Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI 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 20.2.3.2 I/O Lines and Connections Using the I/O lines of the peripheral requires configuration of the I/O pins. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 192 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 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.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. This peripheral can be forced to operate with halted CPU by writing a '1' to the Debug Run bit (DBGRUN) in the Debug Control register of the peripheral (peripheral.DBGCTRL). Related Links 30. UPDI - Unified Program and Debug Interface 20.3 Functional Description 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 193 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 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 20.3.3.1 Normal Operation In normal operation, the counter is counting clock ticks in the direction selected by the Direction bit (DIR) in the Control E register (TCAn.CTRLE), until it reaches TOP or BOTTOM. The clock ticks are from the peripheral clock CLK_PER, optionally prescaled, depending on the Clock Select bit field (CLKSEL) in the Control A register (TCAn.CTRLA). When up-counting and TOP are reached, the counter will wrap to zero at the next clock tick. When downcounting, the counter is reloaded with the Period register value (TCAn.PER) when BOTTOM is reached. Figure 20-4. Normal Operation CNT written MAX "update" CNT TOP 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 194 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Figure 20-5. Period and Compare Double Buffering "write enable" "data write" EN CMPnBUF BV EN UPDATE CMPn 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 PER that is higher than current CNT. New TOP written to PER that is lower 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 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 New TOP written to PER that is higher than current CNT. © 2018 Microchip Technology Inc. New TOP written to PER that is lower than current CNT. Datasheet Preliminary DS40002030A-page 195 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 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 PERB that is higher than current CNT. New Period written to PERB that is lower than current CNT. New PER is updated with PERB value. 20.3.3.4 Compare Channel Each Compare Channel n continuously compares the counter value (TCAn.CNT) with the Compare n register (TCAn.CMPn). If TCAn.CNT equals TCAn.CMPn, the comparator n signals a match. The match will set the Compare Channel's Interrupt flag at the next timer clock cycle, and the optional interrupt is generated. The Compare n Buffer register (TCAn.CMPnBUF) provides double buffer capability equivalent to that for the period buffer. The double buffering synchronizes the update of the TCAn.CMPn register with the buffer value to either the TOP or BOTTOM of the counting sequence, according to the UPDATE condition. The synchronization prevents the occurrence of odd-length, non-symmetrical pulses for glitch-free output. 20.3.3.4.1 Waveform Generation The compare channels can be used for waveform generation on the corresponding port pins. To make the waveform visible on the connected port pin, the following requirements must be met: 1. 2. 3. 4. 5. A Waveform Generation mode must be selected by writing the WGMODE bit field in TCAn.CTRLB. The TCA is counting clock ticks, not events (CNTEI=0 in TCAn.EVCTRL). The compare channels used must be enabled (CMPnEN=1 in TCAn.CTRLB). This will override the corresponding port pin output register. An alternative pin can be selected by writing to the respective TCA Waveform Output n bit (TCA0n) in the Control C register of the Port Multiplexer (PORTMUX.CTRLC). The direction for the associated port pin n must be configured as an output (PORTx.DIR[n]=1). Optional: Enable inverted waveform output for the associated port pin n (INVEN=1 in PORTx.PINn). 20.3.3.4.2 Frequency (FRQ) Waveform Generation For frequency generation, the period time (T) is controlled by a TCAn.CMPn register instead of the Period register (TCAn.PER). The waveform generation output WG is toggled on each compare match between the TCAn.CNT and TCAn.CMPn registers. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 196 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Figure 20-9. Frequency Waveform Generation Period (T) Direction change CNT written MAX "update" CNT TOP BOTTOM WG Output The waveform frequency (fFRQ) is defined by the following equation: �FRQ = f CLK_PER 2� CMPn+1 where N represents the prescaler divider used (CLKSEL in TCAn.CTRLA), 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 Period (T) CMPn=BOTTOM CMPn=TOP MAX TOP "update" "match" 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): �PWM_SS = log PER+1 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: © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 197 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A �PWM_SS = �CLK_PER � 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 Period (T) CMPn=BOTTOM CMPn=TOP "update" "match" MAX CMPn TOP CNT BOTTOM Waveform Output WOn 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): �PWM_DS = log PER+1 log 2 �PWM_DS = �CLK_PER 2� ⋅ PER 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: 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 WOn Waveform CMPnEN © 2018 Microchip Technology Inc. INVEN Datasheet Preliminary DS40002030A-page 198 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.3.3.5 Timer/Counter Commands A set of commands can be issued by software to immediately change the state of the peripheral. These commands give direct control of the UPDATE, RESTART, and RESET signals. A command is issued by writing the respective value to the Command bit field (CMD) in the Control E register (TCAn.CTRLESET). An Update command has the same effect as when an update condition occurs, except that the Update command is not affected by the state of the Lock Update bit (LUPD) in the Control E register (TCAn.CTRLE). The software can force a restart of the current waveform period by issuing a Restart command. In this case, the counter, direction, and all compare outputs are set to zero. A Reset command will set all timer/counter registers to their initial values. A Reset can be issued only when the timer/counter is not running (ENABLE=0 in TCAn.CTRLA). 20.3.3.6 Split Mode - Two 8-Bit Timer/Counters Split Mode Overview To double the number of timers and PWM channels in the TCA, a Split mode is provided. In this Split mode, the 16-bit timer/counter acts as two separate 8-bit timers, which each have three compare channels for PWM generation. The Split mode will only work with single-slope down-count. Split mode does not support event action controlled operation. Split Mode Differences to Normal Mode • Count: – Down-count only – Timer/counter Counter high byte and Counter low byte are independent (TCAn.LCNT, TCAn.HCNT) • Waveform Generation: – Single-slope PWM only (WGMODE=SINGLESLOPE in TCAn.CTRLB) • Interrupt: – No change for low byte Timer/Counter (TCAn.LCNT) – Underflow interrupt for high byte Timer/Counter (TCAn.HCNT) – No compare interrupt or flag for High-byte Compare n registers (TCAn.HCMPn) • Event Actions: Not Compatible • Buffer registers and Buffer Valid Flags: Unused • Register Access: Byte Access to all registers • Temp register: Unused, 16-bit register of the Normal mode are Accessed as 8-bit 'TCA_H' and 'TCA_L', Respectively © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 199 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Block Diagram Figure 20-13. Timer/Counter Block Diagram Split Mode Base Counter HPER LPER "count high" "load high" "count low" "load low" Counter HCNT Clock Select CTRLA LCNT HUNF Control Logic (INT Req.) LUNF (INT Req.) =0 BOTTOML BOTTOMH =0 Compare (Unit n = {0,1,2}) LCMPn Waveform Generation "match" = WOn Out LCMPn (INT Req.) Compare (Unit n = {0,1,2}) HCMPn = Waveform Generation WO[n+3] Out "match" Split Mode Initialization When shifting between Normal mode and Split mode, the functionality of some registers and bits changes, but their values do not. For this reason, disabling the peripheral (ENABLE=0 in TCAn.CTRLA) and doing a hard Reset (CMD=RESET in TCAn.CTRLESET) is recommended when changing the mode to avoid unexpected behavior. To start using the timer/counter in basic Split mode after a hard Reset, follow these steps: • Enable Split mode by writing a '1' to the Split mode enable bit in the Control D register (SPLITM in TCAn.CTRLD) • Write a TOP value to the Period registers (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. • The counter values can be read from the Counter bit field in the Counter registers (TCAn.CNT) Activating Split mode results in changes to the functionality of some registers and register bits. The modifications are described in a separate register map. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 200 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 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. Upcounting 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 For Devices With Up to 8 KB Flash Offset Name Vector Description Conditions 0x00 OVF The counter has reached its top value and wrapped to zero. 0x04 CMP0 Compare channel 0 interrupt Match between the counter value and the Compare 0 register. 0x06 CMP1 Compare channel 1 interrupt Match between the counter value and the Compare 1 register. 0x08 CMP2 Compare channel 2 interrupt Match between the counter value and the Compare 2 register. Overflow and compare match interrupt Table 20-4. Available Interrupt Vectors and Sources in Normal Mode For Devices With More Than 8 KB Flash Offset Name Vector Description Conditions 0x00 OVF The counter has reached its top value and wrapped to zero. 0x08 CMP0 Compare channel 0 interrupt Overflow and compare match interrupt © 2018 Microchip Technology Inc. Match between the counter value and the Compare 0 register. Datasheet Preliminary DS40002030A-page 201 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A Offset Name Vector Description Conditions 0x0A CMP1 Compare channel 1 interrupt Match between the counter value and the Compare 1 register. 0x0E CMP2 Compare channel 2 interrupt Match between the counter value and the Compare 2 register. Table 20-5. Available Interrupt Vectors and Sources in Split Mode For Devices With Up to 8 KB Flash Offset Name Vector Description Conditions 0x00 LUNF Low byte underflow interrupt Low byte timer reaches BOTTOM. 0x02 HUNF High byte underflow interrupt High byte timer reaches BOTTOM. 0x04 LCMP0 Compare channel 0 interrupt Match between the counter value and the low byte of Compare 0 register. 0x06 LCMP1 Compare channel 1 interrupt Match between the counter value and the low byte of Compare 1 register. 0x08 LCMP2 Compare channel 2 interrupt Match between the counter value and the low byte of the Compare 2 register. Table 20-6. Available Interrupt Vectors and Sources in Split Mode For Devices With More Than 8 KB Flash Offset Name Vector Description Conditions 0x00 LUNF Low byte underflow interrupt Low byte timer reaches BOTTOM. 0x04 HUNF High byte underflow interrupt High byte timer reaches BOTTOM. 0x08 LCMP0 Compare channel 0 interrupt Match between the counter value and the low byte of Compare 0 register. 0x0A LCMP1 Compare channel 1 interrupt Match between the counter value and the low byte of Compare 1 register. 0x0E LCMP2 Compare channel 2 interrupt Match between the counter value and the low byte of the Compare 2 register. 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 202 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.3.6 Sleep Mode Operation The timer/counter will continue operation in Idle Sleep mode. 20.3.7 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 203 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.4 Register Summary - TCA in Normal Mode (CTRLD.SPLITM=0) Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 0x02 CTRLC 7:0 0x03 CTRLD 7:0 0x04 CTRLECLR 7:0 CMD[1:0] LUPD DIR 0x05 CTRLESET 7:0 CMD[1:0] LUPD DIR 0x06 CTRLFCLR 7:0 CMP2BV CMP1BV CMP0BV PERBV 0x07 CTRLFSET 7:0 CMP2BV CMP1BV CMP0BV PERBV 0x08 Reserved CLKSEL[2:0] CMP2EN CMP1EN CMP0EN ALUPD ENABLE WGMODE[2:0] CMP2OV CMP1OV CMP0OV SPLITM 0x09 EVCTRL 7:0 0x0A INTCTRL 7:0 CMP2 CMP1 CMP0 EVACT[1:0] CNTEI OVF 0x0B INTFLAGS 7:0 CMP2 CMP1 CMP0 OVF 0x0C ... Reserved 0x0D 0x0E DBGCTRL 7:0 0x0F TEMP 7:0 TEMP[7:0] DBGRUN 7:0 CNT[7:0] 15:8 CNT[15:8] 0x10 ... Reserved 0x1F 0x20 CNT 0x22 ... Reserved 0x25 0x26 PER 0x28 CMP0 0x2A CMP1 0x2C CMP2 7:0 PER[7:0] 15:8 PER[15:8] 7:0 CMP[7:0] 15:8 CMP[15:8] 7:0 CMP[7:0] 15:8 CMP[15:8] 7:0 CMP[7:0] 15:8 CMP[15:8] 0x2E ... Reserved 0x35 0x36 PERBUF 0x38 CMP0nBUF 0x3A CMP1nBUF 0x3C CMP2nBUF 7:0 PERBUF[7:0] 15:8 PERBUF[15:8] 7:0 CMPBUF[7:0] 15:8 CMPBUF[15:8] 7:0 CMPBUF[7:0] 15:8 CMPBUF[15:8] 7:0 CMPBUF[7:0] 15:8 CMPBUF[15:8] © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 204 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5 Register Description - Normal Mode © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 205 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 6 5 4 3 2 1 CLKSEL[2:0] Access 0 ENABLE R/W R/W R/W R/W 0 0 0 0 Reset Bits 3:1 – CLKSEL[2:0] Clock Select These bits select the clock frequency for the timer/counter. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name DIV1 DIV2 DIV4 DIV8 DIV16 DIV64 DIV256 DIV1024 Description fTCA = fCLK_PER/1 fTCA = fCLK_PER/2 fTCA = fCLK_PER/4 fTCA = fCLK_PER/8 fTCA = fCLK_PER/16 fTCA = fCLK_PER/64 fTCA = fCLK_PER/256 fTCA = fCLK_PER/1024 Bit 0 – ENABLE Enable Value 0 1 Description The peripheral is disabled The peripheral is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 206 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.2 Control B - Normal Mode Name:  Offset:  Reset:  Property:  Bit CTRLB 0x01 0x00 - 7 6 5 4 3 CMP2EN CMP1EN CMP0EN ALUPD R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 Access Reset 2 1 0 WGMODE[2:0] Bits 4, 5, 6 – CMPEN Compare n Enable In the FRQ or PWM Waveform Generation mode, these bits will override the PORT output register for the corresponding pin. Value 0 1 Description Port output settings for the pin with WOn output respected Port output settings for pin with WOn output overridden in FRQ or PWM Waveform Generation mode Bit 3 – ALUPD Auto-Lock Update The Auto-Lock Update feature controls the Lock Update (LUPD) bit in the TCAn.CTRLE register. When ALUPD is written to ‘1’, LUPD will be set to ‘1’ until the Buffer Valid (CMPnBV) bits of all enabled compare channels are ‘1’. This condition will clear LUPD. It will remain cleared until the next UPDATE condition, where the buffer values will be transferred to the CMPn registers and LUPD will be set to ‘1’ again. This makes sure that CMPnBUF register values are not transferred to the CMPn registers until all enabled compare buffers are written. Value 0 1 Description LUPD in TCA.CTRLE not altered by system LUPD in TCA.CTRLE set and cleared automatically Bits 2:0 – WGMODE[2:0] Waveform Generation Mode These bits select the Waveform Generation mode and control the counting sequence of the counter, TOP value, UPDATE condition, interrupt condition, and type of waveform that is generated. No waveform generation is performed in the Normal mode of operation. For all other modes, the result from the waveform generator will only be directed to the port pins if the corresponding CMPnEN bit has been set to enable this. The port pin direction must be set as output. Table 20-7. Timer Waveform Generation Mode WGMODE[2:0] Group Configuration Mode of Operation Top Update OVF Normal PER TOP TOP 000 NORMAL 001 FRQ Frequency CMP0 TOP TOP 010 - Reserved - - - 011 SINGLESLOPE Single-slope PWM PER BOTTOM BOTTOM © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 207 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A WGMODE[2:0] Group Configuration Mode of Operation Top Update OVF Reserved - - - 100 - 101 DSTOP Dual-slope PWM PER BOTTOM TOP 110 DSBOTH Dual-slope PWM PER BOTTOM TOP and BOTTOM 111 DSBOTTOM Dual-slope PWM PER BOTTOM BOTTOM Value 0x0 0x1 0x3 0x5 0x6 0x7 Other Name NORMAL FRQ SINGLESLOPE DSTOP DSBOTH DSBOTTOM - © 2018 Microchip Technology Inc. Description Normal operation mode Frequency mode Single-slope PWM mode Dual-slope PWM mode Dual-slope PWM mode Dual-slope PWM mode Reserved Datasheet Preliminary DS40002030A-page 208 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.3 Control C - Normal Mode Name:  Offset:  Reset:  Property:  Bit 7 CTRLC 0x02 0x00 - 6 5 4 3 Access Reset 2 1 0 CMP2OV CMP1OV CMP0OV R/W R/W R/W 0 0 0 Bit 2 – CMP2OV Compare Output Value 2 See CMP0OV. Bit 1 – CMP1OV Compare Output Value 1 See CMP0OV. Bit 0 – CMP0OV Compare Output Value 0 The CMPnOV bits allow direct access to the waveform generator's output compare value when the timer/ counter is not enabled. This is used to set or clear the WG output value when the timer/counter is not running. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 209 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.4 Control D Name:  Offset:  Reset:  Property:  Bit 7 CTRLD 0x03 0x00 - 6 5 4 3 2 1 0 SPLITM Access R/W Reset 0 Bit 0 – SPLITM Enable Split Mode This bit sets the timer/counter in Split mode operation. It will then work as two 8-bit timer/counters. The register map will change compared to normal 16-bit mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 210 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.5 Control Register E Clear - Normal Mode Name:  Offset:  Reset:  Property:  CTRLECLR 0x04 0x00 - 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 CMD[1:0] Access Reset 1 0 LUPD DIR R/W R/W R/W R/W 0 0 0 0 Bits 3:2 – CMD[1:0] Command These bits are used for software control of update, restart, and reset of the timer/counter. The command bits are always read as '0'. Value 0x0 0x1 0x2 0x3 Name NONE UPDATE RESTART RESET Description No command Force update Force restart Force hard Reset (ignored if TC is enabled) Bit 1 – LUPD Lock Update Lock update can be used to ensure that all buffers are valid before an update is performed. Value 0 1 Description The buffered registers are updated as soon as an UPDATE condition has occurred. No update of the buffered registers is performed, even though an UPDATE condition has occurred. Bit 0 – DIR Counter Direction Normally this bit is controlled in hardware by the Waveform Generation mode or by event actions, but this bit can also be changed from software. Value 0 1 Description The counter is counting up (incrementing) The counter is counting down (decrementing) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 211 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.6 Control Register E Set - Normal Mode Name:  Offset:  Reset:  Property:  CTRLESET 0x05 0x00 - 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 CMD[1:0] Access Reset 1 0 LUPD DIR R/W R/W R/W R/W 0 0 0 0 Bits 3:2 – CMD[1:0] Command These bits are used for software control of update, restart, and reset the timer/counter. The command bits are always read as '0'. Value 0x0 0x1 0x2 0x3 Name NONE UPDATE RESTART RESET Description No command Force update Force restart Force hard Reset (ignored if TC is enabled) Bit 1 – LUPD Lock Update Locking the update ensures that all buffers are valid before an update is performed. Value 0 1 Description The buffered registers are updated as soon as an UPDATE condition has occurred. No update of the buffered registers is performed, even though an UPDATE condition has occurred. Bit 0 – DIR Counter Direction Normally this bit is controlled in hardware by the Waveform Generation mode or by event actions, but this bit can also be changed from software. Value 0 1 Description The counter is counting up (incrementing) The counter is counting down (decrementing) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 212 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.7 Control Register F Clear Name:  Offset:  Reset:  Property:  CTRLFCLR 0x06 0x00 - 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 Access Reset 4 3 2 1 0 CMP2BV CMP1BV CMP0BV PERBV R/W R/W R/W R/W 0 0 0 0 Bit 3 – CMP2BV Compare 2 Buffer Valid See CMP0BV. Bit 2 – CMP1BV Compare 1 Buffer Valid See CMP0BV. Bit 1 – CMP0BV Compare 0 Buffer Valid The CMPnBV bits are set when a new value is written to the corresponding TCAn.CMPnBUF register. These bits are automatically cleared on an UPDATE condition. Bit 0 – PERBV Period Buffer Valid This bit is set when a new value is written to the TCAn.PERBUF register. This bit is automatically cleared on an UPDATE condition. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 213 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.8 Control Register F Set Name:  Offset:  Reset:  Property:  CTRLFSET 0x07 0x00 - 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 Access Reset 4 3 2 1 0 CMP2BV CMP1BV CMP0BV PERBV R/W R/W R/W R/W 0 0 0 0 Bit 3 – CMP2BV Compare 2 Buffer Valid See CMP0BV. Bit 2 – CMP1BV Compare 1 Buffer Valid See CMP0BV. Bit 1 – CMP0BV Compare 0 Buffer Valid The CMPnBV bits are set when a new value is written to the corresponding TCAn.CMPnBUF register. These bits are automatically cleared on an UPDATE condition. Bit 0 – PERBV Period Buffer Valid This bit is set when a new value is written to the TCAn.PERBUF register. This bit is automatically cleared on an UPDATE condition. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 214 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.9 Event Control Name:  Offset:  Reset:  Property:  Bit 7 EVCTRL 0x09 0x00 - 6 5 4 3 2 1 EVACT[1:0] Access Reset 0 CNTEI R/W R/W R/W 0 0 0 Bits 2:1 – EVACT[1:0] Event Action These bits define what type of event action the counter will increment or decrement. Value 0x0 0x1 0x2 0x3 Name EVACT_POSEDGE EVACT_ANYEDGE EVACT_HIGHLVL EVACT_UPDOWN Description Count on positive edge event Count on any edge event Count on prescaled clock while event line is 1. Count on prescaled clock. The Event controls the count direction. Upcounting when the event line is 0, down-counting when the event line is 1. Bit 0 – CNTEI Enable Count on Event Input Value 0 1 Description Counting on Event input is disabled Counting on Event input is enabled according to EVACT bit field © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 215 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.10 Interrupt Control Register - Normal Mode Name:  Offset:  Reset:  Property:  Bit Access Reset 7 INTCTRL 0x0A 0x00 - 6 5 4 CMP2 CMP1 CMP0 3 2 1 OVF 0 R/W R/W R/W R/W 0 0 0 0 Bit 6 – CMP2 Compare Channel 2 Interrupt Enable See CMP0. Bit 5 – CMP1 Compare Channel 1 Interrupt Enable See CMP0. Bit 4 – CMP0 Compare Channel 0 Interrupt Enable Writing the CMPn bits to '1' enable compare interrupt from channel n. Bit 0 – OVF Timer Overflow/Underflow Interrupt Enable Writing the OVF bit to '1' enables overflow interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 216 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.11 Interrupt Flag Register - Normal Mode Name:  Offset:  Reset:  Property:  INTFLAGS 0x0B 0x00 - 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 Access Reset 7 6 5 4 3 2 1 0 CMP2 CMP1 CMP0 OVF R/W R/W R/W R/W 0 0 0 0 Bit 6 – CMP2 Compare Channel 2 Interrupt Flag See CMP0 flag description. Bit 5 – CMP1 Compare Channel 1 Interrupt Flag See CMP0 flag description. Bit 4 – CMP0 Compare Channel 0 Interrupt Flag The Compare Interrupt flag (CMPn) is set on a compare match on the corresponding compare channel. For all modes of operation, the CMPn flag will be set when a compare match occurs between the Count register (TCAn.CNT) and the corresponding Compare register (TCAn.CMPn). The CMPn flag is not cleared automatically, only by writing a ‘1’ to its bit location. Bit 0 – OVF Overflow/Underflow Interrupt Flag This flag is set either on a TOP (overflow) or BOTTOM (underflow) condition, depending on the WGMODE setting. The OVF flag is not cleared automatically, only by writing a ‘1’ to its bit location. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 217 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.12 Debug Control Register Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x0E 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Run in Debug Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 218 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.13 Temporary Bits for 16-Bit Access Name:  Offset:  Reset:  Property:  TEMP 0x0F 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TEMP[7:0] Temporary Bits for 16-bit Access © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 219 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.14 Counter Register - Normal Mode Name:  Offset:  Reset:  Property:  CNT 0x20 0x00 - 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 R/W R/W R/W R/W Reset 0 0 R/W R/W R/W R/W 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 CNT[15:8] Access CNT[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CNT[15:8] Counter High Byte These bits hold the MSB of the 16-bit counter register. Bits 7:0 – CNT[7:0] Counter Low Byte These bits hold the LSB of the 16-bit counter register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 220 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.15 Period Register - Normal Mode Name:  Offset:  Reset:  Property:  PER 0x26 0xFFFF - TCAn.PER contains the 16-bit TOP value in the timer/counter. The TCAn.PERL and TCAn.PERH register pair represents the 16-bit value, TCAn.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. Bit 15 14 13 12 11 10 9 8 R/W R/W R/W R/W Reset 1 1 R/W R/W R/W R/W 1 1 1 1 1 1 Bit 7 6 5 4 3 2 1 0 PER[15:8] Access PER[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 Bits 15:8 – PER[15:8] Periodic High Byte These bits hold the MSB of the 16-bit period register. Bits 7:0 – PER[7:0] Periodic Low Byte These bits hold the LSB of the 16-bit period register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 221 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.16 Compare n Register - Normal Mode Name:  Offset:  Reset:  Property:  CMPn 0x28 + n*0x02 [n=0..2] 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CMP[15:8] Compare High Byte These bits hold the MSB of the 16-bit compare register. Bits 7:0 – CMP[7:0] Compare Low Byte These bits hold the LSB of the 16-bit compare register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 222 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.17 Period Buffer Register Name:  Offset:  Reset:  Property:  PERBUF 0x36 0xFFFF - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 Bits 15:8 – PERBUF[15:8] Period Buffer High Byte These bits hold the MSB of the 16-bit period buffer register. Bits 7:0 – PERBUF[7:0] Period Buffer Low Byte These bits hold the LSB of the 16-bit period buffer register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 223 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.5.18 Compare n Buffer Register Name:  Offset:  Reset:  Property:  CMPnBUF 0x38 + n*0x02 [n=0..2] 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CMPBUF[15:8] Compare High Byte These bits hold the MSB of the 16-bit compare buffer register. Bits 7:0 – CMPBUF[7:0] Compare Low Byte These bits hold the LSB of the 16-bit compare buffer register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 224 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.6 Register Summary - TCA in Split Mode (CTRLD.SPLITM=1) Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 HCMP2EN HCMP1EN HCMP0EN LCMP2EN LCMP1EN LCMP0EN 0x02 CTRLC 7:0 HCMP2OV HCMP1OV HCMP0OV LCMP2OV LCMP1OV LCMP0OV 0x03 CTRLD 7:0 0x04 CTRLECLR 7:0 CMD[1:0] CMDEN[1:0] 0x05 CTRLESET 7:0 CMD[1:0] CMDEN[1:0] CLKSEL[2:0] ENABLE SPLITM 0x06 ... Reserved 0x09 0x0A INTCTRL 7:0 LCMP2 LCMP1 LCMP0 HUNF LUNF 0x0B INTFLAGS 7:0 LCMP2 LCMP1 LCMP0 HUNF LUNF 0x0C ... Reserved 0x0D 0x0E DBGCTRL 7:0 DBGRUN 0x0F ... Reserved 0x1F 0x20 LCNT 7:0 LCNT[7:0] 0x21 HCNT 7:0 HCNT[7:0] 0x22 ... Reserved 0x25 0x26 LPER 7:0 LPER[7:0] 0x27 HPER 7:0 HPER[7:0] 0x28 LCMP0 7:0 LCMP[7:0] 0x29 HCMP0 7:0 HCMP[7:0] 0x2A LCMP1 7:0 LCMP[7:0] 0x2B HCMP1 7:0 HCMP[7:0] 0x2C LCMP2 7:0 LCMP[7:0] 0x2D HCMP2 7:0 HCMP[7:0] 20.7 Register Description - Split Mode © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 225 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 6 5 4 3 2 1 CLKSEL[2:0] Access 0 ENABLE R/W R/W R/W R/W 0 0 0 0 Reset Bits 3:1 – CLKSEL[2:0] Clock Select These bits select the clock frequency for the timer/counter. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name DIV1 DIV2 DIV4 DIV8 DIV16 DIV64 DIV256 DIV1024 Description fTCA = fCLK_PER/1 fTCA = fCLK_PER/2 fTCA = fCLK_PER/4 fTCA = fCLK_PER/8 fTCA = fCLK_PER/16 fTCA = fCLK_PER/64 fTCA = fCLK_PER/256 fTCA = fCLK_PER/1024 Bit 0 – ENABLE Enable Value 0 1 Description The peripheral is disabled The peripheral is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 226 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.2 Control B - Split Mode Name:  Offset:  Reset:  Property:  Bit Access Reset 7 CTRLB 0x01 0x00 - 6 5 4 2 1 0 HCMP2EN HCMP1EN HCMP0EN 3 LCMP2EN LCMP1EN LCMP0EN R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bit 6 – HCMP2EN High byte Compare 2 Enable See LCMP0EN. Bit 5 – HCMP1EN High byte Compare 1 Enable See LCMP0EN. Bit 4 – HCMP0EN High byte Compare 0 Enable See LCMP0EN. Bit 2 – LCMP2EN Low byte Compare 2 Enable See LCMP0EN. Bit 1 – LCMP1EN Low byte Compare 1 Enable See LCMP0EN. Bit 0 – LCMP0EN Low byte Compare 0 Enable Setting the LCMPnEN/HCMPnEN bits in the FRQ or PWM Waveform Generation mode of operation will override the port output register for the corresponding WOn pin. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 227 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.3 Control C - Split Mode Name:  Offset:  Reset:  Property:  Bit Access Reset 7 CTRLC 0x02 0x00 - 6 5 4 2 1 0 HCMP2OV HCMP1OV HCMP0OV 3 LCMP2OV LCMP1OV LCMP0OV R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bit 6 – HCMP2OV High byte Compare 2 Output Value See LCMP0OV. Bit 5 – HCMP1OV High byte Compare 1 Output Value See LCMP0OV. Bit 4 – HCMP0OV High byte Compare 0 Output Value See LCMP0OV. Bit 2 – LCMP2OV Low byte Compare 2 Output Value See LCMP0OV. Bit 1 – LCMP1OV Low byte Compare 1 Output Value See LCMP0OV. Bit 0 – LCMP0OV Low byte Compare 0 Output Value The LCMPnOV/HCMPn bits allow direct access to the waveform generator's output compare value when the timer/counter is not enabled. This is used to set or clear the WOn output value when the timer/counter is not running. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 228 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.4 Control D Name:  Offset:  Reset:  Property:  Bit 7 CTRLD 0x03 0x00 - 6 5 4 3 2 1 0 SPLITM Access R/W Reset 0 Bit 0 – SPLITM Enable Split Mode This bit sets the timer/counter in Split mode operation. It will then work as two 8-bit timer/counters. The register map will change compared to normal 16-bit mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 229 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.5 Control Register E Clear - Split Mode Name:  Offset:  Reset:  Property:  CTRLECLR 0x04 0x00 - 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 R/W R/W R/W R/W 0 0 0 0 CMD[1:0] Access Reset 0 CMDEN[1:0] Bits 3:2 – CMD[1:0] Command These bits are used for software control of update, restart, and reset of the timer/counter. The command bits are always read as '0'. Value 0x0 0x1 0x2 0x3 Name NONE RESTART RESET Description No command Reserved Force restart Force hard Reset (ignored if TC is enabled) Bits 1:0 – CMDEN[1:0] Command enable These bits are used to indicate for which timer/counter the command (CMD) is valid. Value 0x0 0x1 0x2 0x3 Name NONE BOTH Description None Reserved Reserved Command valid for both low-byte and high-byte T/C © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 230 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.6 Control Register E Set - Split Mode Name:  Offset:  Reset:  Property:  CTRLESET 0x05 0x00 - 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 R/W R/W R/W R/W 0 0 0 0 CMD[1:0] Access Reset 0 CMDEN[1:0] Bits 3:2 – CMD[1:0] Command These bits are used for software control of update, restart, and reset of the timer/counter. The command bits are always read as '0'. The CMD bits must be used together with CMDEN. Using the reset command requires that both low-byte and high-byte timer/counter is selected. Value 0x0 0x1 0x2 0x3 Name NONE RESTART RESET Description No command Reserved Force restart Force hard Reset (ignored if TC is enabled) Bits 1:0 – CMDEN[1:0] Command enable These bits are used to indicate for which timer/counter the command (CMD) is valid. Value 0x0 0x1 0x2 0x3 Name NONE BOTH Description None Reserved Reserved Command valid for both low-byte and high-byte T/C © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 231 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.7 Interrupt Control Register - Split Mode Name:  Offset:  Reset:  Property:  Bit Access Reset 7 INTCTRL 0x0A 0x00 - 6 5 4 1 0 LCMP2 LCMP1 LCMP0 3 2 HUNF LUNF R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 6 – LCMP2 Low byte Compare Channel 0 Interrupt Enable See LCMP0. Bit 5 – LCMP1 Low byte Compare Channel 1 Interrupt Enable See LCMP0. Bit 4 – LCMP0 Low byte Compare Channel 0 Interrupt Enable Writing LCMPn bit to '1' enables low byte compare interrupt from channel n. Bit 1 – HUNF High byte Underflow Interrupt Enable Writing HUNF bit to '1' enables high byte underflow interrupt. Bit 0 – LUNF Low byte Underflow Interrupt Enable Writing HUNF bit to '1' enables low byte underflow interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 232 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.8 Interrupt Flag Register - Split Mode Name:  Offset:  Reset:  Property:  INTFLAGS 0x0B 0x00 - 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 Access Reset 7 6 5 4 LCMP2 LCMP1 R/W R/W 0 0 3 2 1 0 LCMP0 HUNF LUNF R/W R/W R/W 0 0 0 Bit 6 – LCMP2 Low byte Compare Channel 0 Interrupt Flag See LCMP0 flag description. Bit 5 – LCMP1 Low byte Compare Channel 0 Interrupt Flag See LCMP0 flag description. Bit 4 – LCMP0 Low byte Compare Channel 0 Interrupt Flag The Compare Interrupt flag (LCMPn) is set on a compare match on the corresponding compare channel. For all modes of operation, the LCMPn flag will be set when a compare match occurs between the Low Byte Count register (TCAn.LCNT) and the corresponding compare register (TCAn.LCMPn). The LCMPn flag will not be cleared automatically and has to be cleared by software. This is done by writing a ‘1’ to its bit location. Bit 1 – HUNF High byte Underflow Interrupt Flag This flag is set on a high byte timer BOTTOM (underflow) condition. HUNF is not automatically cleared and needs to be cleared by software. This is done by writing a ‘1’ to its bit location. Bit 0 – LUNF Low byte Underflow Interrupt Flag This flag is set on a low byte timer BOTTOM (underflow) condition. LUNF is not automatically cleared and needs to be cleared by software. This is done by writing a ‘1’ to its bit location. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 233 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.9 Debug Control Register Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x0E 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Run in Debug Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 234 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.10 Low Byte Timer Counter Register - Split Mode Name:  Offset:  Reset:  Property:  LCNT 0x20 0x00 - 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 R/W R/W R/W R/W 0 0 0 R/W R/W R/W R/W 0 0 0 0 0 LCNT[7:0] Access Reset Bits 7:0 – LCNT[7:0] Counter Value for Low Byte Timer These bits define the counter value of the low byte timer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 235 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.11 High Byte Timer Counter Register - Split Mode Name:  Offset:  Reset:  Property:  HCNT 0x21 0x00 - 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 R/W R/W R/W R/W 0 0 0 R/W R/W R/W R/W 0 0 0 0 0 HCNT[7:0] Access Reset Bits 7:0 – HCNT[7:0] Counter Value for High Byte Timer These bits define the counter value in high byte timer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 236 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.12 Low Byte Timer Period Register - Split Mode Name:  Offset:  Reset:  Property:  LPER 0x26 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 Bits 7:0 – LPER[7:0] Period Value Low Byte Timer These bits hold the TOP value of low byte timer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 237 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.13 High Byte Period Register - Split Mode Name:  Offset:  Reset:  Property:  HPER 0x27 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 Bits 7:0 – HPER[7:0] Period Value High Byte Timer These bits hold the TOP value of high byte timer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 238 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.14 Compare Register n For Low Byte Timer - Split Mode Name:  Offset:  Reset:  Property:  LCMP 0x28 + n*0x02 [n=0..2] 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – LCMP[7:0] Compare Value of Channel n These bits hold the compare value of channel n that is compared to TCAn.LCNT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 239 ATtiny807/1607 TCA - 16-bit Timer/Counter Type A 20.7.15 High Byte Compare Register n - Split Mode Name:  Offset:  Reset:  Property:  HCMP 0x29 + n*0x02 [n=0..2] 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – HCMP[7:0] Compare Value of Channel n These bits hold the compare value of channel n that is compared to TCAn.HCNT. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 240 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21. TCB - 16-bit Timer/Counter Type B 21.1 Features • • • 21.2 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 241 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.2.1 Block Diagram Figure 21-1. Timer/Counter Type B Block Diagram TCB ClockSelect CTRLA Mode CTRLB EVCTRL Edge Select CCMP DIV2 Counter "count" "clear" CNT CLK_PER Control Logic CLK_TCA Event System IF (INT Req.) = =0 Mode, Output enable, initial value TOP BOTTOM Synchronous output Output control and Asynchronous logic Asynchronous output 21.2.1.1 Noise Canceler The noise canceler improves noise immunity by using a simple digital filter scheme. When the noise filter is enabled, the peripheral monitors the event channel and keeps a record of the last four observed samples. If four consecutive samples are equal, the input is considered to be stable and the signal is fed to the edge detector. When enabled, the noise canceler introduces an additional delay of four system clock cycles between a change applied to the input and the update of the input compare register. The noise canceler uses the system clock and is, therefore, not affected by the prescaler. 21.2.2 Signal Description Signal Description Type WO Digital Asynchronous Output Waveform Output Related Links 5. I/O Multiplexing and Considerations 21.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 242 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Table 21-1. TCB System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes WO Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI 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.2 I/O Lines and Connections Using the I/O lines of the peripheral requires configuration of the I/O pins. Related Links 5. I/O Multiplexing and Considerations 16. PORT - I/O Pin Configuration 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 21.2.3.5 Debug Operation When the CPU is halted in Debug mode, this peripheral will halt normal operation. This peripheral can be forced to continue operation during debugging. This peripheral can be forced to operate with halted CPU by writing a '1' to the Debug Run bit (DBGRUN) in the Debug Control register of the peripheral (peripheral.DBGCTRL). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 243 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Related Links 30. UPDI - Unified Program and Debug Interface 21.3 Functional Description 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 244 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Figure 21-2. Periodic Interrupt Mode TOP changed to a value lower than CNT Counter wraps around MAX "Interrupt" TOP CNT BOTTOM 21.3.3.1.2 Time-Out Check Mode In this mode, the counter counts to MAX and wraps around. On the first edge the counter is restarted and on the second edge, the counter is stopped. If the count register (TCBn.CNT) reaches TOP before the second edge, an interrupt will be generated. In Freeze state, the counter will restart on a new edge. Reading count (TCBn.CNT) or compare/capture (TCBn.CCMP) register, or writing run bit (RUN in TCBn.STATUS) in Freeze state will have no effect. Figure 21-3. Time-Out Check Mode Event Input TOP changed to a value lower than CNT Edge detector Counter wraps around MAX “ Inter rupt” CNT TOP BOTTOM 21.3.3.1.3 Input Capture on Event Mode The counter will count from BOTTOM to MAX continuously. When an event is detected the counter value will be transferred to the Compare/Capture register (TCBn.CCMP) and interrupt is generated. The module has an edge detector that can be configured to trigger count capture on either rising or falling edges. The figure below shows the input capture unit configured to capture on falling edge on the event input signal. The interrupt flag is automatically cleared after the high byte of the Capture register has been read. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 245 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Figure 21-4. Input Capture on Event " Interrupt" Event Input Edge detector MAX CNT BOTTOM Copy CNT to CCMP and interrupt Wraparound Copy CNT to CCMP 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, interrupt and restart © 2018 Microchip Technology Inc. Copy CNT to CCMP, interrupt and restart Datasheet Preliminary Copy CNT to CCMP, interrupt and restart DS40002030A-page 246 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.3.3.1.5 Input Capture Pulse-Width Measurement Mode The input capture pulse-width measurement will restart the counter on a positive edge and capture on the next falling edge before an interrupt request is generated. The interrupt flag is automatically cleared when the high byte of the capture register is read. The timer will automatically switch between rising and falling edge detection, but a minimum edge separation of two clock cycles is required for correct behavior. Figure 21-6. Input Capture Pulse-Width Measurement " Interrupt " Event Input Edge detector MAX CNT BOTTOM Restart counter Copy CNT to CCMP and interrupt Restart counter Copy CNT to CCMP and give interrupt Restart counter 21.3.3.1.6 Input Capture Frequency and Pulse-Width Measurement Mode In this mode, the timer will start counting when a positive edge is detected on the even input signal. On the following falling edge, the count value is captured. The counter stops when the second rising edge of the event input signal is detected and this will set the interrupt flag. Reading the capture will clear the interrupt flag. When the capture register is read or the interrupt flag is cleared the TC is ready for a new capture sequence. Therefore, read the counter register before the capture register since it is reset to zero at the next positive edge. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 247 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Figure 21-7. Input Capture Frequency and Pulse-Width Measurement Ignore till Capture is read Trigger next capture sequence Event Input Edge detector MAX " Interrupt" CNT BOTTOM Start counter Copy CNT to CCMP Stop counter and interrupt CPU reads the CCMP register 21.3.3.1.7 Single-Shot Mode This mode can be used to generate a pulse with a duration that is defined by the Compare register (TCBn.CCMP), every time a rising or falling edge is observed on a connected event channel. When the counter is stopped, the output pin is driven to low. If an event is detected on the connected event channel, the timer will reset and start counting from zero to TOP while driving its output high. The RUN bit in the STATUS register can be read to see if the counter is counting or not. When the counter register reaches the CCMP register value, the counter will stop and the output pin will go low for at least one prescaler cycle. If a new event arrives during this time, that event will be ignored. The following figure shows an example waveform. There is a two clock cycle delay from when the event is received until the output is set high. The counter will start counting as soon as the module is enabled, even without triggering an event. This is prevented by writing TOP to the counter register. Similar behavior is seen if the EDGE bit in the TCBn.EVCTRL register is '1' while the module is enabled. Writing TOP to the Counter register prevents this as well. If the ASYNC bit in TCBn.CTRLB is written to '1', the timer is reacting asynchronously to an incoming event. An edge on the event will immediately cause the output signal to be set. The counter will still start counting two clock cycles after the event is received. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 248 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Figure 21-8. Single-Shot Mode Ignored Ignored Edge detector TOP CNT " Interrupt" BOTTOM Output Counter reaches TOP value Event starts counter Event starts counter Counter reaches TOP value 21.3.3.1.8 8-Bit PWM Mode This timer can be configured to run in 8-bit PWM mode where each of the register pairs in the 16-bit Compare/Capture register (TCBn.CCMPH and TCBn.CCMPL) are used as individual compare registers. The counter will continuously count from zero to CCMPL and the output will be set at BOTTOM and cleared when the counter reaches CCMPH. When this peripheral is enabled and in PWM mode, changing the value of the Compare/Capture register will change the output, but the transition may output invalid values. It is hence recommended to: 1. Disable the peripheral. 2. Write Compare/Capture register to {CCMPH, CCMPL}. 3. Write 0x0000 to count register. 4. Re-enable the module. CCMPH is the number of cycles for which the output will be driven high, CCMPL+1 is the period of the output pulse. For different capture register values the output values are: • CCMPL = 0 • CCMPL = 0xFF • CCMPH = 0 • • Output = 0 Output = 0 0 < CCMPH ≤ 0xFF Output = 1 for CCMPH cycles, low for the rest of the period For 0 < CCMPL < 0xFF • CCMPH = 0 Output = 0 • If 0 < CCMPH ≤ CCMPL • CCMPH = CCMPL + 1 © 2018 Microchip Technology Inc. Output = 1 for CCMPH cycles, low for the rest of the period Output = 1 Datasheet Preliminary DS40002030A-page 249 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Figure 21-9. 8-Bit PWM Mode " Interrupt " CCMPL CNT CCMPH BOTTOM Output (CNT == CCMPL) and output goes high (CNT == CCMPH) and output goes low 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 CNTMODE Output, CTRLB=’0’, CCMPEN=1 Output, CTRLB=’1’, CCMPEN=1 Single-Shot mode Output high when the counter starts and output low when the counter stops Output high when event arrives and output low when the counter stops 8-bit PWM mode PWM mode output PWM mode output Modes except single shot and PWM Bit CCMPINIT in TCBn.CTRLB Bit CCMPINIT in TCBn.CTRLB 21.3.3.3 Noise Canceler The noise canceler improves noise immunity by using a simple digital filter scheme. When the noise filter is enabled, the peripheral monitors the event channel and keeps a record of the last four observed samples. If four consecutive samples are equal, the input is considered to be stable and the signal is fed to the edge detector. When enabled, the noise canceler introduces an additional delay of four system clock cycles between a change applied to the input and the update of the input compare register. The noise canceler uses the system clock and is, therefore, not affected by the prescaler. 21.3.3.4 Synchronized with TCAn TCB can be configured to use the clock (CLK_TCA) of the Timer/Counter type A (TCAn) by writing to the Clock Select bit field (CLKSEL) in the Control A register (TCBn.CTRLA). In this setting, the TCB will count on the exact same clock source as selected in TCA. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 250 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 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 Offset Name Vector Description Conditions 0x00 CAPT TCB interrupt Depending on operating mode. See description of CAPT in TCB.INTFLAG. 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.6 Sleep Mode Operation TCB will halt operation in the Power-Down Sleep mode. Standby sleep operation is dependent on the Run in Standby bit (RUNSTDBY) in the Control A register (TCB.CTRLA). 21.3.7 Synchronization Not applicable. 21.3.8 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 251 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.4 Register Summary - TCB Offset Name Bit Pos. 0x00 CTRLA 7:0 RUNSTDBY 0x01 CTRLB 7:0 ASYNC FILTER SYNCUPD CCMPINIT CCMPEN CLKSEL[1:0] ENABLE CNTMODE[2:0] 0x02 ... Reserved 0x03 0x04 EVCTRL 7:0 0x05 INTCTRL 7:0 CAPT 0x06 INTFLAGS 7:0 CAPT 0x07 STATUS 7:0 RUN 0x08 DBGCTRL 7:0 0x09 TEMP 7:0 TEMP[7:0] 0x0A CNT 7:0 CNT[7:0] 0x0C 21.5 CCMP EDGE CAPTEI DBGRUN 15:8 CNT[15:8] 7:0 CCMP[7:0] 15:8 CCMP[15:8] Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 252 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLA 0x00 0x00 - 6 5 4 3 2 1 CLKSEL[1:0] 0 RUNSTDBY SYNCUPD ENABLE R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 6 – RUNSTDBY Run in Standby Writing a '1' to this bit will enable the peripheral to run in Standby Sleep mode. Not applicable when CLKSEL is set to 0x2 (CLK_TCA). Bit 4 – SYNCUPD Synchronize Update When this bit is written to '1', the TCB will restart whenever the TCA0 counter is restarted. Bits 2:1 – CLKSEL[1:0] Clock Select Writing these bits selects the clock source for this peripheral. Value 0x0 0x1 0x2 0x3 Description CLK_PER CLK_PER/2 Use CLK_TCA from TCA0 Reserved Bit 0 – ENABLE Enable Writing this bit to '1' enables the Timer/Counter type B peripheral. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 253 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLB 0x01 0x00 - 6 5 4 ASYNC CCMPINIT CCMPEN 3 2 1 0 R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 CNTMODE[2:0] Bit 6 – ASYNC Asynchronous Enable Writing this bit to '1' will allow asynchronous updates of the TCB output signal in Single-Shot mode. Value 0 1 Description The output will go HIGH when the counter actually starts The output will go HIGH when an event arrives Bit 5 – CCMPINIT Compare/Capture Pin Initial Value This bit is used to set the initial output value of the pin when a pin output is used. Value 0 1 Description Initial pin state is LOW Initial pin state is HIGH Bit 4 – CCMPEN Compare/Capture Output Enable This bit is used to enable the output signal of the Compare/Capture. Value 0 1 Description Compare/Capture Output is zero Compare/Capture Output has a valid value Bits 2:0 – CNTMODE[2:0] Timer Mode Writing these bits selects the Timer mode. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Description Periodic Interrupt mode Time-out Check mode Input Capture on Event mode Input Capture Frequency Measurement mode Input Capture Pulse-Width Measurement mode Input Capture Frequency and Pulse-Width Measurement mode Single-Shot mode 8-Bit PWM mode © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 254 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.3 Event Control Name:  Offset:  Reset:  Property:  Bit EVCTRL 0x04 0x00 - 7 Access 6 5 4 3 2 1 0 FILTER EDGE CAPTEI R/W R/W R/W 0 0 0 Reset Bit 6 – FILTER Input Capture Noise Cancellation Filter Writing this bit to '1' enables the input capture noise cancellation unit. Bit 4 – EDGE Event Edge This bit is used to select the event edge. The effect of this bit is dependent on the selected Count Mode (CNTMODE) in TCBn.CTRLB. "-" means that an event or edge has no effect in this mode. Count Mode EDGE Positive Edge Negative Edge Periodic Interrupt mode 0 - - 1 - - 0 Start counter Stop counter 1 Stop counter Start counter 0 Input Capture, interrupt - 1 - Input Capture, interrupt 0 Input Capture, clear and restart counter, interrupt - 1 - Input Capture, clear and restart counter, interrupt Input Capture Pulse-Width Measurement mode 0 Clear and restart counter Input Capture, interrupt 1 Input Capture, interrupt Clear and restart counter Input Capture Frequency and Pulse Width Measurement mode 0 On 1st Positive: Clear and restart counter Timeout Check mode Input Capture on Event mode Input Capture Frequency Measurement mode On following Negative: Input Capture 2nd Positive: Stop counter, interrupt 1 On 1st Negative: Clear and restart counter On following Positive: Input Capture 2nd Negative: Stop counter, interrupt Single-Shot mode © 2018 Microchip Technology Inc. 0 Start counter Datasheet Preliminary - DS40002030A-page 255 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B Count Mode 8-Bit PWM mode EDGE Positive Edge Negative Edge 1 Start counter Start counter 0 - - 1 - - Bit 0 – CAPTEI Capture Event Input Enable Writing this bit to '1' enables the input capture event. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 256 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.4 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x05 0x00 - 6 5 4 3 2 1 0 CAPT Access R/W Reset 0 Bit 0 – CAPT Capture Interrupt Enable Writing this bit to '1' enables the capture interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 257 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.5 Interrupt Flags Name:  Offset:  Reset:  Property:  Bit INTFLAGS 0x06 0x00 - 7 6 5 4 3 2 1 0 CAPT Access R/W Reset 0 Bit 0 – CAPT Interrupt Flag This bit is set when an interrupt occurs. The interrupt conditions are dependent on the Counter Mode (CNTMODE) in TCBn.CTRLB. This bit is cleared by writing a '1' to it or when the Capture register is read in Capture mode. Counter Mode Interrupt Flag Behavior Periodic Interrupt mode Set when the counter reaches TOP Timeout Check mode Set when the counter reaches TOP Input Capture on Event mode Set when an event occurs and the Capture register is loaded, cleared when Capture is read Input Capture Frequency Measurement mode Set on an edge when the Capture register is loaded and count initialized, cleared when Capture is read Input Capture Pulse-Width Measurement mode Set on an edge when the Capture register is loaded, the previous edge initialized the count, cleared when Capture is read Input Capture Frequency and PulseWidth Measurement mode Set on second (positive or negative) edge when the counter is stopped, cleared when Capture is read Single-Shot mode Set when counter reaches TOP 8-Bit PWM mode Set when the counter reaches CCMPL © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 258 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.6 Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x07 0x00 - 6 5 4 3 2 1 0 RUN Access R Reset 0 Bit 0 – RUN Run When the counter is running, this bit is set to '1'. When the counter is stopped, this bit is cleared to '0'. The bit is read-only and cannot be set by UPDI. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 259 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.7 Debug Control Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x08 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Debug Run Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 260 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.8 Temporary Value Name:  Offset:  Reset:  Property:  TEMP 0x09 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TEMP[7:0] Temporary Value © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 261 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.9 Count Name:  Offset:  Reset:  Property:  CNT 0x0A 0x00 - 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 R/W R/W R/W R/W Reset 0 0 R/W R/W R/W R/W 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 CNT[15:8] Access CNT[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CNT[15:8] Count Value High These bits hold the MSB of the 16-bit Counter register. Bits 7:0 – CNT[7:0] Count Value Low These bits hold the LSB of the 16-bit Counter register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 262 ATtiny807/1607 TCB - 16-bit Timer/Counter Type B 21.5.10 Capture/Compare Name:  Offset:  Reset:  Property:  CCMP 0x0C 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CCMP[15:8] Capture/Compare Value High Byte These bits hold the MSB of the 16-bit compare, capture, and top value. Bits 7:0 – CCMP[7:0] Capture/Compare Value Low Byte These bits hold the LSB of the 16-bit compare, capture, and top value. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 263 ATtiny807/1607 RTC - Real-Time Counter 22. RTC - Real-Time Counter 22.1 Features • • • • • • • • 22.2 16-Bit Resolution Selectable Clock Source: – 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 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 - Real-Time Counter The RTC counts (prescaled) clock cycles in a Counter register, and compares the content of the Counter register to a Period register and a Compare register. The RTC can generate both interrupts and events on compare match or overflow. It will generate a compare interrupt and/or event at the first count after the counter equals the Compare register value, and an overflow interrupt and/or event at the first count after the counter value equals the Period register value. The overflow will also reset the counter value to zero. The RTC peripheral typically runs continuously, including in Low-Power Sleep modes, to keep track of time. It can wake-up the device from Sleep modes and/or interrupt the device at regular intervals. The RTC can be clocked from an external clock signal, the 32 KHz internal Ultra Low-Power Oscillator (OSCULP32K), or the OSCULP32K divided by 32. The RTC peripheral includes a 15-bit programmable prescaler that can scale down the reference clock before it reaches the counter. A wide range of resolutions and time-out periods can be configured for the RTC. With a 32.768 kHz clock source, the maximum resolution is 30.5 μs, and timeout periods can be up to two seconds. With a resolution of 1s, the maximum timeout period is more than 18 hours (65536 seconds). The RTC can give a compare interrupt and/or event when the counter equals the compare register value, and an overflow interrupt and/or event when it equals the period register value. PIT - Periodic Interrupt Timer Using the same clock source as the RTC function, the PIT can request an interrupt or trigger an output event on every nth clock period. n can be selected from {4, 8, 16,.. 32768} for interrupts, and from {64, 128, 256,... 8192} for events. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 264 ATtiny807/1607 RTC - Real-Time Counter The PIT uses the same clock source (CLK_RTC) as the RTC function. Related Links 22.3 RTC Functional Description 22.4 PIT Functional Description 22.2.1 Block Diagram Figure 22-1. Block Diagram Pxn 32KHz ULP int. Osc. DIV32 RTC CLK_RTC 22.2.2 Signal Description Not applicable. 22.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 22-1. RTC System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI Related Links 22.2.3.1 Clocks 22.2.3.2 I/O Lines and Connections © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 265 ATtiny807/1607 RTC - Real-Time Counter 22.2.3.5 Debug Operation 22.2.3.3 Interrupts 22.2.3.4 Events 22.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 22.2.3.2 I/O Lines and Connections An external clock can be used. 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.6 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.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. This peripheral can be forced to operate with halted CPU by writing a '1' to the Debug Run bit (DBGRUN) in the Debug Control register of the peripheral (peripheral.DBGCTRL). Related Links 30. UPDI - Unified Program and Debug Interface 22.3 RTC Functional Description The RTC peripheral offers two timing functions: the Real-Time Counter (RTC) and a Periodic Interrupt Timer (PIT). This subsection describes the RTC. Related Links 22.4 PIT Functional Description 22.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). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 266 ATtiny807/1607 RTC - Real-Time Counter Related Links 10. CLKCTRL - Clock Controller 22.4 PIT Functional Description 22.3.1.1 Configure the Clock CLK_RTC To configure CLK_RTC, follow these steps: 1. 2. Configure the desired oscillator to operate as required, in the Clock Controller peripheral (CLKCTRL). Write the Clock Select bits (CLKSEL) in the Clock Selection register (RTC.CLKSEL) accordingly. The CLK_RTC clock configuration is used by both RTC and PIT functionality. 22.3.1.2 Configure RTC To operate the RTC, follow these steps: 1. 2. 3. Set the compare value in the Compare register (RTC.CMP), and/or the overflow value in the Top register (RTC.PER). Enable the desired interrupts by writing to the respective Interrupt Enable bits (CMP, OVF) in the Interrupt Control register (RTC.INTCTRL). Configure the RTC internal prescaler and enable the RTC by writing the desired value to the PRESCALER bit field and a '1' to the RTC Enable bit (RTCEN) in the Control A register (RTC.CTRLA). 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. 22.3.2 Operation - RTC 22.3.2.1 Enabling, Disabling, and Resetting The RTC is enabled by setting the Enable bit in the Control A register (ENABLE bit in RTC.CTRLA to 1). The RTC is disabled by writing ENABLE bit in RTC.CTRLA to 0. 22.4 PIT Functional Description The RTC peripheral offers two timing functions: the Real-Time Counter (RTC) and a Periodic Interrupt Timer (PIT). This subsection describes the PIT. Related Links 22.3 RTC Functional Description 22.4.1 Initialization To operate the PIT, follow these steps: 1. Configure the RTC clock CLK_RTC as described in 22.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 267 ATtiny807/1607 RTC - Real-Time Counter 22.4.2 Operation - PIT 22.4.2.1 Enabling, Disabling, and Resetting The PIT is enabled by setting the Enable bit in the PIT Control A register (the PITEN bit in RTC.PITCTRLA to 1). The PIT is disabled by writing the PITEN bit in RTC.PITCTRLA to 0. 22.4.2.2 PIT Interrupt Timing Timing of the First Interrupt The PIT function and the RTC function are running off the same counter inside the prescaler, but both functions’ periods can be configured independently: • The RTC period is configured by writing the PRESCALER bit field in RTC.CTRLA. • The PIT period is configured by writing the PERIOD bit field in RTC.PITCTRLA. The prescaler is OFF when both functions are OFF (RTC Enable bit (RTCEN) in RTC.CTRLA and PIT Enable bit (PITEN) in RTC.PITCTRLA are zero), but it is running (i.e. its internal counter is counting) when either function is enabled. For this reason, the timing of the first PIT interrupt output is depending on whether the RTC function is already enabled or not: • When RTCEN in RTC.CTRLA is zero and PITEN in RTC.PITCTRLA is written to ‘1’, the prescaler will start operating at the next edge of CLK_RTC, counting from zero. The PIT interrupt output will then toggle from ‘0’ to ‘1’ after a ½ period. • When the RTC function is already enabled (RTCEN is ‘1’), the prescaler is already running. The timing of the first interrupt output from the PIT depends on the value of the counter when the prescaler is enabled. Since the application can’t access that value, the first interrupt output may occur anytime between writing PITEN to ‘1’ and up to a full PIT period after. Continuous Operation After the first interrupt output, the PIT will continue toggling every ½ PIT period, resulting in a full PIT period signal. Example 22-1. PIT Timing Diagram for PERIOD=CYC16 For PERIOD=CYC16 in RTC.PITCTRLA, the PIT output effectively follows the state of prescaler counter bit 3, so the resulting interrupt output has a period of 16 CLK_RTC cycles. When both RTC and PIT functions are disabled, the prescaler is OFF. The delay between writing PITEN to ‘1’ and the first interrupt output is always ½ PIT period, with an uncertainty of one leading CLK_RTC cycle. 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 268 ATtiny807/1607 RTC - Real-Time Counter Figure 22-2. Timing Between PIT Enable and First Interrupt Enabling PIT with RTC/Prescaler Disabled CLK_RTC ..000000 ..000001 ..000010 ..000011 ..000100 ..000101 ..000110 ..000111 ..001000 ..001001 ..001010 ..001011 ..001100 ..001101 ..001110 ..001111 ..010000 ..010001 ..010010 ..010011 ..010100 ..010101 ..010110 ..010111 ..011000 ..011001 ..011010 ..011011 ..011100 ..011101 ..011110 ..011111 ..100000 ..100001 ..100010 ..100011 ..100100 ..100101 prescaler counter value (LSb) prescaler bit 3 (CYC16) Continuous Operation PITENABLE=0 1/2 PIT period (8 CLK_RTC) PIT output write PITENABLE=1 first PIT output Enabling PIT with RTC/Prescaler Enabled prescaler counter value (LSb) ..000000 ..000001 ..000010 ..000011 ..000100 ..000101 ..000110 ..000111 ..001000 ..001001 ..001010 ..001011 ..001100 ..001101 ..001110 ..001111 ..010000 ..010001 ..010010 ..010011 ..010100 ..010101 ..010110 ..010111 ..011000 ..011001 ..011010 ..011011 ..011100 ..011101 ..011110 ..011111 ..100000 ..100001 ..100010 ..100011 ..100100 ..100101 ..100110 ..100111 ..101000 ..101001 ..101010 ..101011 ..101100 ..101101 ..101110 ..101111 CLK_RTC prescaler bit 3 (CYC16) Continuous Operation PITENABLE=0 PIT output time window for writing PITENABLE=1 first PIT output 22.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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 269 ATtiny807/1607 RTC - Real-Time Counter • • • • • 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 22.6 Interrupts Table 22-2. Available Interrupt Vectors and Sources For Devices With Up to 8 KB Flash Offset Name Vector Description 0x00 0x02 RTC PIT Real-time counter overflow and compare match interrupt Periodic Interrupt Timer interrupt Conditions • • Overflow (OVF): The counter has reached its top value and wrapped to zero. Compare (CMP): Match between the counter value and the compare register. A time period has passed, as configured in RTC_PITCTRLA.PERIOD. Table 22-3. Available Interrupt Vectors and Sources For Devices With More Than 8 KB Flash Offset Name Vector Description 0x00 0x04 RTC PIT Real-time counter overflow and compare match interrupt Periodic Interrupt Timer interrupt Conditions • • Overflow (OVF): The counter has reached its top value and wrapped to zero. Compare (CMP): Match between the counter value and the compare register. A time period has passed, as configured in 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 22.11.3 INTCTRL 22.11.13 PITINTCTRL © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 270 ATtiny807/1607 RTC - Real-Time Counter 22.7 Sleep Mode Operation The RTC will continue to operate in Idle Sleep mode. It will run in Standby Sleep mode if the RUNSTDBY bit in RTC.CTRLA is set. The PIT will continue to operate in any sleep mode. Related Links 22.11.1 CTRLA 22.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 22.9 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 271 ATtiny807/1607 RTC - Real-Time Counter 22.10 Register Summary - RTC Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 STATUS 7:0 0x02 INTCTRL 7:0 0x03 INTFLAGS 7:0 0x04 TEMP 7:0 0x05 DBGCTRL 7:0 0x06 Reserved 0x07 CLKSEL 0x08 0x0A 0x0C CNT PER CMP RUNSTDBY PRESCALER[3:0] RTCEN CMPBUSY PERBUSY CNTBUSY CTRLABUSY CMP OVF CMP OVF TEMP[7:0] DBGRUN 7:0 CLKSEL[1:0] 7:0 CNT[7:0] 15:8 CNT[15:8] 7:0 PER[7:0] 15:8 PER[15:8] 7:0 CMP[7:0] 15:8 CMP[15:8] 0x0E ... Reserved 0x0F 0x10 PITCTRLA 7:0 0x11 PITSTATUS 7:0 CTRLBUSY 0x12 PITINTCTRL 7:0 PI 0x13 PITINTFLAGS 7:0 PI 0x14 Reserved 0x15 PITDBGCTRL 7:0 DBGRUN 22.11 PERIOD[3:0] PITEN Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 272 ATtiny807/1607 RTC - Real-Time Counter 22.11.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 CTRLA 0x00 0x00 - 6 RUNSTDBY Access Reset 5 4 3 PRESCALER[3:0] 2 1 0 RTCEN R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bit 7 – RUNSTDBY Run in Standby Value 0 1 Description RTC disabled in Standby Sleep mode RTC enabled in Standby Sleep mode Bits 6:3 – PRESCALER[3:0] Prescaler These bits define the prescaling of the CLK_RTC clock signal. 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 CTRLABUSY flag in RTC.STATUS is cleared before writing to this register. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF Name DIV1 DIV2 DIV4 DIV8 DIV16 DIV32 DIV64 DIV128 DIV256 DIV512 DIV1024 DIV2048 DIV4096 DIV8192 DIV16384 DIV32768 Description RTC clock/1 (no prescaling) RTC clock/2 RTC clock/4 RTC clock/8 RTC clock/16 RTC clock/32 RTC clock/64 RTC clock/128 RTC clock/256 RTC clock/512 RTC clock/1024 RTC clock/2048 RTC clock/4096 RTC clock/8192 RTC clock/16384 RTC clock/32768 Bit 0 – RTCEN RTC Enable Value 0 1 Description RTC disabled RTC enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 273 ATtiny807/1607 RTC - Real-Time Counter 22.11.2 Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x01 0x00 - 6 5 4 3 2 1 0 CMPBUSY PERBUSY CNTBUSY CTRLABUSY Access R R R R Reset 0 0 0 0 Bit 3 – CMPBUSY Compare Synchronization Busy This bit is indicating whether the RTC is busy synchronizing the Compare register (RTC.CMP) in RTC clock domain. Bit 2 – PERBUSY Period Synchronization Busy This bit is indicating whether the RTC is busy synchronizing the Period register (RTC.PER) in RTC clock domain. Bit 1 – CNTBUSY Counter Synchronization Busy This bit is indicating whether the RTC is busy synchronizing the Count register (RTC.CNT) in RTC clock domain. Bit 0 – CTRLABUSY Control A Synchronization Busy This bit is indicating whether the RTC is busy synchronizing the Control A register (RTC.CTRLA) in RTC clock domain. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 274 ATtiny807/1607 RTC - Real-Time Counter 22.11.3 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x02 0x00 - 6 5 4 3 Access Reset 2 1 0 CMP OVF R/W R/W 0 0 Bit 1 – CMP Compare Match Interrupt Enable Enable interrupt-on-compare match (i.e., when the Counter value (CNT) matches the Compare value (CMP)). Bit 0 – OVF Overflow Interrupt Enable Enable interrupt-on-counter overflow (i.e., when the Counter value (CNT) matched the Period value (PER) and wraps around to zero). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 275 ATtiny807/1607 RTC - Real-Time Counter 22.11.4 Interrupt Flag Name:  Offset:  Reset:  Property:  Bit 7 INTFLAGS 0x03 0x00 - 6 5 4 3 2 1 0 CMP OVF Access R R Reset 0 0 Bit 1 – CMP Compare Match Interrupt Flag This flag is set when the Counter value (CNT) matches the Compare value (CMP). Writing a '1' to this bit clears the flag. Bit 0 – OVF Overflow Interrupt Flag This flag is set when the Counter value (CNT) has reached the Period value (PER) and wrapped to zero. Writing a '1' to this bit clears the flag. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 276 ATtiny807/1607 RTC - Real-Time Counter 22.11.5 Temporary Name:  Offset:  Reset:  Property:  TEMP 0x4 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TEMP[7:0] Temporary Temporary register for read/write operations in 16-bit registers. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 277 ATtiny807/1607 RTC - Real-Time Counter 22.11.6 Debug Control Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x05 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Debug Run Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 278 ATtiny807/1607 RTC - Real-Time Counter 22.11.7 Clock Selection Name:  Offset:  Reset:  Property:  Bit 7 CLKSEL 0x07 0x00 - 6 5 4 3 2 1 0 CLKSEL[1:0] Access Reset R/W R/W 0 0 Bits 1:0 – CLKSEL[1:0] Clock Select Writing these bits select the source for the RTC clock (CLK_RTC). Value 0x0 0x1 0x2 0x3 Name INT32K INT1K EXTCLK © 2018 Microchip Technology Inc. Description 32.768 kHz from OSCULP32K 1.024 kHz from OSCULP32K Reserved External clock from EXTCLK pin Datasheet Preliminary DS40002030A-page 279 ATtiny807/1607 RTC - Real-Time Counter 22.11.8 Count Name:  Offset:  Reset:  Property:  CNT 0x08 0x00 - 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 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 CNT[7:0] Access Reset Bits 15:8 – CNT[15:8] Counter High Byte These bits hold the MSB of the 16-bit Counter register. Bits 7:0 – CNT[7:0] Counter Low Byte These bits hold the LSB of the 16-bit Counter register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 280 ATtiny807/1607 RTC - Real-Time Counter 22.11.9 Period Name:  Offset:  Reset:  Property:  PER 0x0A 0xFF - 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 R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 PER[7:0] Access Reset Bits 15:8 – PER[15:8] Period High Byte These bits hold the MSB of the 16-bit Period register. Bits 7:0 – PER[7:0] Period Low Byte These bits hold the LSB of the 16-bit Period register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 281 ATtiny807/1607 RTC - Real-Time Counter 22.11.10 Compare Name:  Offset:  Reset:  Property:  CMP 0x0C 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – CMP[15:8] Compare High Byte These bits hold the MSB of the 16-bit Compare register. Bits 7:0 – CMP[7:0] Compare Low Byte These bits hold the LSB of the 16-bit Compare register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 282 ATtiny807/1607 RTC - Real-Time Counter 22.11.11 Periodic Interrupt Timer Control A Name:  Offset:  Reset:  Property:  Bit 7 PITCTRLA 0x10 0x00 - 6 5 4 3 2 PERIOD[3:0] Access Reset 1 0 PITEN R/W R/W R/W R/W R/W 0 0 0 0 0 Bits 6:3 – PERIOD[3:0] Period Writing this bit field selects the number of RTC clock cycles between each interrupt. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF Name OFF CYC4 CYC8 CYC16 CYC32 CYC64 CYC128 CYC256 CYC512 CYC1024 CYC2048 CYC4096 CYC8192 CYC16384 CYC32768 - Description No interrupt 4 cycles 8 cycles 16 cycles 32 cycles 64 cycles 128 cycles 256 cycles 512 cycles 1024 cycles 2048 cycles 4096 cycles 8192 cycles 16384 cycles 32768 cycles Reserved Bit 0 – PITEN Periodic Interrupt Timer Enable Writing a '1' to this bit enables the Periodic Interrupt Timer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 283 ATtiny807/1607 RTC - Real-Time Counter 22.11.12 Periodic Interrupt Timer Status Name:  Offset:  Reset:  Property:  Bit 7 PITSTATUS 0x11 0x00 - 6 5 4 3 2 1 0 CTRLBUSY Access R Reset 0 Bit 0 – CTRLBUSY PITCTRLA Synchronization Busy This bit indicates whether the RTC is busy synchronizing the Periodic Interrupt Timer Control A register (RTC.PITCTRLA) in the RTC clock domain. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 284 ATtiny807/1607 RTC - Real-Time Counter 22.11.13 PIT Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 PITINTCTRL 0x12 0x00 - 6 5 4 3 2 1 0 PI Access R/W Reset 0 Bit 0 – PI Periodic interrupt Value 0 1 Description The periodic interrupt is disabled The periodic interrupt is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 285 ATtiny807/1607 RTC - Real-Time Counter 22.11.14 PIT Interrupt Flag Name:  Offset:  Reset:  Property:  Bit 7 PITINTFLAGS 0x13 0x00 - 6 5 4 3 2 1 0 PI Access R Reset 0 Bit 0 – PI Periodic interrupt Flag This flag is set when a periodic interrupt is issued. Writing a '1' clears the flag. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 286 ATtiny807/1607 RTC - Real-Time Counter 22.11.15 Periodic Interrupt Timer Debug Control Name:  Offset:  Reset:  Property:  Bit 7 PITDBGCTRL 0x15 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Debug Run Writing this bit to '1' will enable the PIT to run in Debug mode while the CPU is halted. Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 287 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23. USART - Universal Synchronous and Asynchronous Receiver and Transmitter 23.1 Features • • • • • • • • • • • • 23.2 Full-Duplex or One-Wire Half-Duplex Operation Asynchronous or Synchronous Operation: – Synchronous clock rates up to 1/2 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 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 288 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 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. 23.2.1 Signal Description Signal Type Description RxD Input/output Receiving line TxD Output Transmitting line © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 289 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Signal Type Description XCK Input/output Clock for synchronous operation XDIR Output Transmit Enable for RS485 Related Links 5. I/O Multiplexing and Considerations 23.2.2 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 23-1. USART System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI Related Links 23.2.2.5 Debug Operation 23.2.2.1 Clocks 23.2.2.2 I/O Lines and Connections 23.2.2.3 Interrupts 23.2.2.4 Events 23.2.2.1 Clocks This peripheral depends on the peripheral clock. Related Links 10. CLKCTRL - Clock Controller 23.2.2.2 I/O Lines and Connections Using the I/O lines of the peripheral requires configuration of the I/O pins. Related Links 16. PORT - I/O Pin Configuration 5. I/O Multiplexing and Considerations 23.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 23.3.4 Interrupts © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 290 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.2.2.4 Events The events of this peripheral are connected to the Event System. Related Links 14. EVSYS - Event System 23.2.2.5 Debug Operation When the CPU is halted in Debug mode, this peripheral will continue normal operation. If the peripheral is configured to require periodical service by the CPU through interrupts or similar, improper operation or data loss may result during debugging. This peripheral can be forced to halt operation during debugging. Related Links 30. UPDI - Unified Program and Debug Interface 23.2.2.6 Block Diagram Figure 23-1. USART Block Diagram Clock Generator BAUD OSC Fractional Baud Rate Generator Sync Logic Pin Control XCK Transmitter TXDATA Parity Generator Transmit Shift Register TX Control XDIR Pin Control TxD Receiver Clock Recovery RX Control Receive Shift Register Data Recovery Pin Control RXDATA Buffer Parity Checker RxD RXDATA © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 291 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.3 Functional Description 23.3.1 Initialization For setting the USART in Full-Duplex mode, the following initialization sequence is recommended: 1. 2. 3. 4. 5. Set the TxD pin value high, and optionally set the XCK pin low (OUT[n] in PORTx.OUT). Set the TxD and optionally the XCK pin as an output (DIR[n] in PORTx.DIR). Set the baud rate (in the USARTn.BAUD register) and frame format. Set the mode of operation (enables XCK pin output in Synchronous mode). 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. 2. 3. 4. 5. 6. Set the TxD/RxD pin value high, and optionally set the XCK pin low. Optionally, write the ODME bit in the USARTn.CTRLB register to '1' for Wired-AND functionality. Set the TxD/RxD and optionally the XCK pin as an output. Select the baud rate and frame format. Select the mode of operation (enables XCK pin output in Synchronous mode). 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. 23.3.2 Operation 23.3.2.1 Clock Generation The clock used for baud rate generation and for shifting and sampling data bits is generated internally by the fractional Baud Rate Generator or externally from the transfer clock (XCK) pin. Five modes of clock generation are supported; Normal and Double-Speed Asynchronous mode, Master and Slave Synchronous mode, and Master SPI mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 292 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Figure 23-2. Clock Generation Logic Block Diagram BAUD RXMODE BAUD Rate Generator fBAUD /2 /4 /2 1 CLK_PER XCK Pin 0 txclk 1 DDR_XCK PORT_INV xcki 0 Sync Register Edge Detector CMODE[0] 0 1 xcko 1 0 DDR_XCK rxclk 23.3.2.1.1 Internal Clock Generation - The Fractional Baud Rate Generator The Baud Rate Generator is used for internal clock generation for Asynchronous modes, Synchronous master mode, and Master SPI mode operation. The output frequency generated (fBAUD) is determined by the baud register value (BAUD) and the peripheral clock frequency (fCLK_PER). In Asynchronous mode, the BAUD register value uses all 16 bits. The 10 MSBs (BAUD[15:6]) hold the integer part, while the 6 LSBs (BAUD[5:0]) hold the fractional part. The fractional part is used to dynamically adjust the sampling timing for each individual bit in the frame and in that way compensate for the inaccuracy of the integer part of the BAUD register setting. BAUD register values below 64 are not supported, as the integer part need 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, and the fractional part must therefore be written to zero. The following table lists equations for translating between BAUD register values and baud rates. The equations takes BAUD register bit width and fractional interpretation into consideration, and 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 23-2. Equations for Calculating Baud Rate Register Setting Operating Mode Conditions Asynchronous Synchronous Baud Rate (�����, Bits Per USART.BAUD Register Value Calculation Seconds) ����� ≤ ����_��� � ����_��� × 26 � × ���� ����� ����_��� × 26 � × ����� ����� ≤ ����_��� 2 ����_��� × 26 2 × ���� ����� ����_��� × 26 2 × ����� �����.���� ≥ 64 S = 16 if in Receiver mode (USART.CTRLB, RXMODE) is configured as NORMAL, and S = 8 if configured as CLK2X. S determines the number of samples taken for each USART symbol. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 293 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.3.2.1.2 External Clock An External clock (XCK) is used in Synchronous Slave mode operation. The XCK clock input is sampled on the peripheral clock frequency and the maximum XCK clock frequency (fXCK) is limited by the following: ����< ����_��� 4 For each high and low period, the XCK clock cycles must be sampled twice by the peripheral clock. If the XCK clock has jitter, or if the high/low period duty cycle is not 50/50, the maximum XCK clock speed must be reduced accordingly. 23.3.2.1.3 Double Speed Operation Double speed operation allows for higher baud rates under asynchronous operation with lower peripheral clock frequencies. This operation mode is enabled by writing the RXMODE bit in the Control B register (USARTn.CTRLB) to CLK2X. When enabled, the baud rate for a given asynchronous baud rate setting shown in Table 23-2 will be doubled. In this mode, the receiver will use half the number of samples (reduced from 16 to 8) for data sampling and clock recovery. This requires a more accurate baud rate setting and peripheral clock. See 23.3.2.4.6 Asynchronous Data Reception for more details. 23.3.2.1.4 Synchronous Clock Operation When Synchronous mode is used, the XCK pin controls whether the transmission clock is input (Slave mode) or output (Master mode). The corresponding port pin must be set to output for Master mode or to input for Slave mode (PORTx.DIR[n]). The normal port operation of the XCK pin will be overridden. The dependency between the clock edges and data sampling or data change is the same. Data input (on RxD) is sampled at the XCK clock edge which is opposite the edge where data output (TxD) is changed. Figure 23-3. Synchronous Mode XCK Timing 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. 23.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 23-2). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 294 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 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 23-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 23-3. Functionality of INVEN in PORTx.PINnCTRL and UCPHA in USARTn.CTRLC SPI Mode INVEN UCPHA Leading Edge Trailing Edge 0 0 0 Rising, sample Falling, setup 1 0 1 Rising, setup Falling, sample 2 1 0 Falling, sample Rising, setup 3 1 1 Falling, setup Rising, sample The leading edge is the first clock edge of a clock cycle. The trailing edge is the last clock edge of a clock cycle. Figure 23-4. UCPHA and INVEN Data Transfer Timing Diagrams UCPHA=0 UCPHA=1 INVEN=0 INVEN=1 SPI Mode 1 SPI Mode 3 XCK Data setup (TXD) Data sample (RXD) XCK Data setup (TXD) Data sample (RXD) SPI Mode 0 SPI Mode 2 XCK Data setup (TXD) Data sample (RXD) XCK Data setup (TXD) Data sample (RXD) Related Links 23.5.9 CTRLC 23.3.2.2 Frame Formats Data transfer is frame based, where a serial frame consists of one character of data bits with synchronization bits (Start and Stop bits) and an optional parity bit for error checking. This does not apply to master SPI operation (see 23.3.2.2.2 SPI Frame Formats.) The USART accepts all combinations of the following as valid frame formats: • • • • 1 Start bit 5, 6, 7, 8, or 9 Data bits No, even, or odd Parity bit 1 or 2 Stop bits Figure 23-5 illustrates the possible combinations of frame formats. Bits inside brackets are optional. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 295 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Figure 23-5. Frame Formats Table 23-4. Frame Format Nomenclature 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 23.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 one data bits is odd (making the total number of logical ones even). If odd parity is selected, the parity bit is set to ‘1’ if the number of logical one data bits is even (making the total number of ones 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. 23.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. 23.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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 296 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.3.2.3.1 Sending Frames A data transmission is initiated by loading the Transmit buffer (DATA in USARTn.TXDATA) with the data to be sent. The data in the transmit buffer is moved to the Shift register when the Shift register is empty and ready to send a new frame. The Shift register is loaded if it is in Idle state (no ongoing transmission) or immediately after the last Stop bit of the previous frame is transmitted. When the Shift register is loaded with data, it will transfer one complete frame. When the entire frame in the Shift register has been shifted out and there is no new data present in the transmit buffer, the Transmit Complete Interrupt Flag (TXCIF in USARTn.STATUS) is set and the optional interrupt is generated. TXDATA can only be written when the Data Register Empty Flag (DREIF in USARTn.STATUS) is set, indicating that the register is empty and ready for new data. When using frames with fewer than eight bits, the Most Significant bits written to TXDATA are ignored. If 9-bit characters are used, DATA[8] in USARTn.TXDATAH has to be written before DATA[7:0] in USARTn.TXDATAL. 23.3.2.3.2 Disabling the Transmitter A disabling of the transmitter will not become effective until ongoing and pending transmissions are completed; i.e. when the Transmit Shift register and Transmit Buffer register do not contain data to be 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. 23.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. 23.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). 23.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 297 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.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 23-6. Protected Identifier Field and Mapping of Identifier and Parity Bits Protected identifier field St ID0 ID1 ID2 ID3 ID4 ID5 P0 P1 Sp 23.3.2.4.4 Disabling the Receiver A disabling of the receiver will be immediate. The receiver buffer will be flushed, and data from ongoing receptions will be lost. 23.3.2.4.5 Flushing the Receive Buffer If the receive buffer has to be flushed during normal operation, read the DATA location (USARTn.RXDATAH and USARTn.RXDATAL registers) until the Receive Complete Interrupt Flag (RXCIF in USARTn.RXDATAH) is cleared. 23.3.2.4.6 Asynchronous Data Reception The USART includes a clock recovery and a data recovery unit for handling asynchronous data reception. The clock recovery unit is used for synchronizing the incoming asynchronous serial frames at the RxD pin to the internally generated baud rate clock. It samples and low-pass filters each incoming bit, thereby improving the noise immunity of the receiver. The asynchronous reception operational range depends on the accuracy of the internal baud rate clock, the rate of the incoming frames, and the frame size in a number of bits. Asynchronous Clock Recovery The clock recovery unit synchronizes the internal clock to the incoming serial frames. Figure 23-7 illustrates the sampling process for the Start bit of an incoming frame: • In Normal mode, the sample rate is 16 times the baud rate. • In Double-Speed mode, the sample rate is eight times the baud rate. • The horizontal arrows illustrate the synchronization variation due to the sampling process. Note that in Double-Speed mode, the variation is larger. • Samples denoted as zero are sampled with the RxD line idle (i.e., when there is no communication activity). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 298 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Figure 23-7. Start Bit Sampling RxD IDLE START BIT 0 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. Figure 23-8. Sampling 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 23-9. Stop Bit and Next Start Bit Sampling RxD STOP 1 (A) (B) (C) 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 299 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... (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. 23.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 � + 1 + 6 ����� = Table 23-5. Formula Nomenclature 16 � + 2 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 23-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 23-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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 300 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... D #(Data + Parity Bit) Rslow [%] Rfast [%] Maximum Total Error [%] Receiver Max. Receiver Error [%] 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. 23.3.2.5 USART in Master SPI mode Using the USART in Master SPI mode requires the transmitter to be enabled. The receiver can optionally be enabled to serve as the serial input. The XCK pin will be used as the transfer clock. As for the USART, a data transfer is initiated by writing to the USARTn.DATA register. This is the case for both sending and receiving data since the transmitter controls the transfer clock. The data written to 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 23.5.9 CTRLC 23.3.2.5.1 USART SPI vs. SPI The USART in Master SPI mode is fully compatible with the stand-alone SPI module in that: • • • Timing diagrams are the same UCPHA bit functionality is identical to that of the SPI CPHA bit UDORD bit functionality is identical to that of the SPI DORD bit When the USART is set in Master SPI mode, configuration and use are in some cases different from those of the stand-alone SPI module. In addition, the following difference exists: • The USART in Master SPI mode does not include the SPI Write Collision feature The USART in Master SPI mode does not include the SPI Double-Speed mode feature, but this can be achieved by configuring the Baud Rate Generator accordingly: • • Interrupt timing is not compatible Pin control differs due to the master-only operation of the USART in SPI Master mode A comparison of the USART in Master SPI mode and the SPI pins is shown in Table 23-8. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 301 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Table 23-8. Comparison of USART in Master SPI Mode and SPI Pins USART SPI Comment TxD MOSI Master out only RxD MISO Master in only XCK SCK Functionally identical - SS Not supported by USART in Master SPI mode Related Links 23.5.9 CTRLC 23.3.2.6 RS-485 Mode of Operation The RS-485 feature enables the support of external components to comply with the RS-485 standard. Either an external line driver is supported as shown in the figure below (RS-485=0x1 in USARTn.CTRLA), or control of the transmitter driving the TxD pin is provided (RS-485=0x2). While operating in RS-485 mode, the Transmit Direction pin (XDIR) is driven high when the transmitter is active. Figure 23-10. RS-485 Bus Connection VDD USART RxD XDIR Differential bus TxD 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 23-11. XDIR Drive Timing TxD St 0 1 2 3 4 5 6 7 Sp1 XDIR Guard time Stop Related Links 23.2.1 Signal Description 23.3.2.7 Start Frame Detection The start frame detection is supported in UART mode only. The UART start frame detector is limited to Standby Sleep mode only and can wake up the system when a Start bit is detected. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 302 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... When a high-to-low transition is detected on RxDn, the oscillator is powered up and the UART clock is enabled. After start-up, the rest of the data frame can be received, provided that the baud rate is slow enough in relation to the oscillator start-up time. Start-up time of the oscillators varies with supply voltage and temperature. For details on oscillator start-up time characteristics, refer to the Electrical Characteristics. If a false Start bit is detected and if the system has not been woken up by another source, the clock will automatically be turned OFF and the UART waits for the next transition. The UART start frame detection works in Asynchronous mode only. It is enabled by writing the Start Frame Detection bit (SFDEN) in USARTn.CTLB. If the Start bit is detected while the device is in Standby Sleep mode, the UART Start Interrupt Flag (RXSIF) bit is set. In Active, Idle, and Power-Down Sleep modes, the asynchronous detection is automatically disabled. The UART receive complete flag and UART start interrupt flag share the same interrupt line, but each has its dedicated interrupt settings. Table 23-9 shows the USART start frame detection modes, depending on interrupt setting. Table 23-9. USART Start Frame Detection Modes SFDEN RXSIF Interrupt RXCIF Interrupt Comment 0 x x Standard mode. 1 Disabled Disabled Only the oscillator is powered during the frame reception. If the interrupts are disabled and buffer overflow is ignored, all incoming frames will be lost. 1 (1) Disabled Enabled System/all clocks are awakened on Receive Complete interrupt. 1 (1) Enabled x System/all clocks are awakened on UART Start Detection. Note:  1. The SLEEP instruction will not shut down the oscillator if there is ongoing communication. 23.3.2.8 Break Character Detection and Auto-Baud When USART receive mode is set to LINAUTO mode (RXMODE in USARTn.CTRLB), it follows the LIN format. All LIN frames start with a break field followed by a sync field. The USART uses a break detection threshold of greater than 11 nominal bit times at the configured baud rate. At any time, if more than 11 consecutive dominant bits are detected on the bus, the USART detects a break field. When a break field has been detected, the USART expects the sync field character to be 0x55. This field is used to update the actual baud rate in order to stay synchronized. If the received sync character is not 0x55, then the Inconsistent Sync Field Error flag (ISFIF in USARTn.STATUS) is set and the baud rate is unchanged. Figure 23-12. LIN Break and Sync Fields Break Field Sync Field 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 303 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 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. 23.3.2.9 One-Wire Mode In this mode, the TxD pin is connected to the RxD pin internally. If the receiver is enabled when transmitting it will receive what the transmitter is sending. This can be used to check that no one else is trying to transmit since received data will not be the same as the transmitted data. 23.3.2.10 Multiprocessor Communication Mode The Multiprocessor Communication mode (MCPM) effectively reduces the number of incoming frames that have to be handled by the receiver in a system with multiple microcontrollers communicating via the same serial bus. This mode is enabled by writing a '1' to the MCPM bit in the Control B register (USARTn.CTRLB). In this mode, a dedicated bit in the frames is used to indicate whether the frame is an address or data frame type. If the receiver is set up to receive frames that contain five to eight data bits, the first Stop bit is used to indicate the frame type. If the receiver is set up for frames with nine data bits, the ninth bit is used to indicate frame type. When the frame type bit is one, the frame contains an address. When the frame type bit is zero, the frame is a data frame. If 5- to 8-bit character frames are used, the transmitter must be set to use two Stop bits, since the first Stop bit is used for indicating the frame type. If a particular slave MCU has been addressed, it will receive the following data frames as usual, while the other slave MCUs will ignore the frames until another address frame is received. 23.3.2.10.1 Using Multiprocessor Communication Mode The following procedure should be used to exchange data in Multiprocessor Communication mode (MPCM): 1. 2. 3. 4. 5. All slave MCUs are in Multiprocessor Communication mode. The master MCU sends an address frame, and all slaves receive and read this frame. Each slave MCU determines if it has been selected. The addressed MCU will disable MPCM and receive all data frames. The other slave MCUs will ignore the data frames. When the addressed MCU has received the last data frame, it must enable MPCM again and wait for a new address frame from the master. The process then repeats from step 2. Using any of the 5- to 8-bit character frame formats is impractical, as the receiver must change between using n and n+1 character frame formats. This makes full-duplex operation difficult since the transmitter and receiver must use the same character size setting. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 304 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.3.2.11 IRCOM Mode of Operation ® The IRCOM mode enables IrDA 1.4 compliant modulation and demodulation for baud rates up to 115.2 kbps. When IRCOM mode is enabled, Double-Speed mode cannot be used for the USART. 23.3.2.11.1 Overview A USART can be configured in infrared communication mode (IRCOM) that is IrDA compatible with baud rates up to 115.2 kbps. When enabled, the IRCOM mode enables infrared pulse encoding/decoding for the USART. A USART is set in IRCOM mode by writing 0x2 to the CMODE bits in USARTn.CTRLC. The data on the TX/RX pins are the inverted value of the transmitted/received infrared pulse. It is also possible to select an event channel from the Event System as an input for the IRCOM receiver. This will disable the RX input from the USART pin. For transmission, three pulse modulation schemes are available: • • • 3/16 of the baud rate period Fixed programmable pulse time based on the peripheral clock frequency Pulse modulation disabled 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. 23.3.2.11.2 Block Diagram Figure 23-13. Block Diagram IRCOM Event System Events Encoded RXD Pulse Decoding Decoded RXD USART Pulse Encoding RXD TXD Decoded RXD Encoded RXD 23.3.2.11.3 IRCOM and Event System The Event System can be used as the receiver input. This enables the IRCOM or USART input from the I/O pins or sources other than the corresponding RX pin. If the Event System input is enabled, input from the USART's RX pin is automatically disabled. Related Links 14. EVSYS - Event System 23.3.3 Events The USART can accept the following input events: • IREI - IrDA Event Input © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 305 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 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 23.5.12 EVCTRL 23.3.4 Interrupts Table 23-10. Available Interrupt Vectors and Sources For Devices With Up to 8 KB Flash Offset Name Vector Description Conditions 0x00 RXC Receive Complete Interrupt • • • There are unread data in the receive buffer (RXCIE) Receive of Start-of-Frame detected (RXSIE) Auto-Baud Error/ISFIF flag set (ABEIE) 0x02 DRE Data Register Empty Interrupt The transmit buffer is empty/ready to receive new data (DREIE). 0x04 TXC Transmit Complete Interrupt The entire frame in the Transmit Shift register has been shifted out and there are no new data in the transmit buffer (TXCIE). Table 23-11. Available Interrupt Vectors and Sources For Devices With More Than 8 KB Flash Offset Name Vector Description Conditions 0x00 RXC Receive Complete Interrupt • • • There are unread data in the receive buffer (RXCIE) Receive of Start-of-Frame detected (RXSIE) Auto-Baud Error/ISFIF flag set (ABEIE) 0x04 DRE Data Register Empty Interrupt The transmit buffer is empty/ready to receive new data (DREIE). 0x08 TXC Transmit Complete Interrupt The entire frame in the Transmit Shift register has been shifted 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 23.5.5 STATUS 23.5.6 CTRLA 23.3.5 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 306 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.4 Register Summary - USART Offset Name Bit Pos. 0x00 RXDATAL 7:0 0x01 RXDATAH 7:0 0x02 TXDATAL 7:0 0x03 TXDATAH 7:0 0x04 STATUS 7:0 RXCIF TXCIF DREIF RXSIF ISFIF 0x05 CTRLA 7:0 RXCIE TXCIE DREIE RXSIE LBME 0x06 CTRLB 7:0 RXEN TXEN 0x07 CTRLC 7:0 CMODE[1:0] 0x07 CTRLC 7:0 CMODE[1:0] 0x08 BAUD DATA[7:0] RXCIF BUFOVF FERR PERR DATA[8] DATA[7:0] DATA[8] SFDEN PMODE[1:0] ODME BDF ABEIE RXMODE[1:0] SBMODE 7:0 BAUD[7:0] BAUD[15:8] MPCM CHSIZE[2:0] UDORD 15:8 WFB RS485[1:0] UCPHA 0x0A Reserved 0x0B DBGCTRL 7:0 DBGRUN 0x0C EVCTRL 7:0 IREI 0x0D TXPLCTRL 7:0 0x0E RXPLCTRL 7:0 23.5 TXPL[7:0] RXPL[6:0] Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 307 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.1 Receiver Data Register Low Byte Name:  Offset:  Reset:  Property:  RXDATAL 0x00 0x00 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 Access R R R R Reset 0 0 0 R R R R 0 0 0 0 0 DATA[7:0] Bits 7:0 – DATA[7:0] Receiver Data Register © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 308 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.2 Receiver Data Register High Byte Name:  Offset:  Reset:  Property:  RXDATAH 0x01 0x00 - 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 2 1 0 RXCIF BUFOVF 5 4 3 FERR PERR DATA[8] Access R R R R R Reset 0 0 0 0 0 Bit 7 – RXCIF USART Receive Complete Interrupt Flag This flag is set when there is unread data in the receive buffer and cleared when the receive buffer is empty (i.e. does not contain any unread data). When the receiver is disabled, the receive buffer will be flushed and consequently, the RXCIF will become '0'. Bit 6 – BUFOVF Buffer Overflow The BUFOVF flag indicates data loss due to a receiver buffer full condition. This flag is set if a Buffer Overflow condition is detected. A Buffer Overflow occurs when the receive buffer is full (two characters), it is a new character waiting in the Receive Shift register, and a new Start bit is detected. This flag is valid until the receive buffer (USARTn.RXDATAL) is read. This flag is not used in Master SPI mode of operation. Bit 2 – FERR Frame Error The FERR flag indicates the state of the first Stop bit of the next readable frame stored in the receive buffer. The bit is set if the received character had a Frame Error (i.e. when the first Stop bit was '0' and cleared when the Stop bit of the received data is '1'. This bit is valid until the receive buffer (USARTn.RXDATAL) is read. The FERR is not affected by the SBMODE bit in USARTn.CTRLC since the receiver ignores all, except for the first Stop bit. This flag is not used in Master SPI mode of operation. Bit 1 – PERR Parity Error If parity checking is enabled and the next character in the receive buffer has a Parity Error this flag is set. If Parity Check is not enabled the PERR will always be read as '0'. This bit is valid until the receive buffer (USARTn.RXDATAL) is read. For details on parity calculation refer to 23.3.2.2.1 Parity. If USART is set to LINAUTO mode, this bit will be a Parity Check of the protected identifier field and will be valid when DATA[8] in USARTn.RXDATAH reads low. This flag is not used in Master SPI mode of operation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 309 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Bit 0 – DATA[8] Receiver Data Register When USART receiver is set to LINAUTO mode, this bit indicates if the received data is within the response space of a LIN frame. If the received data is the protected identifier field, this bit will be read as '0'. Otherwise, the bit will be read as '1'. For Receiver mode other than LINAUTO mode, DATA[8] holds the ninth data bit in the received character when operating with serial frames with nine data bits. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 310 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.3 Transmit Data Register Low Byte Name:  Offset:  Reset:  Property:  TXDATAL 0x02 0x00 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DATA[7:0] Transmit Data Register © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 311 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.4 Transmit Data Register High Byte Name:  Offset:  Reset:  Property:  TXDATAH 0x03 0x00 - 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 Bit 0 – DATA[8] Transmit Data Register This bit is used when CHSIZE=9BIT in USARTn.CTRLC. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 312 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.5 USART Status Register Name:  Offset:  Reset:  Property:  Bit STATUS 0x04 0x00 - 7 6 5 4 3 1 0 RXCIF TXCIF DREIF RXSIF ISFIF 2 BDF WFB Access R R/W R R/W R/W R/W R/W Reset 0 0 0 0 0 0 0 Bit 7 – RXCIF USART Receive Complete Interrupt Flag This flag is set to ‘1’ when there is unread data in the receive buffer and cleared when the receive buffer is empty (i.e. does not contain any unread data). When the receiver is disabled, the receive buffer will be flushed and consequently, the RXCIF will become '0'. When interrupt-driven data reception is used, the receive complete interrupt routine must read the received data from RXDATA in order to clear the RXCIF. If not, a new interrupt will occur directly after the return from the current interrupt. Bit 6 – TXCIF USART Transmit Complete Interrupt Flag This flag is set when the entire frame in the Transmit Shift register has been shifted out and there are no new data in the transmit buffer (TXDATA). This flag is automatically cleared when the transmit complete interrupt vector is executed. The flag can also be cleared by writing a ‘1’ to its bit location. Bit 5 – DREIF USART Data Register Empty Flag The DREIF indicates if the transmit buffer (TXDATA) is ready to receive new data. The flag is set to ‘1’ when the transmit buffer is empty and is ‘0’ when the transmit buffer contains data to be transmitted that has not yet been moved into the Shift register. DREIF is set after a Reset to indicate that the transmitter is ready. Always write this bit to ‘0’ when writing the STATUS register. DREIF is cleared to ‘0’ by writing TXDATAL. When interrupt-driven data transmission is used, the Data Register Empty interrupt routine must either write new data to TXDATA in order to clear DREIF or disable the Data Register Empty interrupt. If not, a new interrupt will occur directly after the return from the current interrupt. Bit 4 – RXSIF USART Receive Start Interrupt Flag The RXSIF flag indicates a valid Start condition on RxD line. The flag is set when the system is in standby modes and a high (IDLE) to low (START) valid transition is detected on the RxD line. If the start detection is not enabled, the RXSIF will always be read as '0'. This flag can only be cleared by writing a ‘1’ to its bit location. This flag is not used in the Master SPI mode operation. Bit 3 – ISFIF Inconsistent Sync Field Interrupt Flag This bit is set when the auto-baud is enabled and the sync field bit time is too fast or too slow to give a valid baud setting. It will also be set when USART is set to LINAUTO mode and the SYNC character differ from data value 0x55. Writing a ‘1’ to this bit will clear the flag and bring the USART back to Idle state. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 313 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Bit 1 – BDF Break Detected Flag This bit is intended for USART configured to LINAUTO receive mode. The break detector has a fixed threshold of 11 bits low for a Break to be detected. The BDF bit is set after a valid BREAK and SYNC character is detected. The bit is automatically cleared when next data is received. The bit will behave identically when USART is set to GENAUTO mode. In NORMAL or CLK2X receive mode, the BDF bit is unused. This bit is cleared by writing a ‘1’ to it. Bit 0 – WFB Wait For Break Writing this bit to ‘1’ will register the next low and high transition on RxD line as a Break character. This can be used to wait for a Break character of arbitrary width. Combined with USART set to GENAUTO mode, this allows the user to set any BAUD rate through BREAK and SYNC as long as it falls within the valid range of the USARTn.BAUD register. This bit will always read ‘0’. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 314 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.6 Control A Name:  Offset:  Reset:  Property:  Bit CTRLA 0x05 0x00 - 7 6 5 4 3 2 RXCIE TXCIE DREIE RXSIE LBME ABEIE R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Access Reset 1 0 RS485[1:0] Bit 7 – RXCIE Receive Complete Interrupt Enable The bit enables the Receive Complete Interrupt (interrupt vector RXC). The enabled interrupt will be triggered when RXCIF in the USARTn.STATUS register is set. Bit 6 – TXCIE Transmit Complete Interrupt Enable This bit enables the Transmit Complete Interrupt (interrupt vector TXC). The enabled interrupt will be triggered when the TXCIF in the USARTn.STATUS register is set. Bit 5 – DREIE Data Register Empty Interrupt Enable This bit enables the Data Register Empty Interrupt (interrupt vector DRE). The enabled interrupt will be triggered when the DREIF in the USART.STATUS register is set. Bit 4 – RXSIE Receiver Start Frame Interrupt Enable Writing a '1' to this bit enables the Start Frame Detector to generate an interrupt on interrupt vector RXC when a start-of-frame condition is detected. Bit 3 – LBME Loop-back Mode Enable Writing this bit to '1' enables an internal connection between the TxD and RxD pin. Bit 2 – ABEIE Auto-baud Error Interrupt Enable Writing this bit to '1' enables the auto-baud error interrupt on interrupt vector RXC. The enabled interrupt will trigger for conditions where the ISFIF flag is set. Bits 1:0 – RS485[1:0] RS-485 Mode These bits enable the RS-485 and select the operation mode. Value 0x0 0x1 0x2 0x3 Name Description OFF Disabled. EXT Enables RS-485 mode with control of an external line driver through a dedicated Transmit Enable (TE) pin. INT Enables RS-485 mode with control of the internal USART transmitter. Reserved. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 315 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.7 Control B Name:  Offset:  Reset:  Property:  Bit Access Reset CTRLB 0x06 0x00 - 7 6 4 3 RXEN TXEN 5 SFDEN ODME 2 1 R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 RXMODE[1:0] 0 MPCM Bit 7 – RXEN Receiver Enable Writing this bit to ‘1’ enables the USART receiver. The receiver will override normal port operation for the RxD pin when enabled. Disabling the receiver will flush the receive buffer invalidating the FERR, BUFOVF, and PERR flags. In GENAUTO and LINAUTO mode, disabling the receiver will reset the autobaud detection logic. Bit 6 – TXEN Transmitter Enable Writing this bit to ‘1’ enables the USART transmitter. The transmitter will override normal port operation for the TxD pin when enabled. Disabling the transmitter (writing TXEN to '0') will not become effective until ongoing and pending transmissions are completed (i.e. when the Transmit Shift register and Transmit Buffer register does not contain data to be 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. Bit 4 – SFDEN Start Frame Detection Enable Writing this bit to ‘1’ enables the USART Start Frame Detection mode. The Start Frame detector is able to wake up the system from Idle or Standby Sleep modes when a high (IDLE) to low (START) transition is detected on the RxD line. Bit 3 – ODME Open Drain Mode Enable Writing this bit to ‘1’ makes the TxD pin to have open-drain functionality. A pull-up resistor is needed to prevent the line from floating when a logic '1' is output to the TxD pin. Bits 2:1 – RXMODE[1:0] Receiver Mode In CLK2X mode, the divisor of the baud rate divider will be reduced from 16 to 8 effectively doubling the transfer rate for asynchronous communication modes. For synchronous operation, the CLK2X mode has no effect and RXMODE should always be written to '0'. RXMODE must be '0' when the USART Communication mode is configured to IRCOM. Setting RXMODE to GENAUTO enables generic autobaud where the SYNC character is valid when eight low and high bits have been registered. In this mode, any SYNC character that gives a valid BAUD rate will be accepted. In LINAUTO mode the SYNC character is constrained and found valid if every two bits falls within 32 ±6 baud samples of the internal baud rate and match data value 0x55. The GENAUTO and LINAUTO mode is only supported for USART operated in Asynchronous Slave mode. Value 0x0 0x1 Name NORMAL CLK2X © 2018 Microchip Technology Inc. Description Normal USART mode, Standard Transmission Speed Normal USART mode, Double Transmission Speed Datasheet Preliminary DS40002030A-page 316 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Value 0x2 0x3 Name GENAUTO LINAUTO Description Generic Auto-baud mode LIN Constrained Auto-baud mode Bit 0 – MPCM Multi-Processor Communication Mode Writing a ‘1’ to this bit enables the Multi-Processor Communication mode: the USART receiver ignores all the incoming frames that do not contain address information. The transmitter is unaffected by the MPCM setting. For more detailed information see 23.3.2.10 Multiprocessor Communication Mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 317 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.8 Control C - Async Mode Name:  Offset:  Reset:  Property:  CTRLC 0x07 0x03 - 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 CMODE[1:0] Access Reset 4 PMODE[1:0] 3 2 SBMODE 1 0 CHSIZE[2:0] R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 1 1 Bits 7:6 – CMODE[1:0] USART Communication Mode Writing these bits select the Communication mode of the USART. Writing a 0x3 to these bits alters the available bit fields in this register, see Control C - Master SPI Mode. Value 0x0 0x1 0x2 0x3 Name ASYNCHRONOUS SYNCHRONOUS IRCOM MSPI Description Asynchronous USART Synchronous USART Infrared Communication Master SPI Bits 5:4 – PMODE[1:0] Parity Mode Writing these bits enable and select the type of parity generation. When enabled, the transmitter will automatically generate and send the parity of the transmitted data bits within each frame. The receiver will generate a parity value for the incoming data, compare it to the PMODE setting, and set the Parity Error flag (PERR) in the STATUS register (USARTn.STATUS) if a mismatch is detected. Value 0x0 0x1 0x2 0x3 Name DISABLED EVEN ODD Description Disabled Reserved Enabled, Even Parity Enabled, Odd Parity Bit 3 – SBMODE Stop Bit Mode Writing this bit selects the number of Stop bits to be inserted by the transmitter. The receiver ignores this setting. Value 0 1 Description 1 Stop bit 2 Stop bits © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 318 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... Bits 2:0 – CHSIZE[2:0] Character Size Writing these bits select the number of data bits in a frame. The receiver and transmitter use the same setting. For 9BIT character size, the order of which byte to read or write first, low or high byte of RXDATA or TXDATA is selectable. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name 5BIT 6BIT 7BIT 8BIT 9BITL 9BITH © 2018 Microchip Technology Inc. Description 5-bit 6-bit 7-bit 8-bit Reserved Reserved 9-bit (Low byte first) 9-bit (High byte first) Datasheet Preliminary DS40002030A-page 319 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.9 Control C - Master SPI Mode Name:  Offset:  Reset:  Property:  CTRLC 0x07 0x00 - 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 23.3.2.5 USART in Master SPI mode for a full description of the Master SPI mode operation. Bit 7 6 5 4 3 CMODE[1:0] Access Reset 2 1 UDORD UCPHA R/W R/W R/W R/W 0 0 0 0 0 Bits 7:6 – CMODE[1:0] USART Communication Mode Writing these bits select the communication mode of the USART. Writing a value different than 0x3 to these bits alters the available bit fields in this register, see Control C Async Mode. Value 0x0 0x1 0x2 0x3 Name ASYNCHRONOUS SYNCHRONOUS IRCOM MSPI Description Asynchronous USART Synchronous USART Infrared Communication Master SPI Bit 2 – UDORD Data Order Writing this bit selects the frame format. The receiver and transmitter use the same setting. Changing the setting of UDORD will corrupt all ongoing communication for both the receiver and the transmitter. Value 0 1 Description MSB of the data word is transmitted first LSB of the data word is transmitted first Bit 1 – UCPHA Clock Phase The UCPHA bit setting determines if data is sampled on the leading (first) edge or tailing (last) edge of XCKn. Refer to the 23.3.2.1.5 Master SPI Mode Clock Generation for details. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 320 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.10 Baud Register Name:  Offset:  Reset:  Property:  BAUD 0x08 0x00 - 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 23-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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 15:8 – BAUD[15:8] USART Baud Rate High Byte These bits hold the MSB of the 16-bit Baud register. Bits 7:0 – BAUD[7:0] USART Baud Rate Low Byte These bits hold the LSB of the 16-bit Baud register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 321 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.11 Debug Control Register Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x0B 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Debug Run Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 322 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.12 IrDA Control Register Name:  Offset:  Reset:  Property:  Bit 7 EVCTRL 0x0C 0x00 - 6 5 4 3 2 1 0 IREI Access R/W Reset 0 Bit 0 – IREI IrDA Event Input Enable This bit enables the event source for the IRCOM Receiver. If event input is selected for the IRCOM Receiver, the input from the USART’s RX pin is automatically disabled. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 323 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.13 IRCOM Transmitter Pulse Length Control Register Name:  Offset:  Reset:  Property:  Bit 7 TXPLCTRL 0x0D 0x00 - 6 5 4 3 2 1 0 TXPL[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TXPL[7:0] Transmitter Pulse Length The 8-bit value sets the pulse modulation scheme for the transmitter. Setting this register will have effect only if IRCOM mode is selected by a USART. By leaving this register value to '0', 3/16 of the baud rate period pulse modulation is used. Setting this value from 1 to 254 will give a fixed pulse length coding. The 8-bit value sets the number of system clock periods for the pulse. The start of the pulse will be synchronized with the rising edge of the baud rate clock. Setting the value to 255 (0xFF) will disable pulse coding, letting the RX and TX signals pass through the IRCOM module unaltered. This enables other features through the IRCOM module, such as half-duplex USART, Loop-back testing, and USART RX input from an event channel. TXPL must be configured before the USART transmitter is enabled (TXEN). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 324 ATtiny807/1607 USART - Universal Synchronous and Asynchrono... 23.5.14 IRCOM Receiver Pulse Length Control Register Name:  Offset:  Reset:  Property:  Bit 7 RXPLCTRL 0x0E 0x00 - 6 5 4 3 2 1 0 RXPL[6:0] Access Reset R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 Bits 6:0 – RXPL[6:0] Receiver Pulse Length The 8-bit value sets the filter coefficient for the IRCOM transceiver. Setting this register will only have effect if IRCOM mode is selected by a USART. By leaving this register value to '0', filtering is disabled. Setting this value between 0x01 and 0xFF will enable filtering, where x+1 equal samples are required for the pulse to be accepted. RXPL must be configured before USART receiver is enabled (RXEN). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 325 ATtiny807/1607 SPI - Serial Peripheral Interface 24. SPI - Serial Peripheral Interface 24.1 Features • • • • • • • • 24.2 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 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 24.2.1 Block Diagram © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 326 ATtiny807/1607 SPI - Serial Peripheral Interface 24.2.1 Block Diagram Figure 24-1. SPI Block Diagram MASTER SLAVE Transmit Data Register (DATA) Transmit Data Register (DATA) Transmit Buffer Register Transmit Buffer Register LSb MSb MISO MISO MOSI MOSI 8-bit Shift Register MSb LSb 8-bit Shift Register SPI CLOCK GENERATOR SCK SCK SS SS First Receive Buffer Register First Receive Buffer Register Receive Buffer Register Second Receive Buffer Register Receive Data Register (DATA) Receive Data Register (DATA) 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 327 ATtiny807/1607 SPI - Serial Peripheral Interface 24.2.2 Signal Description Table 24-1. Signals in Master and Slave Mode Signal Description Pin Configuration Master Mode Slave Mode MOSI Master Out Slave In User defined Input MISO Master In Slave Out Input User defined SCK Slave clock User defined Input SS Slave select User defined Input When the SPI module is enabled, the data direction of the MOSI, MISO, SCK, and SS pins is overridden according to Table 24-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 24.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 24-2. SPI System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI Related Links 24.2.3.2 I/O Lines and Connections 24.2.3.5 Debug Operation 24.2.3.3 Interrupts 24.2.3.1 Clocks 24.2.3.1 Clocks This peripheral depends on the peripheral clock. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 328 ATtiny807/1607 SPI - Serial Peripheral Interface Related Links 10. CLKCTRL - Clock Controller 24.2.3.2 I/O Lines and Connections The SPI signals (MOSI, MISO, SCK, SS) are either inputs or outputs, depending on whether the SPI is in Master or Slave mode, as described in the Signal Description. Using the I/O lines requires configuration of the I/O pins as described in the Signal Description. Related Links 5. I/O Multiplexing and Considerations 16. PORT - I/O Pin Configuration 24.2.2 Signal Description 24.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 24.3.3 Interrupts 24.2.3.4 Events Not applicable. 24.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. 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 30. UPDI - Unified Program and Debug Interface 24.3 Functional Description 24.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). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 329 ATtiny807/1607 SPI - Serial Peripheral Interface 7. 8. Optional: To disable the multi-master support in Master mode, write ‘1’ to the Slave Select Disable bit (SSD) in SPIn.CTRLB. 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 24.2.2 Signal Description 24.3.2 Operation 24.3.2.1 Master Mode Operation When the SPI is configured in Master mode, a write to the SPIn.DATA register will start a new transfer. The SPI clock generator starts and the hardware shifts the eight bits into the selected slave. After the byte is shifted out the interrupt flag is set (IF flag in SPIn.INTFLAGS). The SPI master can operate in two modes, Normal and Buffered, as explained below. 24.3.2.1.1 SS Pin Functionality in Master Mode - Multi-Master Support In Master mode, the Slave Select Disable bit in Control Register B (SSD bit in SPIn.CTRLB) controls how the SPI uses the SS line. • • If SSD in SPIn.CTRLB is zero, the SPI can use the SS pin to transition from Master to Slave mode. This allows multiple SPI masters on the same SPI bus. If SSD in SPIn.CTRLB is one, the SPI does not use the SS pin, and it can be used as a regular I/O pin, or by other peripheral modules. If SSD in SPIn.CTRLB is zero and the SS is configured as an output pin, it can be used as a regular I/O pin, or by other peripheral modules, and will not affect the SPI system. If the SSD bit in SPIn.CTRLB is zero and the SS is configured as an input pin, the SS pin must be held high to ensure master SPI operation. A low level will be interpreted as another master is trying to take control of the bus. This will switch the SPI into Slave mode and the hardware of the SPI will perform the following actions: 1. The master bit in the SPI Control A Register (MASTER bit in SPIn.CTRLA) is cleared and the SPI system becomes a slave. The direction of the pins will be switched according to Table 24-3. 2. The interrupt flag in the Interrupt Flags register (IF flag in SPIn.INTFLAGS) will be set. If the interrupt is enabled and the global interrupts are enabled the interrupt routine will be executed. Table 24-3. Overview of the SS Pin Functionality when the SSD Bit in SPIn.CTRLB is Zero SS Configuration SS Pin-Level Description Input High Master activated (selected) Low Master deactivated, switched to Slave mode High Master activated (selected) Output Low 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 (the MASTER bit in SPIn.CTRLA) has to be © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 330 ATtiny807/1607 SPI - Serial Peripheral Interface 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. 24.3.2.1.2 Normal Mode In Normal mode, the system is single buffered in the transmit direction and double buffered in the receive direction. This influences the data handling in the following ways: 1. New bytes to be sent cannot be written to the Data register (SPIn.DATA) before the entire transfer has completed. A premature write will cause corruption of the transmitted data, and the hardware will set the Write Collision Flag (WRCOL flag in SPIn.INTFLAGS). 2. Received bytes are written to the First Receive Buffer register immediately after the transmission is completed. 3. The First Receive Buffer register has to be read before the next transmission is completed or data will be lost. This register is read by reading SPIn.DATA. 4. The Transmit Buffer register and Second Receive Buffer register are not used in Normal mode. After a transfer has completed, the Interrupt Flag will be set in the Interrupt Flags register (IF flag in SPI.INTFLAGS). This will cause the corresponding interrupt to be executed if this interrupt and the global interrupts are enabled. Setting the Interrupt Enable (IE) bit in the Interrupt Control register (SPIn.INTCTRL) will enable the interrupt. 24.3.2.1.3 Buffer Mode The Buffer mode is enabled by setting the BUFEN bit in SPIn.CTRLB. The BUFWR bit in SPIn.CTRLB has no effect in Master mode. In Buffer mode, the system is double buffered in the transmit direction and triple buffered in the receive direction. This influences the data handling the following ways: 1. New bytes to be sent can be written to the Data register (SPIn.DATA) as long as the Data Register Empty Interrupt Flag (DREIF) in the Interrupt Flag Register (SPIn.INTFLAGS) is set. The first write will be transmitted right away and the following write will go to the Transmit Buffer register. 2. A received byte is placed in a two-entry RX FIFO comprised of the First and Second Receive Buffer registers immediately after the transmission is completed. 3. The Data register is used to read from the RX FIFO. The RX FIFO must be read at least every second transfer to avoid any loss of data. If both the Shift register and the Transmit Buffer register becomes empty, the Transfer Complete Interrupt Flag (TXCIF) in the Interrupt Flags register (SPIn.INTFLAGS) will be set. This will cause the corresponding interrupt to be executed if this interrupt and the global interrupts are enabled. Setting the Transfer Complete Interrupt Enable (TXCIE) in the Interrupt Control register (SPIn.INTCTRL) enables the Transfer Complete Interrupt. 24.3.2.2 Slave Mode In Slave mode, the SPI peripheral receives SPI clock and Slave Select from a Master. Slave mode supports three operational modes: One unbuffered mode and two buffered modes. In Slave mode, the control logic will sample the incoming signal on the SCK pin. To ensure correct sampling of this clock signal, the minimum low and high periods must each be longer than two peripheral clock cycles. 24.3.2.2.1 SS Pin Functionality in Slave Mode The Slave Select (SS) pin plays a central role in the operation of the SPI. Depending on the mode the SPI is in and the configuration of this pin, it can be used to activate or deactivate devices. The SS pin is used as a Chip Select pin. In Slave mode, SS, MOSI, and SCK are always inputs. The behavior of the MISO pin depends on the configured data direction of the pin in the port peripheral and the value of SS: When SS is driven low, the SPI is activated and will respond to received SCK pulses by clocking data out on MISO if the user has © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 331 ATtiny807/1607 SPI - Serial Peripheral Interface configured the data direction of the MISO pin as an output. When SS is driven high the SPI is deactivated, meaning that it will not receive incoming data. If the MISO pin data direction is configured as an output, the MISO pin will be tristated. The following table shows an overview of the SS pin functionality. Table 24-4. Overview of the SS Pin Functionality SS Configuration Always Input SS Pin-Level Description MISO Pin Mode Port Direction = Output Port Direction = Input High Slave deactivated (deselected) Tri-stated Input Low Slave activated (selected) Output Input 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 stop sending and receiving immediately and 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. 24.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 332 ATtiny807/1607 SPI - Serial Peripheral Interface Figure 24-2. SPI Timing Diagram in Normal Mode (Buffer Mode Not Enabled) SS SCK Write DATA Write value 0x43 0x46 0x45 0x44 WRCOL IF Shift Register 0x43 Data sent 0x46 0x44 0x43 0x44 0x46 The figure above shows three transfers and one write to the DATA register while the SPI is busy with a transfer. This write will be ignored and the Write Collision Flag (WRCOL in SPIn.INTFLAGS) is set. 24.3.2.2.3 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 24-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 24-3. SPI Timing Diagram in Buffer Mode with BUFWR in SPIn.CTRLB Set to Zero SS SCK Write DATA Write value 0x43 0x44 0x45 0x46 DREIF TXCIF RXCIF Transmit Buffer Shift Register Data sent 0x43 Dummy Dummy 0x46 0x44 0x44 0x43 0x43 0x44 0x46 0x46 All writes to the Data register goes to the Transmit Buffer register. The figure above shows that the value 0x43 is written to the Data register, but it is not immediately transferred to the shift register so the first byte sent will be a dummy byte. The value of the dummy byte is whatever was in the shift register at the time, usually the last received byte. After the first dummy transfer is completed the value 0x43 is transferred to the Shift register. Then 0x44 is written to the Data register and goes to the Transmit Buffer register. A new transfer is started and 0x43 will be sent. The value 0x45 is written to the Data register, but the Transmit Buffer register is not updated since it is already full containing 0x44 and the Data Register Empty Interrupt Flag (DREIF in SPIn.INTFLAGS) is low. The value 0x45 will be lost. After the transfer, the value 0x44 is moved to the Shift register. During the next transfer, 0x46 is written to the Data register and © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 333 ATtiny807/1607 SPI - Serial Peripheral Interface 0x44 is sent out. After the transfer is complete, 0x46 is copied into the Shift register and sent out in the next transfer. The Data Register Empty Interrupt Flag (DREIF in SPIn.INTFLAGS) goes low every time the Transmit Buffer register is written and goes high after a transfer when the previous value in the Transmit Buffer register is copied into the Shift register. The Receive Complete Interrupt Flag (RXCIF in SPIn.INTFLAGS) is set one cycle after the Data Register Empty Interrupt Flag goes high. The Transfer Complete Interrupt Flag is set one cycle after the Receive Complete Interrupt Flag is set when both the value in the shift register and the Transmit Buffer register have been sent. Figure 24-4. SPI Timing Diagram in Buffer Mode with CTRLB.BUFWR Set to One SS SCK Write DATA Write value 0x43 0x44 0x45 0x46 DREIF TXCIF RXCIF Transmit Buffer Shift Register Data sent 0x46 0x44 0x43 0x43 0x46 0x44 0x43 0x44 0x46 All writes to the Data register goes to the transmit buffer. The figure above shows that the value 0x43 is written to the Data register and since the Slave Select pin is high it is copied to the Shift register the next cycle. Then the next write (0x44) will go to the Transmit Buffer register. During the first transfer, the value 0x43 will be shifted out. In the figure, the value 0x45 is written to the Data register, but the Transmit Buffer register is not updated since the Data Register Empty Interrupt Flag is low. After the transfer is completed, the value 0x44 from the Transmit Buffer register is copied over to the Shift register. The value 0x46 is written to the Transmit Buffer register. During the next two transfers, 0x44 and 0x46 are shifted out. The flags behave the same as with Buffer mode Wait for Receive Bit (BUFWR in SPIn.CTRLB) set to zero. 24.3.2.3 Data Modes There are four combinations of the SCK phase and polarity with respect to serial data. The desired combination is selected by writing to the MODE bits in the Control B register (SPIn.CTRLB). The SPI data transfer formats are shown below. Data bits are shifted out and latched in on opposite edges of the SCK signal, ensuring sufficient time for data signals to stabilize. The leading edge is the first clock edge of a clock cycle. The trailing edge is the last clock edge of a clock cycle. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 334 ATtiny807/1607 SPI - Serial Peripheral Interface Figure 24-5. SPI Data Transfer Modes 1 2 3 4 5 6 7 8 MISO 1 2 3 4 5 6 7 8 MOSI 1 2 3 4 5 6 7 8 SPI Mode 0 Cycle # SS SCK sampling SPI Mode 1 Cycle # 1 2 3 4 5 6 7 8 MISO 1 2 3 4 5 6 7 8 MOSI 1 2 3 4 5 6 7 8 SS SCK sampling SPI Mode 2 Cycle # 1 2 3 4 5 6 7 8 MISO 1 2 3 4 5 6 7 8 MOSI 1 2 3 4 5 6 7 8 SS SCK sampling SPI Mode 3 Cycle # 24.3.3 1 2 3 4 5 6 7 8 MISO 1 2 3 4 5 6 7 8 MOSI 1 2 3 4 5 6 7 8 SS SCK sampling Interrupts Table 24-5. Available Interrupt Vectors and Sources Offset Name Vector Description 0x00 SPI SPI interrupt © 2018 Microchip Technology Inc. Conditions • • • SSI: Slave Select Trigger Interrupt DRE: Data Register Empty Interrupt TXC: Transfer Complete Interrupt Datasheet Preliminary DS40002030A-page 335 ATtiny807/1607 SPI - Serial Peripheral Interface Offset Name Vector Description Conditions • RXC: Receive Complete Interrupt 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 24.3.4 Sleep Mode Operation The SPI will continue working in Idle Sleep mode. When entering any deeper sleep mode, an active transaction will be stopped. Related Links 11. SLPCTRL - Sleep Controller 24.3.5 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 336 ATtiny807/1607 SPI - Serial Peripheral Interface 24.4 Register Summary - SPI Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 BUFEN BUFWR 0x02 INTCTRL 7:0 RXCIE TXCIE 0x03 INTFLAGS 7:0 RXCIF/IF 0x04 DATA 7:0 24.5 DORD TXCIF/ WRCOL MASTER CLK2X PRESC[1:0] DREIE SSIE IE DREIF SSIF BUFOVF SSD ENABLE MODE[1:0] DATA[7:0] Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 337 ATtiny807/1607 SPI - Serial Peripheral Interface 24.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLA 0x00 0x00 - 6 5 4 DORD MASTER CLK2X 3 2 1 R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 PRESC[1:0] 0 ENABLE Bit 6 – DORD Data Order Value 0 1 Description The MSB of the data word is transmitted first The LSB of the data word is transmitted first Bit 5 – MASTER Master/Slave Select This bit selects the desired SPI mode. If SS is configured as input and driven low while this bit is ’1’, this bit is cleared, and the IF flag in SPIn.INTFLAGS is set. The user has to write MASTER=1 again to re-enable SPI Master mode. This behavior is controlled by the Slave Select Disable bit (SSD) in SPIn.CTRLB. Value 0 1 Description SPI Slave mode selected SPI Master mode selected Bit 4 – CLK2X Clock Double When this bit is written to ’1’ the SPI speed (SCK frequency, after internal prescaler) is doubled in Master mode. Value 0 1 Description SPI speed (SCK frequency) is not doubled SPI speed (SCK frequency) is doubled in Master mode Bits 2:1 – PRESC[1:0] Prescaler This bit field controls the SPI clock rate configured in Master mode. These bits have no effect in Slave mode. The relationship between SCK and the peripheral clock frequency (fCLK_PER) is shown below. The output of the SPI prescaler can be doubled by writing the CLK2X bit to ’1’. Value 0x0 0x1 0x2 0x3 Name DIV4 DIV16 DIV64 DIV128 Description CLK_PER/4 CLK_PER/16 CLK_PER/64 CLK_PER/128 Bit 0 – ENABLE SPI Enable © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 338 ATtiny807/1607 SPI - Serial Peripheral Interface Value 0 1 Description SPI is disabled SPI is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 339 ATtiny807/1607 SPI - Serial Peripheral Interface 24.5.2 Control B Name:  Offset:  Reset:  Property:  Bit CTRLB 0x01 0x00 - 7 6 BUFEN BUFWR SSD R/W R/W R/W R/W R/W 0 0 0 0 0 Access Reset 5 4 3 2 1 0 MODE[1:0] Bit 7 – BUFEN Buffer Mode Enable Writing this bit to '1' enables Buffer mode, meaning two buffers in receive direction, one buffer in transmit direction, and separate interrupt flags for both transmit complete and receive complete. Bit 6 – BUFWR Buffer Mode Wait for Receive When writing this bit to '0' the first data transferred will be a dummy sample. Value 0 1 Description One SPI transfer must be completed before the data is copied into the Shift register. 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. Bit 2 – SSD Slave Select Disable When this bit is set and when operating as SPI Master (MASTER=1 in SPIn.CTRLA), SS does not disable Master mode. Value 0 1 Description Enable the Slave Select line when operating as SPI Master Disable the Slave Select line when operating as SPI Master Bits 1:0 – MODE[1:0] Mode These bits select the Transfer mode. The four combinations of SCK phase and polarity with respect to the serial data are shown in the table below. These bits decide whether the first edge of a clock cycle (leading edge) is rising or falling and whether data setup and sample occur on the leading or trailing edge. When the leading edge is rising, the SCK signal is low when idle, and when the leading edge is falling, the SCK signal is high when idle. Value 0x0 Name 0 0x1 1 0x2 2 0x3 3 © 2018 Microchip Technology Inc. Description Leading edge: Rising, sample Trailing edge: Falling, setup Leading edge: Rising, setup Trailing edge: Falling, sample Leading edge: Falling, sample Trailing edge: Rising, setup Leading edge: Falling, setup Trailing edge: Rising, sample Datasheet Preliminary DS40002030A-page 340 ATtiny807/1607 SPI - Serial Peripheral Interface Related Links 24.3.2.3 Data Modes © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 341 ATtiny807/1607 SPI - Serial Peripheral Interface 24.5.3 Interrupt Control Name:  Offset:  Reset:  Property:  Bit Access Reset INTCTRL 0x02 0x00 - 7 6 5 4 RXCIE TXCIE DREIE SSIE 3 2 1 IE 0 R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 7 – RXCIE Receive Complete Interrupt Enable In Buffer mode, this bit enables the receive complete interrupt. The enabled interrupt will be triggered when the RXCIF flag in the SPIn.INTFLAGS register is set. In the Non-Buffer mode this bit is zero. Bit 6 – TXCIE Transfer Complete Interrupt Enable In Buffer mode, this bit enables the transfer complete interrupt. The enabled interrupt will be triggered when the TXCIF flag in the SPIn.INTFLAGS register is set. In the Non-Buffer mode, this bit is zero. Bit 5 – DREIE Data Register Empty Interrupt Enable In Buffer mode, this bit enables the data register empty interrupt. The enabled interrupt will be triggered when the DREIF flag in the SPIn.INTFLAGS register is set. In the Non-Buffer mode, this bit is zero. Bit 4 – SSIE Slave Select Trigger Interrupt Enable In Buffer mode, this bit enables the Slave Select interrupt. The enabled interrupt will be triggered when the SSIF flag in the SPIn.INTFLAGS register is set. In the Non-Buffer mode, this bit is zero. Bit 0 – IE Interrupt Enable This bit enables the SPI interrupt when the SPI is not in Buffer mode. The enabled interrupt will be triggered when RXCIF/IF is set in the SPIn.INTFLAGS register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 342 ATtiny807/1607 SPI - Serial Peripheral Interface 24.5.4 Interrupt Flags Name:  Offset:  Reset:  Property:  Bit Access Reset INTFLAGS 0x03 0x00 - 7 6 5 4 RXCIF/IF TXCIF/WRCOL DREIF SSIF 3 2 1 BUFOVF 0 R/W R/W R/W R/W R/W 0 0 0 0 0 Bit 7 – RXCIF/IF Receive Complete Interrupt Flag/Interrupt Flag RXCIF: In Buffer mode, this flag is set when there is unread data in the receive buffer and cleared when the receive buffer is empty (i.e., does not contain any unread data). In the Non-Buffer mode, this bit does not have any effect. When interrupt-driven data reception is used, the receive complete interrupt routine must read the received data from SPIn.DATA in order to clear RXCIF. If not, a new interrupt will occur directly after the return from the current interrupt. This flag can also be cleared by writing a 1 to its bit location. IF: This flag is set when a serial transfer is complete and one byte is completely shifted in/out of the SPIn.DATA register. If SS is configured as input and is driven low when the SPI is in Master mode, this will also set this flag. IF is cleared by hardware when executing the corresponding interrupt vector. Alternatively, the IF flag can be cleared by first reading the SPIn.INTFLAGS register when IF is set, and then accessing the SPIn.DATA register. Bit 6 – TXCIF/WRCOL Transfer Complete Interrupt Flag/Write Collision Flag TXCIF: In Buffer mode, this flag is set when all the data in the transmit shift register has been shifted out and there is no new data in the transmit buffer (SPIn.DATA). The flag is cleared by writing a 1 to its bit location. In the Non-Buffer mode, this bit does not have any effect. WRCOL: The WRCOL flag is set if the SPIn.DATA register is written to before a complete byte has been shifted out. This flag is cleared by first reading the SPIn.INTFLAGS register when WRCOL is set, and then accessing the SPIn.DATA register. Bit 5 – DREIF Data Register Empty Interrupt Flag In Buffer mode, this flag indicates whether the transmit buffer (SPIn.DATA) is ready to receive new data. The flag is 1 when the transmit buffer is empty and 0 when the transmit buffer contains data to be transmitted that has not yet been moved into the Shift register. DREIF is set to '0' after a reset to indicate that the transmitter is ready. In the Non-Buffer mode, this bit is always 0. DREIF is cleared by writing SPIn.DATA. When interrupt-driven data transmission is used, the Data register empty interrupt routine must either write new data to SPIn.DATA in order to clear DREIF or disable the Data register empty interrupt. If not, a new interrupt will occur directly after the return from the current interrupt. Bit 4 – SSIF Slave Select Trigger Interrupt Flag In Buffer mode, this flag indicates that the SPI has been in Master mode and the SS line has been pulled low externally so the SPI is now working in Slave mode. The flag will only be set if the Slave Select © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 343 ATtiny807/1607 SPI - Serial Peripheral Interface 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. Bit 0 – BUFOVF Buffer Overflow This flag is only used in Buffer mode. This flag indicates data loss due to a receiver buffer full condition. This flag is set if a buffer overflow condition is detected. A buffer overflow occurs when the receive buffer is full (two characters) and a third byte has been received in the Shift register. If there is no transmit data the buffer overflow will not be set before the start of a new serial transfer. This flag is valid until the receive buffer (SPIn.DATA) is read. Always write this bit location to 0 when writing the SPIn.INTFLAGS register. In the Non-Buffer mode, this bit is always 0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 344 ATtiny807/1607 SPI - Serial Peripheral Interface 24.5.5 Data Name:  Offset:  Reset:  Property:  Bit 7 DATA 0x04 0x00 - 6 5 4 3 2 1 0 DATA[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DATA[7:0] SPI Data The SPIn.DATA register is used for sending and receiving data. Writing to the register initiates the data transmission, and the byte written to the register will be shifted out on the SPI output line. Reading this register in Buffer mode will read the second receive buffer and the contents of the first receive buffer will be moved to the second receive buffer. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 345 ATtiny807/1607 TWI - Two-Wire Interface 25. TWI - Two-Wire Interface 25.1 Features • • • • • • 25.2 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 timeouts in hardware – Independent timeouts 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 unlimited number of addresses Input Filter For Bus Noise Suppression 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 autotrigger operations and reduce software complexity. The slave module implements 7-bit address match and general address call recognition in hardware. 10bit 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, © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 346 ATtiny807/1607 TWI - Two-Wire Interface 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. 25.2.1 Block Diagram Figure 25-1. TWI Block Diagram Master BAUD TxDATA SCL 0 baud rate generator Slave TxDATA SCL hold low 0 SCL hold low shift register shift register SDA 0 0 RxDATA 25.2.2 ADDR/ADDRMASK RxDATA == Signal Description Signal Description Type SCL Serial clock line Digital I/O SDA Serial data line Digital I/O Related Links 5. I/O Multiplexing and Considerations 25.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 25-1. TWI System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT Events No - Debug Yes UPDI Related Links 25.2.3.1 Clocks 25.2.3.5 Debug Operation 25.2.3.2 I/O Lines and Connections © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 347 ATtiny807/1607 TWI - Two-Wire Interface 25.2.3.3 Interrupts 25.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 25.5.6 MBAUD 25.2.3.2 I/O Lines and Connections Using the I/O lines of the peripheral requires configuration of the I/O pins. 25.2.3.3 Interrupts Using the interrupts of this peripheral requires the interrupt controller to be configured first. 25.2.3.4 Events Not applicable. 25.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. This peripheral can be forced to operate with halted CPU by writing a '1' to the Debug Run bit (DBGRUN) in the Debug Control register of the peripheral (peripheral.DBGCTRL). When the CPU is halted in Debug mode and DBGRUN=1, reading/writing the DATA register will neither trigger a bus operation nor cause transmit and clear flags. 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 30. UPDI - Unified Program and Debug Interface 25.3 Functional Description 25.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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 348 ATtiny807/1607 TWI - Two-Wire Interface 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. 25.3.2 General TWI Bus Concepts The TWI provides a simple, bidirectional, two-wire communication bus consisting of a serial clock line (SCL) and a serial data line (SDA). The two lines are open-collector lines (wired-AND), and pull-up resistors (Rp) are the only external components needed to drive the bus. The pull-up resistors provide a high level on the lines when none of the connected devices are driving the bus. The TWI bus is a simple and efficient method of interconnecting multiple devices on a serial bus. A device connected to the bus can be a master or slave, where the master controls the bus and all communication. Figure 25-2 illustrates the TWI bus topology. Figure 25-2. TWI Bus Topology VCC RP RP TWI DEVICE #1 TWI DEVICE #2 TWI DEVICE #N 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 25-3 shows a TWI transaction. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 349 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-3. Basic TWI Transaction Diagram Topology for a 7-Bit Address Bus SDA SCL 6 ... 0 S 7 ... 0 ADDRESS S ADDRESS R/W R/W ACK DATA DATA A 7 ... 0 ACK A DATA P ACK/NACK A/A DATA P Direction Address Packet Data Packet #0 Data Packet #1 Transaction The master provides data on the bus The master or slave can provide data on the bus The slave provides data on the bus The master provides the clock signal for the transaction, but a device connected to the bus is allowed to stretch the low-level period of the clock to decrease the clock speed. 25.3.2.1 Start and Stop Conditions Two unique bus conditions are used for marking the beginning (Start) and end (Stop) of a transaction. The master issues a Start condition (S) by indicating a high-to-low transition on the SDA line while the SCL line is kept high. The master completes the transaction by issuing a Stop condition (P), indicated by a low-to-high transition on the SDA line while the SCL line is kept high. Figure 25-4. Start and Stop Conditions SDA SCL S P START Condition STOP 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). 25.3.2.2 Bit Transfer As illustrated in Figure 25-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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 350 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-5. Data Validity SDA SCL DATA Valid Change 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. 25.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. 25.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. 25.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 25-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 25-6. Master Write Transaction Transaction Data Packet Address Packet S ADDRESS W A DATA A DATA A/A P 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 351 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-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 25-7. Master Read Transaction Transaction Data Packet Address Packet S R ADDRESS A DATA A DATA A P 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 25-8 illustrates a combined transaction. A combined transaction consists of several read and write transactions separated by repeated Start conditions (Sr). Figure 25-8. Combined Transaction Transaction Address Packet #1 S ADDRESS R/W Address Packet #2 N Data Packets A DATA A/A Sr ADDRESS R/W M Data Packets A DATA A/A P Direction Direction 25.3.2.6 Clock and Clock Stretching All devices connected to the bus are allowed to stretch the low period of the clock to slow down the overall clock frequency or to insert Wait states while processing data. A device that needs to stretch the clock can do this by holding/forcing the SCL line low after it detects a low level on the line. Three types of clock stretching can be defined, as shown in Figure 25-9. Figure 25-9. Clock Stretching (1) SDA bit 7 bit 6 bit 0 ACK/NACK SCL S Wakeup clock stretching Periodic clock stretching Random clock stretching Note:  Clock stretching is not supported by all I2C slaves and masters. If a slave device is in Sleep mode and a Start condition is detected, the clock stretching normally works during the wake-up period. For AVR devices, the clock stretching will be either directly before or after the ACK/NACK bit, as AVR devices do not need to wake-up for transactions that are not addressed to it. A slave device can slow down the bus frequency by stretching the clock periodically on a bit level. This allows the slave to run at a lower system clock frequency. However, the overall performance of the bus will be reduced accordingly. Both the master and slave device can randomly stretch the clock on a byte level basis before and after the ACK/NACK bit. This provides time to process incoming or prepare outgoing data or perform other time-critical tasks. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 352 ATtiny807/1607 TWI - Two-Wire Interface 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. 25.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 multimaster 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 25-10. TWI Arbitration DEVICE1 Loses arbitration DEVICE1_SDA DEVICE2_SDA SDA (wired-AND) bit 7 bit 6 bit 5 bit 4 SCL S Figure 25-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. 25.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 25-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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 353 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-11. Clock Synchronization Low Period Count Wait State High Period Count 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. 25.3.3 TWI Bus State Logic The bus state logic continuously monitors the activity on the TWI bus lines when the master is enabled. It continues to operate in all Sleep modes, including power-down. The bus state logic includes Start and Stop condition detectors, collision detection, inactive bus time-out detection, and a bit counter. These are used to determine the bus state. The software can get the current bus state by reading the Bus State bits in the master STATUS register. The bus state can be unknown, idle, busy, or owner, and is determined according to the state diagram shown in Figure 25-12. The values of the Bus State bits according to state, are shown in binary in the figure below. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 354 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-12. Bus State, State Diagram RESET UNKNOWN (0b00) P + Timeout S IDLE BUSY P + Timeout (0b01) Sr (0b11) Command P Write ADDRESS (S) OWNER Arbitration Lost (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 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 timeout is enabled, the bus state will change to idle on the occurrence of a timeout. 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 timeout is enabled, the bus state will change from busy to idle on the occurrence of a timeout. 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). 25.3.4 Operation 25.3.4.1 Electrical Characteristics The TWI module in AVR devices follows the electrical specifications and timing of I2C bus and SMBus. These specifications are not 100% compliant, and so to ensure correct behavior, the inactive bus time-out period should be set in TWI Master mode. Refer to 25.3.4.2 TWI Master Operation for more details. 25.3.4.2 TWI Master Operation The TWI master is byte-oriented, with an optional interrupt after each byte. There are separate interrupt flags for master write and master read. Interrupt flags can also be used for a polled operation. There are © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 355 ATtiny807/1607 TWI - Two-Wire Interface 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 25-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 25-13. TWI Master Operation APPLICATION MASTER WRITE INTERRUPT + HOLD M1 M3 M2 BUSY P IDLE S Wait for IDLE SW M4 ADDRESS R/W BUSY SW R/W A SW P W A SW Sr M2 IDLE M3 BUSY M4 A/A DATA SW SW M1 BUSY Driver software MASTER READ INTERRUPT + HOLD The master provides data on the bus SW Slave provides data on the bus A A/A BUSY P Bus state Mn A/A Sr Diagram connections IDLE M4 M2 M3 A/A R A DATA The number of interrupts generated is kept to a minimum by an automatic handling of most conditions. 25.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 356 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-14. SCL Timing RISE • • • • • • • • TLOW – Low period of SCL clock TSU;STO – Setup time for Stop condition TBUF – Bus free time between Stop and Start conditions THD;STA – Hold time (repeated) Start condition TSU;STA – Setup time for repeated Start condition THIGH is timed using the SCL high time count from TWI.MBAUD TRISE is determined by the bus impedance; for internal pull-ups. Refer to Electrical Characteristics. TFALL is determined by the open-drain current limit and bus impedance; can typically be regarded as zero. Refer to Electrical Characteristics for details. The SCL frequency is given by: �SCL = 1 �LOW + �HIGH + �RISE �SCL = �CLK_PER 10 + 2���� + �CLK_PER ⋅ �RISE The TWI.MBAUD value is used to time both SCL high and SCL low which gives the following formula of SCL frequency: 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. 25.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 357 ATtiny807/1607 TWI - Two-Wire Interface 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. 25.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. 25.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. 25.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 25-15. Quick Command Frame Format S Address R/W A P 25.3.4.3 TWI Slave Operation The TWI slave is byte-oriented with optional interrupts after each byte. There are separate slave data and address/stop interrupt flags. Interrupt flags can also be used for polled operation. There are dedicated status flags for indicating ACK/NACK received, clock hold, collision, bus error, and read/write direction. When an interrupt flag is set, the SCL line is forced low. This will give the slave time to respond or handle data, and will in most cases require software interaction. Figure 25-16 shows the TWI slave operation. The diamond-shaped symbols (SW) indicate where software interaction is required. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 358 ATtiny807/1607 TWI - Two-Wire Interface Figure 25-16. TWI Slave Operation SLAVE ADDRESS INTERRUPT S1 S3 S2 S A ADDRESS R SW P S2 Sr S3 DATA SW S1 P S2 Sr S3 A/A Driver software The master provides data on the bus Slave provides data on the bus Sn S1 A A SW SLAVE DATA INTERRUPT W SW Interrupt on STOP Condition Enabled SW A/A DATA SW A/A 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. 25.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 359 ATtiny807/1607 TWI - Two-Wire Interface 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. Case S4: STOP Condition Received When the Stop condition is received, the slave address/stop flag will be set, indicating that a Stop condition, and not an address match, occurred. 25.3.4.3.2 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. 25.3.4.3.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. 25.3.4.4 Smart Mode The TWI interface has a Smart mode that simplifies application code and minimizes the user interaction needed to adhere to the I2C protocol. For TWI Master, Smart mode accomplishes this by automatically sending an ACK as soon as data register TWI.MDATA is read. This feature is only active when the ACKACT bit in TWIn.MCTRLA register is set to ACK. If ACKACT is set to NACK, the TWI Master will not generate a NACK bit followed by reading the Data register. With Smart mode enabled for TWI Slave (SMEN bit in TWIn.SCTRLA), DIF (Data Interrupt Flag) will automatically be cleared if Data register (TWIn.SDATA) is read or written. 25.3.5 Events Not applicable. 25.3.6 Interrupts Table 25-2. Available Interrupt Vectors and Sources For Devices With Up to 8 KB Flash Offset Name Vector Description Conditions 0x00 Slave TWI Slave interrupt 0x02 Master TWI Master interrupt • • DIF: Data Interrupt Flag in 25.5.11 SSTATUS set APIF: Address or Stop Interrupt Flag in 25.5.11 SSTATUS set • • RIF: Read Interrupt Flag in 25.5.5 MSTATUS set WIF: Write Interrupt Flag in 25.5.5 MSTATUS set Table 25-3. Available Interrupt Vectors and Sources For Devices With More Than 8 KB Flash Offset Name Vector Description Conditions 0x00 Slave TWI Slave interrupt © 2018 Microchip Technology Inc. • DIF: Data Interrupt Flag in 25.5.11 SSTATUS set Datasheet Preliminary DS40002030A-page 360 ATtiny807/1607 TWI - Two-Wire Interface Offset Name Vector Description Conditions 0x04 Master TWI Master interrupt • APIF: Address or Stop Interrupt Flag in 25.5.11 SSTATUS set • • RIF: Read Interrupt Flag in 25.5.5 MSTATUS set WIF: Write Interrupt Flag in 25.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 25.3.7 Sleep Mode Operation The bus state logic and slave continue to operate in all Sleep modes, including Power-Down Sleep mode. If a slave device is in Sleep mode and a Start condition is detected, clock stretching is active during the wake-up period until the system clock is available. The master will stop operation in all Sleep modes. 25.3.8 Synchronization Not applicable. 25.3.9 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 361 ATtiny807/1607 TWI - Two-Wire Interface 25.4 Register Summary - TWI Offset Name Bit Pos. 0x00 CTRLA 7:0 SDASETUP SDAHOLD[1:0] 0x01 Reserved 0x02 DBGCTRL 7:0 0x03 MCTRLA 7:0 0x04 MCTRLB 7:0 0x05 MSTATUS 7:0 0x06 MBAUD 7:0 BAUD[7:0] 0x07 MADDR 7:0 ADDR[7:0] 0x08 MDATA 7:0 DATA[7:0] 0x09 SCTRLA 7:0 0x0A SCTRLB 7:0 DBGRUN RIEN RIF DIEN WIEN WIF APIEN QCEN CLKHOLD RXACK TIMEOUT[1:0] SMEN ACKACT MCMD[1:0] ARBLOST BUSERR BUSSTATE[1:0] PIEN PMEN SMEN ACKACT DIF APIF CLKHOLD RXACK ENABLE FLUSH 0x0B SSTATUS 7:0 0x0C SADDR 7:0 ADDR[7:0] 0x0D SDATA 7:0 DATA[7:0] 0x0E SADDRMASK 7:0 25.5 FMPEN COLL ADDRMASK[6:0] BUSERR ENABLE SCMD[1:0] DIR AP ADDREN Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 362 ATtiny807/1607 TWI - Two-Wire Interface 25.5.1 Control A Name:  Offset:  Reset:  Property:  Bit CTRLA 0x00 0x00 - 7 6 5 4 SDASETUP Access Reset 3 2 SDAHOLD[1:0] 1 0 FMPEN R/W R/W R/W R/W 0 0 0 0 Bit 4 – SDASETUP  SDA Setup Time By default, there are four clock cycles of setup time on SDA out signal while reading from the slave part of the TWI module. Writing this bit to '1' will change the setup time to eight clocks. Value 0 1 Name 4CYC 8CYC Description SDA setup time is four clock cycles SDA setup time is eight clock cycle Bits 3:2 – SDAHOLD[1:0]  SDA Hold Time Writing these bits selects the SDA hold time. Table 25-4. SDA Hold Time SDAHOLD[1:0] Nominal Hold Time Hold Time Range Across All Corners (ns) Description 0x0 OFF 0 Hold time off. 0x1 50 ns 36 - 131 Backward compatible setting. 0x2 300 ns 180 - 630 Meets SMBus specification under typical conditions. 0x3 500 ns 300 - 1050 Meets SMBus specification across all corners. Bit 1 – FMPEN  FM Plus Enable Writing these bits selects the 1 MHz bus speed (Fast mode plus, Fm+) for the TWI in default configuration. Value 0 1 Description Fm+ disabled Fm+ enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 363 ATtiny807/1607 TWI - Two-Wire Interface 25.5.2 Debug Control Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x02 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN  Debug Run Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 364 ATtiny807/1607 TWI - Two-Wire Interface 25.5.3 Master Control A Name:  Offset:  Reset:  Property:  Bit Access Reset MCTRLA 0x03 0x00 - 7 6 RIEN WIEN 5 QCEN 4 3 2 R/W R/W R/W R/W 0 0 0 0 1 0 SMEN ENABLE R/W R/W R/W 0 0 0 TIMEOUT[1:0] Bit 7 – RIEN Read Interrupt Enable Writing this bit to '1' enables interrupt on the Master Read Interrupt Flag (RIF) in the Master Status register (TWIn.MSTATUS). A TWI Master read interrupt would be generated only if this bit, the RIF, and the Global Interrupt Flag (I) in CPU.SREG are all '1'. Bit 6 – WIEN Write Interrupt Enable Writing this bit to '1' enables interrupt on the Master Write Interrupt Flag (WIF) in the Master Status register (TWIn.MSTATUS). A TWI Master write interrupt will be generated only if this bit, the WIF, and the Global Interrupt Flag (I) in CPU.SREG are all '1'. Bit 4 – QCEN Quick Command Enable Writing this bit to '1' enables Quick Command. When Quick Command is enabled, the corresponding interrupt flag is set immediately after the slave acknowledges the address. At this point, the software can either issue a Stop command or a repeated Start by writing either the Command bits (CMD) in the Master Control B register (TWIn.MCTRLB) or the Master Address register (TWIn.MADDR). Bits 3:2 – TIMEOUT[1:0] Inactive Bus Timeout Setting the inactive bus timeout (TIMEOUT) bits to a non-zero value will enable the inactive bus time-out supervisor. If the bus is inactive for longer than the TIMEOUT setting, the bus state logic will enter the Idle state. Value 0x0 0x1 0x2 0x3 Name DISABLED 50US 100US 200US Description Bus timeout disabled. I2C. 50 µs - SMBus (assume baud is set to 100 kHz) 100 µs (assume baud is set to 100 kHz) 200 µs (assume baud is set to 100 kHz) Bit 1 – SMEN Smart Mode Enable Writing this bit to '1' enables the Master Smart mode. When Smart mode is enabled, the acknowledge action is sent immediately after reading the Master Data (TWIn.MDATA) register. Bit 0 – ENABLE Enable TWI Master Writing this bit to '1' enables the TWI as master. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 365 ATtiny807/1607 TWI - Two-Wire Interface 25.5.4 Master Control B Name:  Offset:  Reset:  Property:  Bit MCTRLB 0x04 0x00 - 7 6 5 Access Reset 4 3 2 FLUSH ACKACT 1 0 R/W R/W R/W R/W 0 0 0 0 MCMD[1:0] Bit 3 – FLUSH Flush Writing a '1' to this bit generates a strobe for one clock cycle disabling and then enabling the master. Writing '0' has no effect. The purpose is to clear the internal state of master: For TWI master to transmit successfully, it is recommended to write the Master Address register (TWIn.MADDR) first and then the Master Data register (TWIn.MDATA). The peripheral will transmit invalid data if TWIn.MDATA is written before TWIn.MADDR. To avoid this invalid transmission, write '1' to this bit to clear both registers. Bit 2 – ACKACT Acknowledge Action This bit defines the master’s behavior under certain conditions defined by the bus protocol state and software interaction. The acknowledge action is performed when DATA is read, or when an execute command is written to the CMD bits. The ACKACT bit is not a flag or strobe, but an ordinary read/write accessible register bit. The default ACKACT for master read interrupt is “Send ACK” (0). For master write, the code will know that no acknowledge should be sent since it is itself sending data. Value 0 1 Description Send ACK Send NACK Bits 1:0 – MCMD[1:0] Command The master command bits are strobes. These bits are always read as zero. Writing to these bits triggers a master operation as defined by the table below. Table 25-5. Command Settings MCMD[1:0] DIR Description 0x0 X NOACT - No action 0x1 X REPSTART - Execute Acknowledge Action succeeded by repeated Start. 0x2 0 RECVTRANS - Execute Acknowledge Action succeeded by a byte read operation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 366 ATtiny807/1607 TWI - Two-Wire Interface MCMD[1:0] DIR Description 0x3 1 Execute Acknowledge Action (no action) succeeded by a byte send operation.(1) X STOP - Execute Acknowledge Action succeeded by issuing a Stop condition. 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 367 ATtiny807/1607 TWI - Two-Wire Interface 25.5.5 Master Status Name:  Offset:  Reset:  Property:  MSTATUS 0x05 0x00 - 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), Master Data register (TWIn.MDATA), or the Command bits (CMD) in the Master Control B register (TWIn.MCTRLB). Bit Access Reset 7 6 5 4 3 2 RIF WIF CLKHOLD RXACK ARBLOST BUSERR 1 0 R/W R/W R/W R R/W R/W R/W R/W 0 0 0 0 0 0 0 0 BUSSTATE[1:0] Bit 7 – RIF Read Interrupt Flag This bit is set to '1' when the master byte read operation is successfully completed (i.e., no arbitration lost or bus error occurred during the operation). The read operation is triggered by software reading DATA or writing to ADDR registers with bit ADDR[0] written to '1'. A slave device must have responded with an ACK to the address and direction byte transmitted by the master for this flag to be set. Writing a '1' to this bit will clear the RIF. However, normal use of the TWI does not require the flag to be cleared by this method. Clearing the RIF bit will follow the same software interaction as the CLKHOLD flag. The RIF flag can generate a master read interrupt (see the description of the RIEN control bit in the TWIn.MCTRLA register). Bit 6 – WIF Write Interrupt Flag This bit is set when a master transmit address or byte write is completed, regardless of the occurrence of a bus error or an arbitration lost condition. Writing a '1' to this bit will clear the WIF. However, normal use of the TWI does not require the flag to be cleared by this method. Clearing the WIF bit will follow the same software interaction as the CLKHOLD flag. The WIF flag can generate a master write interrupt (see the description of the WIEN control bit in the TWIn.MCTRLA register). Bit 5 – CLKHOLD Clock Hold If read as '1', this bit indicates that the master is currently holding the TWI clock (SCL) low, stretching the TWI clock period. Writing a '1' to this bit will clear the CLKHOLD flag. However, normal use of the TWI does not require the CLKHOLD flag to be cleared by this method, since the flag is automatically cleared when accessing several other TWI registers. The CLKHOLD flag can be cleared by: 1. 2. Writing a '1' to it. Writing to the TWIn.MADDR register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 368 ATtiny807/1607 TWI - Two-Wire Interface 3. 4. 5. Writing to the TWIn.MDATA register. Reading the TWIn.DATA register while the ACKACT control bits in TWIn.MCTRLB are set to either send ACK or NACK. Writing a valid command to the TWIn.MCTRLB register. Bit 4 – RXACK Received Acknowledge This bit is read-only and contains the most recently received Acknowledge bit from the slave. When read as zero, the most recent acknowledge bit from the slave was ACK. When read as one, the most recent acknowledge bit was NACK. Bit 3 – ARBLOST Arbitration Lost If read as '1' this bit indicates that the master has lost arbitration while transmitting a high data or NACK bit, or while issuing a Start or repeated Start condition (S/Sr) on the bus. Writing a '1' to it will clear the ARBLOST flag. However, normal use of the TWI does not require the flag to be cleared by this method. However, as for the CLKHOLD flag, clearing the ARBLOST flag is not required during normal use of the TWI. Clearing the ARBLOST bit will follow the same software interaction as the CLKHOLD flag. Given the condition where the bus ownership is lost to another master, the software must either abort operation or resend the data packet. Either way, the next required software interaction is in both cases to write to the TWIn.MADDR register. A write access to the TWIn.MADDR register will then clear the ARBLOST flag. Bit 2 – BUSERR Bus Error The BUSERR flag indicates that an illegal bus condition has occurred. An illegal bus condition is detected if a protocol violating Start (S), repeated Start (Sr), or Stop (P) is detected on the TWI bus lines. A Start condition directly followed by a Stop condition is one example of protocol violation. Writing a '1' to this bit will clear the BUSERR. However, normal use of the TWI does not require the BUSERR to be cleared by this method. A robust TWI driver software design will treat the bus error flag similarly to the ARBLOST flag, assuming the bus ownership is lost when the bus error flag is set. As for the ARBLOST flag, the next software operation of writing the TWIn.MADDR register will consequently clear the BUSERR flag. For bus error to be detected, the bus state logic must be enabled and the system frequency must be 4x the SCL frequency. Bits 1:0 – BUSSTATE[1:0] Bus State These bits indicate the current TWI bus state as defined in the table below. After a System Reset or reenabling, the TWI master bus state will be unknown. The change of bus state is dependent on bus activity. Writing 0x1 to the BUSSTATE bits forces the bus state logic into its Idle state. However, the bus state logic cannot be forced into any other state. When the master is disabled, the bus state is 'unknown'. Value 0x0 0x1 0x2 0x3 Name UNKNOWN IDLE OWNER BUSY © 2018 Microchip Technology Inc. Description Unknown bus state Bus is idle This TWI controls the bus The bus is busy Datasheet Preliminary DS40002030A-page 369 ATtiny807/1607 TWI - Two-Wire Interface 25.5.6 Master Baud Rate Name:  Offset:  Reset:  Property:  Bit 7 MBAUD 0x06 0x00 - 6 5 4 3 2 1 0 BAUD[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – BAUD[7:0] Baud Rate This bit field is used to derive the SCL high and low time and should be written while the master is disabled (ENABLE bit in TWIn.MCTRLA is '0'). For more information on how to calculate the frequency, see the section on Clock Generation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 370 ATtiny807/1607 TWI - Two-Wire Interface 25.5.7 Master Address Name:  Offset:  Reset:  Property:  Bit 7 MADDR 0x07 0x00 - 6 5 4 3 2 1 0 ADDR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – ADDR[7:0] Address When this bit field is written, a Start condition and slave address protocol sequence is initiated dependent on the bus state. If the bus state is unknown the Master Write Interrupt Flag (WIF) and Bus Error flag (BUSERR) in the Master Status register (TWIn.MSTATUS) are set and the operation is terminated. If the bus is busy the master awaits further operation until the bus becomes idle. When the bus is or becomes idle, the master generates a Start condition on the bus, copies the ADDR value into the Data Shift register (TWIn.MDATA) and performs a byte transmit operation by sending the contents of the Data register onto the bus. The master then receives the response (i.e., the Acknowledge bit from the slave). After completing the operation the bus clock (SCL) is forced and held low only if arbitration was not lost. The CLKHOLD bit in the Master Setup register (TWIn.MSETUP) is set accordingly. Completing the operation sets the WIF in the Master Status register (TWIn.MSTATUS). If the bus is already owned, a repeated Start (Sr) sequence is performed. In two ways the repeated Start (Sr) sequence deviates from the Start sequence. Firstly, since the bus is already owned by the master, no wait for idle bus state is necessary. Secondly, if the previous transaction was a read, the acknowledge action is sent before the Repeated Start bus condition is issued on the bus. The master receives one data byte from the slave before the master sets the Master Read Interrupt Flag (RIF) in the Master Status register (TWIn.MSTATUS). All TWI Master flags are cleared automatically when this bit field is written. This includes bus error, arbitration lost, and both master interrupt flags. This register can be read at any time without interfering with ongoing bus activity, since a read access does not trigger the master logic to perform any bus protocol related operations. The master control logic uses bit 0 of the TWIn.MADDR register as the bus protocol’s Read/Write flag (R/W). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 371 ATtiny807/1607 TWI - Two-Wire Interface 25.5.8 Master DATA Name:  Offset:  Reset:  Property:  Bit 7 MDATA 0x08 0x00 - 6 5 4 3 2 1 0 DATA[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DATA[7:0] Data The bit field gives direct access to the master's physical Shift register which is used both to shift data out onto the bus (write) and to shift in data received from the bus (read). The direct access implies that the Data register cannot be accessed during byte transmissions. Built-in logic prevents any write access to this register during the shift operations. Reading valid data or writing data to be transmitted can only be successfully done when the bus clock (SCL) is held low by the master (i.e., when the CLKHOLD bit in the Master Status register (TWIn.MSTATUS) is set). However, it is not necessary to check the CLKHOLD bit in software before accessing this register if the software keeps track of the present protocol state by using interrupts or observing the interrupt flags. Accessing this register assumes that the master clock hold is active, auto-triggers bus operations dependent of the state of the Acknowledge Action Command bit (ACKACT) in TWIn.MSTATUS and type of register access (read or write). A write access to this register will, independent of ACKACT in TWIn.MSTATUS, command the master to perform a byte transmit operation on the bus directly followed by receiving the Acknowledge bit from the slave. When the Acknowledge bit is received, the Master Write Interrupt Flag (WIF) in TWIn.MSTATUS is set regardless of any bus errors or arbitration. If operating in a multi-master environment, the interrupt handler or application software must check the Arbitration Lost Status Flag (ARBLOST) in TWIn.MSTATUS before continuing from this point. If the arbitration was lost, the application software must decide to either abort or to resend the packet by rewriting this register. The entire operation is performed (i.e., all bits are clocked), regardless of winning or losing arbitration before the write interrupt flag is set. When arbitration is lost, only '1's are transmitted for the remainder of the operation, followed by a write interrupt with ARBLOST flag set. Both TWI Master Interrupt Flags are cleared automatically when this register is written. However, the Master Arbitration Lost and Bus Error flags are left unchanged. Reading this register triggers a bus operation, dependent on the setting of the Acknowledge Action Command bit (ACKACT) in TWIn.MSTATUS. Normally the ACKACT bit is preset to either ACK or NACK before the register read operation. If ACK or NACK action is selected, the transmission of the acknowledge bit precedes the release of the clock hold. The clock is released for one byte, allowing the slave to put one byte of data on the bus. The Master Read Interrupt flag RIF in TWIn.MSTATUS is then set if the procedure was successfully executed. However, if arbitration was lost when sending NACK, or a bus error occurred during the time of operation, the Master Write Interrupt flag (WIF) is set instead. Observe that the two Master Interrupt Flags are mutually exclusive (i.e., both flags will not be set simultaneously). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 372 ATtiny807/1607 TWI - Two-Wire Interface 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 373 ATtiny807/1607 TWI - Two-Wire Interface 25.5.9 Slave Control A Name:  Offset:  Reset:  Property:  Bit Access Reset SCTRLA 0x09 0x00 - 7 6 5 2 1 0 DIEN APIEN PIEN 4 3 PMEN SMEN ENABLE R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 Bit 7 – DIEN Data Interrupt Enable Writing this bit to '1' enables interrupt on the Slave Data Interrupt Flag (DIF) in the Slave Status register (TWIn.SSTATUS). A TWI slave data interrupt will be generated only if this bit, the DIF, and the Global Interrupt Flag (I) in CPU.SREG are all '1'. Bit 6 – APIEN Address or Stop Interrupt Enable Writing this bit to '1' enables interrupt on the Slave Address or Stop Interrupt Flag (APIF) in the Slave Status register (TWIn.SSTATUS). A TWI slave address or stop interrupt will be generated only if the this bit, APIF, PIEN in this register, and the Global Interrupt Flag (I) in CPU.SREG are all '1'. The slave stop interrupt shares the interrupt vector with the slave address interrupt. The AP bit determines what caused the interrupt. Bit 5 – PIEN Stop Interrupt Enable Writing this bit to '1' enables APIF to be set when a Stop condition occurs. To use this feature the system frequency must be 4x the SCL frequency. Bit 2 – PMEN Address Recognition Mode If this bit is written to '1', the slave address match logic responds to all received addresses. If this bit is written to '0', the address match logic uses the Slave Address register (TWIn.SADDR) to determine which address to recognize as the slaves own address. Bit 1 – SMEN Smart Mode Enable Writing this bit to '1' enables the slave Smart mode. When the Smart mode is enabled, issuing a command with CMD or reading/writing DATA resets the interrupt and operation continues. If the Smart mode is disabled, the slave always waits for a CMD command before continuing. Bit 0 – ENABLE Enable TWI Slave Writing this bit to '1' enables the TWI slave. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 374 ATtiny807/1607 TWI - Two-Wire Interface 25.5.10 Slave Control B Name:  Offset:  Reset:  Property:  Bit SCTRLB 0x0A 0x00 - 7 6 5 4 3 2 1 ACKACT Access 0 SCMD[1:0] R/W R/W R/W 0 0 0 Reset Bit 2 – ACKACT Acknowledge Action This bit defines the slave’s behavior under certain conditions defined by the bus protocol state and software interaction. The table below lists the acknowledge procedure performed by the slave if action is initiated by software. The acknowledge action is performed when TWIn.SDATA is read or written, or when an execute command is written to the CMD bits in this register. The ACKACT bit is not a flag or strobe, but an ordinary read/write accessible register bit. Value 0 1 Name ACK NACK Description Send ACK Send NACK Bits 1:0 – SCMD[1:0] Command Unlike the acknowledge action bits, the Slave command bits are strobes. These bits always read as '0'. Writing to these bits trigger a slave operation as defined in the table below. Table 25-6. Command Settings SCMD[1:0] DIR Description 0x0 X NOACT - No action 0x1 X Reserved 0x2 - COMPTRANS Used to complete a transaction. 0x3 - RESPONSE 0 Execute Acknowledge Action succeeded by waiting for any Start (S/Sr) condition. 1 Wait for any Start (S/Sr) condition. Used in response to an address interrupt (APIF). 0 Execute Acknowledge Action succeeded by reception of next byte. 1 Execute Acknowledge Action succeeded by slave data interrupt. Used in response to a data interrupt (DIF). 0 Execute Acknowledge Action succeeded by reception of next byte. 1 Execute a byte read operation followed by Acknowledge Action. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 375 ATtiny807/1607 TWI - Two-Wire Interface The acknowledge action bits and command bits can be written at the same time. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 376 ATtiny807/1607 TWI - Two-Wire Interface 25.5.11 Slave Status Name:  Offset:  Reset:  Property:  SSTATUS 0x0B 0x00 - 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 Access Reset 7 6 5 4 3 2 1 0 DIF APIF CLKHOLD RXACK COLL BUSERR DIR AP R/W R/W R R R/W R/W R R 0 0 0 0 0 0 0 0 Bit 7 – DIF Data Interrupt Flag This flag is set when a slave byte transmit or byte receive operation is successfully completed without any bus error. The flag can be set with an unsuccessful transaction in case of collision detection (see the description of the COLL Status bit). Writing a '1' to its bit location will clear the DIF. However, normal use of the TWI does not require the DIF flag to be cleared by using this method, since the flag is automatically cleared when: 1. 2. 3. Writing to the Slave DATA register. Reading the Slave DATA register. Writing a valid command to the CTRLB register. The DIF flag can be used to generate a slave data interrupt (see the description of the DIEN control bit in TWIn.CTRLA). Bit 6 – APIF Address or Stop Interrupt Flag This flag is set when the slave address match logic detects that a valid address has been received or by a Stop condition. Writing a '1' to its bit location will clear the APIF. However, normal use of the TWI does not require the flag to be cleared by this method since the flag is cleared using the same software interactions as described for the DIF flag. The APIF flag can be used to generate a slave address or stop interrupt (see the description of the AIEN control bit in TWIn.CTRLA). Take special note of that the slave stop interrupt shares the interrupt vector with the slave address interrupt. Bit 5 – CLKHOLD Clock Hold If read as '1', the slave clock hold flag indicates that the slave is currently holding the TWI clock (SCL) low, stretching the TWI clock period. This is a read-only bit that is set when an address or data interrupt is set. Resetting the corresponding interrupt will indirectly reset this flag. Bit 4 – RXACK Received Acknowledge This bit is read-only and contains the most recently received Acknowledge bit from the master. When read as zero, the most recent acknowledge bit from the master was ACK. When read as one, the most recent acknowledge bit was NACK. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 377 ATtiny807/1607 TWI - Two-Wire Interface Bit 3 – COLL Collision If read as '1', the transmit collision flag indicates that the slave has not been able to transmit a high data or NACK bit. If a slave transmit collision is detected, the slave will commence its operation as normal, except no low values will be shifted out onto the SDA line (i.e., when the COLL flag is set to '1' it disables the data and acknowledge output from the slave logic). The DIF flag will be set to '1' at the end as a result of the internal completion of an unsuccessful transaction. Similarly, when a collision occurs because the slave has not been able to transmit NACK bit, it means the address match already happened and APIF flag is set as a result. APIF/DIF flags can only generate interrupt whose handlers can be used to check for the collision. Writing a '1' to its bit location will clear the COLL flag. However, the flag is automatically cleared if any Start condition (S/Sr) is detected. This flag is intended for systems where the address resolution protocol (ARP) is employed. However, a detected collision in non-ARP situations indicates that there has been a protocol violation and should be treated as a bus error. Bit 2 – BUSERR Bus Error The BUSERR flag indicates that an illegal bus condition has occurred. An illegal bus condition is detected if a protocol violating Start (S), Repeated Start (Sr), or Stop (P) is detected on the TWI bus lines. A Start condition directly followed by a Stop condition is one example of protocol violation. Writing a '1' to its bit location will clear the BUSERR flag. However, normal use of the TWI does not require the BUSERR to be cleared by this method. A robust TWI driver software design will assume that the entire packet of data has been corrupted and restart by waiting for a new Start condition (S). The TWI bus error detector is part of the TWI Master circuitry. For bus errors to be detected, the TWI Master must be enabled (ENABLE bit in TWIn.MCTRLA is '1'), and the system clock frequency must be at least four times the SCL frequency. Bit 1 – DIR Read/Write Direction This bit is read-only and indicates the current bus direction state. The DIR bit reflects the direction bit value from the last address packet received from a master TWI device. If this bit is read as '1', a master read operation is in progress. Consequently, a '0' indicates that a master write operation is in progress. Bit 0 – AP Address or Stop When the TWI slave address or Stop Interrupt Flag (APIF) is set, this bit determines whether the interrupt is due to address detection or a Stop condition. Value 0 1 Name STOP ADR Description A Stop condition generated the interrupt on APIF Address detection generated the interrupt on APIF © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 378 ATtiny807/1607 TWI - Two-Wire Interface 25.5.12 Slave Address Name:  Offset:  Reset:  Property:  Bit 7 SADDR 0x0C 0x00 - 6 5 4 3 2 1 0 ADDR[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – ADDR[7:0] Address The Slave Address register in combination with the Slave Address Mask register (TWIn.SADDRMASK) is used by the slave address match logic to determine if a master TWI device has addressed the TWI slave. The Slave Address Interrupt Flag (APIF) is set to 1 if the received address is recognized. The slave address match logic supports recognition of 7- and 10-bits addresses, and general call address. When using 7-bit or 10-bit Address Recognition mode, the upper seven bits of the Address register (ADDR[7:1]) represents the slave address and the Least Significant bit (ADDR[0]) is used for general call address recognition. Setting the ADDR[0] bit, in this case, enables the general call address recognition logic. The TWI slave address match logic only supports recognition of the first byte of a 10-bit address (i.e., by setting ADDRA[7:1] = “0b11110aa” where “aa” represents bit 9 and 8, or the slave address). The second 10-bit address byte must be handled by software. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 379 ATtiny807/1607 TWI - Two-Wire Interface 25.5.13 Slave Data Name:  Offset:  Reset:  Property:  Bit 7 SDATA 0x0D 0x00 - 6 5 4 3 2 1 0 DATA[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – DATA[7:0] Data The Slave Data register I/O location (DATA) provides direct access to the slave's physical Shift register, which is used both to shift data out onto the bus (transmit) and to shift in data received from the bus (receive). The direct access implies that the Data register cannot be accessed during byte transmissions. Built-in logic prevents any write accesses to the Data register during the shift operations. Reading valid data or writing data to be transmitted can only be successfully done when the bus clock (SCL) is held low by the slave (i.e., when the slave CLKHOLD bit is set). However, it is not necessary to check the CLKHOLD bit in software before accessing the slave DATA register if the software keeps track of the present protocol state by using interrupts or observing the interrupt flags. Accessing the slave DATA register, assumed that clock hold is active, auto-trigger bus operations dependent of the state of the Slave Acknowledge Action Command bits (ACKACT) and type of register access (read or write). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 380 ATtiny807/1607 TWI - Two-Wire Interface 25.5.14 Slave Address Mask Name:  Offset:  Reset:  Property:  Bit 7 SADDRMASK 0x0E 0x00 - 6 5 4 3 2 1 ADDRMASK[6:0] Access Reset 0 ADDREN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:1 – ADDRMASK[6:0] Address Mask The ADDRMASK register acts as a second address match register, or an address mask register depending on the ADDREN setting. If ADDREN is written to '0', ADDRMASK can be loaded with a 7-bit Slave Address mask. Each of the bits in the TWIn.SADDRMASK register can mask (disable) the corresponding address bits in the TWI slave Address Register (TWIn.SADDR). If the mask bit is written to '1' then the address match logic ignores the compare between the incoming address bit and the corresponding bit in slave TWIn.SADDR register. In other words, masked bits will always match. If ADDREN is written to '1', the TWIn.SADDRMASK can be loaded with a second slave address in addition to the TWIn.SADDR register. In this mode, the slave will match on two unique addresses, one in TWIn.SADDR and the other in TWIn.SADDRMASK. Bit 0 – ADDREN Address Mask Enable If this bit is written to '1', the slave address match logic responds to the two unique addresses in slave TWIn.SADDR and TWIn.SADDRMASK. If this bit is '0', the TWIn.SADDRMASK register acts as a mask to the TWIn.SADDR register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 381 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26. CRCSCAN - Cyclic Redundancy Check Memory Scan 26.1 Features • • • • • • 26.2 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 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 26-1, starting with the Most Significant bit. If the last two bytes in the section contain the correct checksum, the CRC will pass. See 26.3.2.1 Checksum for how to place the checksum. The initial value of the Checksum register is 0xFFFF. Figure 26-1. CRC Implementation Description data 15 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 x © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 382 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.2.1 Block Diagram Figure 26-2. Cyclic Redundancy Check Block Diagram Memory (Boot, App, Flash) CTRLB CTRLA Source CRC calculation Enable, Reset BUSY STATUS CRC OK CHECKSUM 26.2.2 NMI Req System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 26-1. System Product Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections No - Interrupts Yes CPUINT Events No - Debug Yes UPDI Related Links 11.2.2.1 Clocks 26.2.2.3 Interrupts 26.2.2.1 Clocks This peripheral depends on the peripheral clock. Related Links 10. CLKCTRL - Clock Controller 26.2.2.2 I/O Lines and Connections Not applicable. 26.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 26.3.3 Interrupts © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 383 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.2.2.4 Events Not applicable. 26.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 NonMaskable 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 30. UPDI - Unified Program and Debug Interface 26.5.1 CTRLA 26.5.2 CTRLB 26.3 Functional Description 26.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 384 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 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 26.5.1 CTRLA 26.5.2 CTRLB 6.10 Configuration and User Fuses (FUSE) 12.3.2.2 Reset Time 26.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. 26.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 checksum must be saved in the last bytes of the BOOT section, and similarly for APPLICATION and entire Flash. Table 26-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 26-2. Placement the Pre-Calculated Checksum in Flash 26.3.3 Section to Check CHECKSUM[15:8] CHECKSUM[7:0] BOOT FUSE_BOOTEND*256-2 FUSE_BOOTEND*256-1 BOOT and APPLICATION FUSE_APPEND*256-2 FUSE_APPEND*256-1 Full Flash FLASHEND-1 FLASHEND SIGROW SIGROWEND-1 SIGROWEND Interrupts Table 26-3. Available Interrupt Vectors and Sources Offset Name Vector Description Conditions 0x00 NMI Non-Maskable Interrupt Generated on CRC failure © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 385 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 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 26.5.1 CTRLA 26.5.3 STATUS 13. CPUINT - CPU Interrupt Controller 26.3.4 Sleep Mode Operation CTCSCAN is halted in all sleep modes. In all CPU Sleep modes, the CRCSCAN peripheral is halted and will resume operation when the CPU wakes up. The CRCSCAN starts operation three cycles after writing the EN bit in CRCSCAN.CTRLA. During these three cycles, it is possible to enter Sleep mode. In this case: 1. The CRCSCAN will not start until the CPU is woken up. 2. Any interrupt handler will execute after CRCSCAN has finished. 26.3.5 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 386 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.4 Register Summary - CRCSCAN Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 0x02 STATUS 7:0 26.5 RESET NMIEN ENABLE SRC[1:0] OK BUSY Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 387 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.5.1 Control A Name:  Offset:  Reset:  Property:  CTRLA 0x00 0x00 - If an NMI has been triggered, this register is not writable. Bit Access Reset 1 0 RESET 7 6 5 4 3 2 NMIEN ENABLE R/W R/W R/W 0 0 0 Bit 7 – RESET Reset CRCSCAN Writing this bit to '1' resets the CRCSCAN peripheral: The CRCSCAN Control registers and STATUS register (CTRLA, CTRLB, STATUS) will be cleared one clock cycle after the RESET bit was written to '1'. If NMIEN is '0', this bit is writable both when the CRCSCAN is busy (the BUSY bit in CRCSCAN.STATUS is '1') and not busy (the BUSY bit is '0'), and will take effect immediately. If NMIEN is '1', this bit is only writable when the CRCSCAN is not busy (the BUSY bit in CRCSCAN.STATUS is '0'). The RESET bit is a strobe bit. Bit 1 – NMIEN Enable NMI Trigger When this bit is written to '1', any CRC failure will trigger an NMI. This can only be cleared by a system Reset - it is not cleared by a write to the RESET bit. This bit can only be written to '1' when the CRCSCAN is not busy (the BUSY bit in CRCSCAN.STATUS is '0'). Bit 0 – ENABLE Enable CRCSCAN Writing this bit to '1' enables the CRCSCAN peripheral with the current settings. It will stay '1' even after a CRC check has completed, but writing it to ‘1’ again will start a new check. Writing the bit to '0' will disable the CRCSCAN after the ongoing check is completed (after reaching the end of the section it is set up to check). A failure in the ongoing check will still be detected and can cause an NMI if the NMIEN bit is '1'. The CRCSCAN can be enabled during the internal Reset initialization to verify Flash sections before letting the CPU start normal code execution (see the device data sheet fuse description). If the CRCSCAN is enabled during the internal Reset initialization, the ENABLE bit will read as '1' when normal code execution starts. To see whether the CRCSCAN peripheral is busy with an ongoing check, poll the Busy bit (BUSY) in the STATUS register (CRCSCAN.STATUS). Related Links 6.10 Configuration and User Fuses (FUSE) 12.3.2.2 Reset Time © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 388 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.5.2 Control B Name:  Offset:  Reset:  Property:  CTRLB 0x01 0x00 - 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 Reset R/W R/W 0 0 Bits 1:0 – SRC[1:0] CRC Source The SRC bit field selects which section of the Flash the CRC module should check. To set up section sizes, refer to the fuse description. The CRC can be enabled during internal Reset initialization to verify Flash sections before letting the CPU start (see fuse description). If the CRC is enabled during internal Reset initialization, the SRC bit field will read out as FLASH, BOOTAPP, or BOOT when normal code execution starts (depending on the configuration). Value 0x0 0x1 0x2 0x3 Name FLASH Description The CRC is performed on the entire Flash (boot, application code, and application data sections). BOOTAPP The CRC is performed on the boot and application code sections of Flash. BOOT The CRC is performed on the boot section of Flash. SIGROW The CRC is performed on the Flash signature row (AUX). Related Links 6.10 Configuration and User Fuses (FUSE) 12.3.2.2 Reset Time © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 389 ATtiny807/1607 CRCSCAN - Cyclic Redundancy Check Memory Sca... 26.5.3 Status Name:  Offset:  Reset:  Property:  STATUS 0x02 0x02 - 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. Bit 0 – BUSY CRC Busy When this bit is read as '1', the CRC module is busy. As long as the module is busy, the access to the control registers is limited. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 390 ATtiny807/1607 CCL - Configurable Custom Logic 27. CCL - Configurable Custom Logic 27.1 Features • • • • • • • • 27.2 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 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. 27.2.1 Signal Description Pin Name Type Description LUTn-OUT Digital output Output from look-up table LUTn-IN[2:0] Digital input Input to look-up table © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 391 ATtiny807/1607 CCL - Configurable Custom Logic 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 27.2.2 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 27-1. CCL System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Events Yes EVSYS Debug Yes UPDI 27.2.2.1 I/O Lines The CCL can take inputs and generate output through I/O pins. For this to function properly, the I/O pins must be configured to be used by a Look Up Table (LUT). Related Links 16. PORT - I/O Pin Configuration 27.2.2.2 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. 27.3 Functional Description 27.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. 27.3.2 Operation 27.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 392 ATtiny807/1607 CCL - Configurable Custom Logic 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. 27.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 27-2. Truth Table of LUT IN[2] IN[1] IN[0] OUT 0 0 0 TRUTH[0] 0 0 1 TRUTH[1] 0 1 0 TRUTH[2] 0 1 1 TRUTH[3] 1 0 0 TRUTH[4] 1 0 1 TRUTH[5] 1 1 0 TRUTH[6] 1 1 1 TRUTH[7] 27.3.2.3 Truth Table Inputs Selection 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 Internal Feedback Inputs (FEEDBACK) When selected (INSELy=FEEDBACK in CCL.LUTnCTRLx), the Sequential (SEQ) output is used as input for the corresponding LUT. 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 � © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 393 ATtiny807/1607 CCL - Configurable Custom Logic IN 2N+1 � = SEQ � With N representing the sequencer number and i=0,1 representing the LUT input index. For details, refer to 27.3.2.6 Sequential Logic. Figure 27-1. Feedback Input Selection Linked LUT (LINK) When selecting the LINK input option, the next LUT's direct output is used as the LUT input. In general, LUT[n+1] is linked to the input of LUT[n]. As example, LUT1 is the input for LUT0. Figure 27-2. Linked LUT Input Selection LUT0 SEQ 0 CTRL (ENABLE) LUT1 Internal Events Inputs Selection (EVENT) Asynchronous events from the Event System can be used as input to the LUT. Two event input lines (EVENT0 and EVENT1) are available, and can be selected as LUT input. Before selecting the EVENT input option by writing to the LUT CONTROL A or B register (CCL.LUTnCTRLB or LUTnCTRLC), the Event System must be configured. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 394 ATtiny807/1607 CCL - Configurable Custom Logic I/O Pin Inputs (I/O) When selecting the I/O option, the LUT input will be connected to its corresponding I/O pin. Refer to the I/O Multiplexing section for more details about where the LUTnINy is located. Figure 27-3. I/O Pin Input Selection 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 28. AC - Analog Comparator 20. TCA - 16-bit Timer/Counter Type A 23. USART - Universal Synchronous and Asynchronous Receiver and Transmitter 24. SPI - Serial Peripheral Interface 25. TWI - Two-Wire Interface 5. I/O Multiplexing and Considerations 27.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 395 ATtiny807/1607 CCL - Configurable Custom Logic Figure 27-4. Filter FILTSEL Input OUT Q D R Q D R Q D R D G Q R CLK_MUX_OUT CLR 27.3.2.5 Edge Detector The edge detector can be used to generate a pulse when detecting a rising edge on its input. To detect a falling edge, the TRUTH table should be programmed to provide inverted output. The edge detector is enabled by writing '1' to the Edge Selection bit (EDGEDET) in the LUT n Control A register (CCL.LUTnCTRLA). In order to avoid unpredictable behavior, a valid filter option must be enabled as well. Edge detection is disabled by writing a '0' to EDGEDET in CCL.LUTnCTRLA. After disabling an LUT, the corresponding internal Edge Detector logic is cleared one clock cycle later. Figure 27-5. Edge Detector CLK_MUX_OUT 27.3.2.6 Sequential Logic Each LUT pair can be connected to an internal Sequential block. A Sequential block can function as either D flip-flop, JK flip-flop, gated D-latch, or RS-latch. The function is selected by writing the Sequential Selection bits (SEQSEL) in the Sequential Control register (CCL.SEQCTRLn). The Sequential block receives its input from either LUT, filter, or edge detector, depending on the configuration. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 396 ATtiny807/1607 CCL - Configurable Custom Logic The Sequential block is clocked by the same clock as the corresponding LUT. 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. Gated D Flip-Flop (DFF) The D-input is driven by the even LUT output (LUT0), and the G-input is driven by the odd LUT output (LUT1). Figure 27-6. D Flip-Flop even LUT CLK_MUX_OUT odd LUT Table 27-3. DFF Characteristics R G D OUT 1 X X Clear 0 1 1 Set 0 Clear X Hold state (no change) 0 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 27-7. JK Flip-Flop even LUT CLK_MUX_OUT odd LUT Table 27-4. JK Characteristics 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 397 ATtiny807/1607 CCL - Configurable Custom Logic Gated D-Latch (DLATCH) The D-input is driven by the even LUT output (LUT0), and the G-input is driven by the odd LUT output (LUT1). Figure 27-8. D-Latch even LUT D odd LUT G Q OUT Table 27-5. D-Latch Characteristics 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 27-9. RS-Latch even LUT S odd LUT R Q OUT Table 27-6. RS-Latch Characteristics 27.3.3 S R OUT 0 0 Hold state (no change) 0 1 Clear 1 0 Set 1 1 Forbidden state 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 27.3.4 Sleep Mode Operation Writing the Run In Standby bit (RUNSTDBY) in the Control A register (CCL.CTRLA) to '1' will allow the system clock to be enabled in Standby Sleep mode. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 398 ATtiny807/1607 CCL - Configurable Custom Logic If RUNSTDBY is '0' the system clock will be disabled in Standby Sleep mode. If the Filter, Edge Detector, or Sequential logic is enabled, the LUT output will be forced to '0' in Standby Sleep mode. In Idle sleep mode, the TRUTH table decoder will continue operation and the LUT output will be refreshed accordingly, regardless of the RUNSTDBY bit. If the Clock Source bit (CLKSRC) in the LUT n Control A register (CCL.LUTnCTRLA) is written to '1', the LUT input 2 (IN[2]) will always clock the Filter, Edge Detector, and Sequential block. The availability of the IN[2] clock in sleep modes will depend on the sleep settings of the peripheral employed. 27.3.5 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 399 ATtiny807/1607 CCL - Configurable Custom Logic 27.4 Register Summary - CCL Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 SEQCTRL0 7:0 RUNSTDBY ENABLE SEQSEL[3:0] 0x02 ... Reserved 0x04 0x05 LUT0CTRLA 7:0 0x06 LUT0CTRLB 7:0 0x07 LUT0CTRLC 7:0 0x08 TRUTH0 7:0 0x09 LUT1CTRLA 7:0 0x0A LUT1CTRLB 7:0 0x0B LUT1CTRLC 7:0 0x0C TRUTH1 7:0 27.5 EDGEDET CLKSRC FILTSEL[1:0] OUTEN INSEL1[3:0] ENABLE INSEL0[3:0] INSEL2[3:0] TRUTH[7:0] EDGEDET CLKSRC FILTSEL[1:0] OUTEN INSEL1[3:0] ENABLE INSEL0[3:0] INSEL2[3:0] TRUTH[7:0] Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 400 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLA 0x00 0x00 - 6 5 4 3 2 1 0 RUNSTDBY ENABLE R/W R/W 0 0 Bit 6 – RUNSTDBY Run in Standby This bit indicates if the peripheral clock (CLK_PER) is kept running in Standby Sleep mode. The setting is ignored for configurations where the CLK_PER is not required. Value 0 1 Description System clock is not required in Standby Sleep mode System clock is required in Standby Sleep mode Bit 0 – ENABLE Enable Value 0 1 Description The peripheral is disabled The peripheral is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 401 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.2 Sequential Control 0 Name:  Offset:  Reset:  Property:  Bit 7 SEQCTRL0 0x01 [ID-00000485] 0x00 Enable-Protected 6 5 4 3 2 1 0 SEQSEL[3:0] Access Reset R/W R/W R/W R/W 0 0 0 0 Bits 3:0 – SEQSEL[3:0] Sequential Selection These bits select the sequential configuration. Value 0x0 0x1 0x2 0x3 0x4 Other Name DISABLE DFF JK LATCH RS - © 2018 Microchip Technology Inc. Description Sequential logic is disabled D flip-flop JK flip-flop D latch RS latch Reserved Datasheet Preliminary DS40002030A-page 402 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.3 LUT n Control A Name:  Offset:  Reset:  Property:  Bit Access Reset LUTCTRLA 0x05 + n*0x04 [n=0..1] 0x00 Enable-Protected 7 6 EDGEDET CLKSRC 5 4 R/W R/W R/W 0 0 0 FILTSEL[1:0] 3 2 1 0 OUTEN ENABLE R/W R/W R/W 0 0 0 Bit 7 – EDGEDET Edge Detection Value 0 1 Description Edge detector is disabled Edge detector is enabled Bit 6 – CLKSRC Clock Source Selection This bit selects whether the peripheral clock (CLK_PER) or any input present on input line 2 (IN[2]) is used as clock (CLK_MUX_OUT) for an LUT. The CLK_MUX_OUT of the even LUT is used for clocking the Sequential block of an LUT pair. Value 0 1 Description CLK_PER is clocking the LUT IN[2] is clocking the LUT Bits 5:4 – FILTSEL[1:0] Filter Selection These bits select the LUT output filter options: Value 0x0 0x1 0x2 0x3 Name DISABLE SYNCH FILTER - Description Filter disabled Synchronizer enabled Filter enabled Reserved Bit 3 – OUTEN Output Enable This bit enables the LUT output to the LUTnOUT pin. When written to '1', the pin configuration of the PORT I/O Controller is overridden. Value 0 1 Description Output to pin disabled Output to pin enabled Bit 0 – ENABLE LUT Enable Value 0 1 Description The LUT is disabled The LUT is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 403 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.4 LUT n Control B Name:  Offset:  Reset:  Property:  LUTCTRLB 0x06 + n*0x04 [n=0..1] 0x00 Enable-Protected SPI connections to the CCL work only in master SPI mode. USART connections to the CCL work only in asynchronous/synchronous USART Master mode. Bit 7 6 5 4 3 2 INSEL1[3:0] Access Reset 1 0 INSEL0[3:0] R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:4 – INSEL1[3:0] LUT n Input 1 Source Selection These bits select the source for input 1 of LUT n: Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB Name MASK FEEDBACK LINK EVENT0/EVENT1 EVENT2/EVENT3 IO AC0 TCB0 TCA0 USART0 SPI0 Description Masked input Feedback input Linked other LUT as input source Event 0 as input source for LUT0/Event 1 as input source for LUT1 Event 2 as input source for LUT0/Event 3 as input source for LUT1 I/O pin LUTn-IN1 input source AC0 OUT input source TCB WO input source TCA WO1 input source Reserved USART TXD input source SPI MOSI input source Bits 3:0 – INSEL0[3:0] LUT n Input 0 Source Selection These bits select the source for input 0 of LUT n: Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB Other Name MASK FEEDBACK LINK EVENT0/EVENT1 EVENT2/EVENT3 IO AC0 TCB0 TCA0 USART0 SPI0 - © 2018 Microchip Technology Inc. Description Masked input Feedback input Linked other LUT as input source Event 0 as input source for LUT0/Event 1 as input source for LUT1 Event 2 as input source for LUT0/Event 3 as input source for LUT1 I/O pin LUTn-IN0 input source AC0 OUT input source TCB WO input source TCA WO0 input source Reserved USART XCK input source SPI SCK input source Reserved Datasheet Preliminary DS40002030A-page 404 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.5 LUT n Control C Name:  Offset:  Reset:  Property:  Bit 7 LUTCTRLC 0x07 + n*0x04 [n=0..1] 0x00 Enable-Protected 6 5 4 3 2 1 0 INSEL2[3:0] Access Reset R/W R/W R/W R/W 0 0 0 0 Bits 3:0 – INSEL2[3:0] LUT n Input 2 Source Selection These bits select the source for input 2 of LUT n: Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB other Name MASK FEEDBACK LINK EVENT0 EVENT1 IO AC0 TCB0 TCA0 SPI0 - © 2018 Microchip Technology Inc. Description Masked input Feedback input Linked other LUT as input source Event input source 0 Event input source 1 I/O pin LUTn-IN2 input source AC0 OUT input source TCB WO input source TCA WO2 input source Reserved Reserved SPI MISO input source Reserved Datasheet Preliminary DS40002030A-page 405 ATtiny807/1607 CCL - Configurable Custom Logic 27.5.6 TRUTHn Name:  Offset:  Reset:  Property:  Bit 7 TRUTH 0x08 + n*0x04 [n=0..1] 0x00 Enable-Protected 6 5 4 3 2 1 0 TRUTH[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TRUTH[7:0] Truth Table These bits define the value of truth logic as a function of inputs IN[2:0]. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 406 ATtiny807/1607 AC - Analog Comparator 28. AC - Analog Comparator 28.1 Features • • • • • • • • 28.2 One Instance of the AC Controller, AC0 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: – Two Positive pins – Two Negative pins – Internal reference voltage Interrupt Generation On: – Rising edge – Falling edge – Both edges Event Generation: – Comparator output 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 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 two 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 one instance of the AC controller, AC0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 407 ATtiny807/1607 AC - Analog Comparator 28.2.1 Block Diagram Figure 28-1. Analog Comparator AC Controller AINP0 MUXCTRLA : Invert + AINPn Controller Logic AC AINN0 OUT - : AINNn Hysteresis Enable VREF Event System CTRLA Note:  Refer to 28.2.2 Signal Description for the number of AINN and AINP. 28.2.2 28.2.3 Signal Description Signal Description Type AINN0 Negative Input 0 Analog AINN1 Negative Input 1 Analog AINP0 Positive Input 0 Analog AINP1 Positive Input 1 Analog OUT Comparator Output for AC Digital System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 28-1. AC System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT Events Yes EVSYS Debug Yes UPDI 28.2.3.1 Clocks This peripheral depends on the peripheral clock. 28.2.3.2 I/O Lines and Connections I/O pins AINN0-AINN1 and AINP0- AINP1 are all analog inputs to the AC. For correct operation, the pins must be configured in the port and port multiplexing peripherals. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 408 ATtiny807/1607 AC - Analog Comparator It is recommended to disable the GPIO input when using the AC. 28.2.3.3 Interrupts Using the interrupts of this peripheral requires the interrupt controller to be configured first. 28.2.3.4 Events The events of this peripheral are connected to the Event System. 28.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. 28.3 Functional Description 28.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 startup time is normally longer than the AC start-up time. The VREF start-up time is 60 µs at most. 28.3.2 Operation 28.3.2.1 Input Hysteresis Applying an input hysteresis helps to prevent constant toggling of the output when the noise-afflicted input signals are close to each other. The input hysteresis can either be disabled or have one of three levels. The hysteresis is configured by writing to the Hysteresis Mode Select bit field (HYSMODE) in the Control A register (ACn.CTRLA). 28.3.2.2 Input Sources The AC has one positive and one negative input. The inputs can be pins and internal sources, such as a voltage reference. Each input is selected by writing to the Positive and Negative Input MUX Selection bit field (MUXPOS and MUXNEG) in the MUX Control A register (AC.MUXTRLA). 28.3.2.2.1 Pin Inputs The following Analog input pins on the port can be selected as input to the analog comparator: • • • • AINN0 AINN1 AINP0 AINP1 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 409 ATtiny807/1607 AC - Analog Comparator 28.3.2.2.2 Internal Inputs One internal input is available for the analog comparator: • AC voltage reference 28.3.2.3 Low-Power Mode For power sensitive applications, the AC provides a Low-Power mode with reduced power consumption and increased propagation delay. 28.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. 28.3.4 Interrupts Table 28-2. Available Interrupt Vectors and Sources Offset Name 0x00 Vector Description Conditions COMP0 Analog comparator interrupt AC output is toggling as configured by INTMODE in AC.CTRLA 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. 28.3.5 Sleep Mode Operation In Idle Sleep mode, the AC will continue to operate as normal. In Standby Sleep mode, the AC is disabled by default. If the Run in Standby Sleep mode bit (RUNSTDBY) in the Control A register (AC.CTRLA) is written to '1', the AC will continue to operate, but the Status register will not be updated, and no Interrupts are generated if no other modules request the CLK_PER, but events and the pad output will be updated. In Power-Down Sleep mode, the AC and the output to the pad are disabled. 28.3.6 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 410 ATtiny807/1607 AC - Analog Comparator 28.4 Register Summary - AC Offset Name Bit Pos. 0x00 CTRLA 7:0 RUNSTDBY 7:0 INVERT 0x01 Reserved 0x02 MUXCTRLA OUTEN INTMODE[1:0] HYSMODE[1:0] MUXPOS ENABLE MUXNEG[1:0] 0x03 ... Reserved 0x05 0x06 INTCTRL 7:0 0x07 STATUS 7:0 28.5 CMP STATE CMP Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 411 ATtiny807/1607 AC - Analog Comparator 28.5.1 Control A Name:  Offset:  Reset:  Property:  Bit Access Reset CTRLA 0x00 0x00 - 7 6 RUNSTDBY OUTEN 5 4 3 2 R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 INTMODE[1:0] 1 HYSMODE[1:0] 0 ENABLE Bit 7 – RUNSTDBY Run in Standby Mode Writing a '1' to this bit allows the AC to continue operation in Standby Sleep mode. Since the clock is stopped, interrupts and status flags are not updated. Value 0 1 Description In Standby Sleep mode, the peripheral is halted In Standby Sleep mode, the peripheral continues operation Bit 6 – OUTEN Analog Comparator Output Pad Enable Writing this bit to '1' makes the OUT signal available on the pin. Bits 5:4 – INTMODE[1:0] Interrupt Modes Writing to these bits selects what edges of the AC output triggers an interrupt request. Value 0x0 0x1 0x2 0x3 Name BOTHEDGE NEGEDGE POSEDGE Description Both negative and positive edge Reserved Negative edge Positive edge Bits 2:1 – HYSMODE[1:0] Hysteresis Mode Select Writing these bits selects the Hysteresis mode for the AC input. Value 0x0 0x1 0x2 0x3 Name OFF 10 25 50 Description OFF ±10 mV ±25 mV ±50 mV Bit 0 – ENABLE Enable AC Writing this bit to '1' enables the AC. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 412 ATtiny807/1607 AC - Analog Comparator 28.5.2 MUX Control A Name:  Offset:  Reset:  Property:  MUXCTRLA 0x02 0x00 - AC.MUXCTRLA controls the analog comparator MUXes. Bit Access Reset 7 6 5 4 3 2 1 0 INVERT MUXPOS MUXNEG[1:0] R/W R/W R/W R/W 0 0 0 0 Bit 7 – INVERT Invert AC Output Writing a '1' to this bit enables inversion of the output of the AC. This effectively inverts the input to all the peripherals connected to the signal and affects the internal status signals. Bit 3 – MUXPOS Positive Input MUX Selection Writing to this bit field selects the input signal to the positive input of the AC. Value 0x0 0x1 Name AINP0 AINP1 Description Positive Pin 0 Positive Pin 1 Bits 1:0 – MUXNEG[1:0] Negative Input MUX Selection Writing to this bit field selects the input signal to the negative input of the AC. Value 0x0 0x1 0x2 0x3 Name AINN0 AINN1 VREF Reserved © 2018 Microchip Technology Inc. Description Negative Pin 0 Negative Pin 1 Voltage Reference Reserved Datasheet Preliminary DS40002030A-page 413 ATtiny807/1607 AC - Analog Comparator 28.5.3 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x06 0x00 - 6 5 4 3 2 1 0 CMP Access R/W Reset 0 Bit 0 – CMP  Analog Comparator Interrupt Enable Writing this bit to '1' enables analog comparator interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 414 ATtiny807/1607 AC - Analog Comparator 28.5.4 Status Name:  Offset:  Reset:  Property:  Bit 7 STATUS 0x07 0x00 - 6 5 4 3 2 1 0 STATE CMP Access R R/W Reset 0 0 Bit 4 – STATE Analog Comparator State This shows the current status of the OUT signal from the AC. This will have a synchronizer delay to get updated in the I/O register (three cycles). Bit 0 – CMP Analog Comparator Interrupt Flag This is the interrupt flag for AC. Writing a '1' to this bit will clear the Interrupt Flag. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 415 ATtiny807/1607 ADC - Analog-to-Digital Converter 29. ADC - Analog-to-Digital Converter 29.1 Features • • • • • • • • • • • • • 29.2 10-Bit Resolution ±2 LSB Absolute Accuracy 6.5 - 260 μs Conversion Time Up to 150 ksps Up to Twelve Multiplexed Single-ended Input Channels 0V to VDD ADC Input Voltage Range Multiple Internal ADC Reference Voltages Between 0.55V and VDD 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 Overview The Analog-to-Digital Converter (ADC) peripheral features a 10-bit Successive Approximation ADC (SAR), with a sampling rate up to 150 ksps. The ADC is connected to a 12-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. Internal reference voltages from Voltage Reference (VREF) or VDD are provided on-chip. This device has one instance of the ADC peripheral; ADC0. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 416 ATtiny807/1607 ADC - Analog-to-Digital Converter Block Diagram Figure 29-1. Block Diagram Internal reference AIN0 AIN1 AINn VREF VDD .. . ADC "convert" TEMPREF "sample" "enable" VREF RES "accumulate" 29.2.1 > < WCOMP (IRQ) Control Logic MUXPOS RESRDY (IRQ) CTRLA EVCTRL COMMAND WINLT WINHT The analog input channel is selected by writing to the MUXPOS bits in the MUXPOS register (ADC.MUXPOS). Any of the ADC input pins, GND, internal Voltage Reference (VREF), can be selected as single-ended input to the ADC. The ADC is enabled by writing a ‘1’ to the ADC ENABLE bit in the Control A register (ADC.CTRLA). Voltage reference and input channel selections will not go into effect before the ADC is enabled. The ADC does not consume power when the ENABLE bit in ADC.CTRLA is ‘0’. The ADC generates a 10-bit result that can be read from the Result Register (ADC.RES). The result is presented right adjusted. 29.2.2 Signal Description Pin Name Type Description AIN[11:0] Analog input Analog input to be converted Related Links 5. I/O Multiplexing and Considerations 29.2.3 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 29-1. ADC System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts Yes CPUINT © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 417 ATtiny807/1607 ADC - Analog-to-Digital Converter Dependency Applicable Peripheral Events Yes EVSYS Debug Yes UPDI 29.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 29.3.2.2 Clock Generation 29.2.3.2 I/O Lines and Connections The I/O pins (AINx) are configured by the port - I/O Pin Controller. The digital input buffer should be disabled on the pin used as input for the ADC to disconnect the digital domain from the analog domain to obtain the best possible ADC results. This is configured by the port I/O Pin Controller. Related Links 16. PORT - I/O Pin Configuration 29.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 29.3.4 Interrupts 29.2.3.4 Events The events of this peripheral are connected to the Event System. Related Links 14. EVSYS - Event System 29.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. This peripheral can be forced to operate with halted CPU by writing a '1' to the Debug Run bit (DBGRUN) in the Debug Control register of the peripheral (peripheral.DBGCTRL). 29.2.4 Definitions An ideal n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2n steps (LSBs). 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 418 ATtiny807/1607 ADC - Analog-to-Digital Converter Figure 29-2. Offset Error Output Code Ideal ADC Actual ADC Offset Error Gain Error VREF Input Voltage 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 29-3. Gain Error Gain Error Output Code Ideal ADC Actual ADC VREF Integral NonLinearity (INL) Input Voltage After adjusting for offset and gain error, the INL is the maximum deviation of an actual transition compared to an ideal transition for any code. Ideal value: 0 LSB. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 419 ATtiny807/1607 ADC - Analog-to-Digital Converter Figure 29-4. Integral Non-Linearity Output Code INL Ideal ADC Actual ADC VREF Differential NonLinearity (DNL) Input Voltage The maximum deviation of the actual code width (the interval between two adjacent transitions) from the ideal code width (1 LSB). Ideal value: 0 LSB. Figure 29-5. Differential Non-Linearity Output Code 0x3FF 1 LSB DNL 0x000 0 VREF Input Voltage Quantization Error Due to the quantization of the input voltage into a finite number of codes, a range of input voltages (1 LSB wide) will code to the same value. Always ±0.5 LSB. Absolute Accuracy The maximum deviation of an actual (unadjusted) transition compared to an ideal transition for any code. This is the compound effect of all aforementioned errors. Ideal value: ±0.5 LSB. 29.3 Functional Description 29.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: 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). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 420 ATtiny807/1607 ADC - Analog-to-Digital Converter 3. 4. 5. 6. 7. 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). Configure the CLK_ADC by writing to the Prescaler bit field (PRESC) in the Control C register (ADC.CTRLC). Configure an input by writing to the MUXPOS bit field in the MUXPOS register (ADC.MUXPOS). 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. 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). 29.3.2 Operation 29.3.2.1 Starting a Conversion Once the input channel is selected by writing to the MUXPOS register (ADCn.MUXPOS), a conversion is triggered by writing a '1' to the ADC Start Conversion bit (STCONV) in the Command register (ADCn.COMMAND). This bit is '1' as long as the conversion is in progress. In Single Conversion mode, STCONV is cleared by hardware when the conversion is completed. If a different input channel is selected while a conversion is in progress, the ADC will finish the current conversion before changing the channel. Depending on the accumulator setting, the conversion result is from a single sensing operation, or from a sequence of accumulated samples. Once the triggered operation is finished, the Result Ready flag (RESRDY) in the Interrupt Flag register (ADCn.INTFLAG) is set. The corresponding interrupt vector is executed if the Result Ready Interrupt Enable bit (RESRDY) in the Interrupt Control register (ADCn.INTCTRL) is '1' and the Global Interrupt Enable bit is '1'. A single conversion can be started by writing a '1' to the STCONV bit in ADCn.COMMAND. The STCONV bit can be used to determine if a conversion is in progress. The STCONV bit will be set during a conversion and cleared once the conversion is complete. The RESRDY interrupt flag in ADCn.INTFLAG will be set even if the specific interrupt is disabled, allowing software to check for finished conversion by polling the flag. A conversion can thus be triggered without causing an interrupt. Alternatively, a conversion can be triggered by an event. This is enabled by writing a '1' to the Start Event Input bit (STARTEI) in the Event Control register (ADCn.EVCTRL). Any incoming event routed to the ADC through the Event System (EVSYS) will trigger an ADC conversion. This provides a method to start conversions at predictable intervals or at specific conditions. The event trigger input is edge sensitive. When an event occurs, STCONV in ADCn.COMMAND is set. STCONV will be cleared when the conversion is complete. In Free-Running mode, the first conversion is started by writing the STCONV bit to '1' in ADCn.COMMAND. A new conversion cycle is started immediately after the previous conversion cycle has completed. A conversion complete will set the RESRDY flag in ADCn.INTFLAGS. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 421 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.3.2.2 Clock Generation Figure 29-6. ADC Prescaler ENABLE "START" Reset 8-bit PRESCALER CTRLC CLK_PER/256 CLK_PER/128 CLK_PER/64 CLK_PER/32 CLK_PER/16 CLK_PER/8 CLK_PER/4 CLK_PER/2 CLK_PER PRESC ADC clock source (CLK_ADC) The ADC requires an input clock frequency between 50 kHz and 1.5 MHz for maximum resolution. If a lower resolution than 10 bits is selected, the input clock frequency to the ADC can be higher than 1.5 MHz to get a higher sample rate. The ADC module contains a prescaler which generates the ADC clock (CLK_ADC) from any CPU clock (CLK_PER) above 100 kHz. The prescaling is selected by writing to the Prescaler bits (PRESC) in the Control C register (ADCn.CTRLC). The prescaler starts counting from the moment the ADC is switched on by writing a ’1’ to the ENABLE bit in ADCn.CTRLA. The prescaler keeps running as long as the ENABLE bit is '1'. The prescaler counter is reset to zero when the ENABLE bit is '0'. When initiating a conversion by writing a ’1’ to the Start Conversion bit (STCONV) in the Command register (ADCn.COMMAND) or from an event, the conversion starts at the following rising edge of the CLK_ADC clock cycle. The prescaler is kept reset as long as there is no ongoing conversion. This assures a fixed delay from the trigger to the actual start of a conversion in CLK_PER cycles as: PRESCfactor +2 2 Figure 29-7. Start Conversion and Clock Generation StartDelay = CLK_PER STCONV CLK_PER/2 CLK_PER/4 CLK_PER/8 29.3.2.3 Conversion Timing A normal conversion takes 13 CLK_ADC cycles. The actual sample-and-hold takes place two CLK_ADC cycles after the start of a conversion. Start of conversion is initiated by writing a '1' to the STCONV bit in ADC.COMMAND. When a conversion is complete, the result is available in the Result register (ADC.RES), and the Result Ready interrupt flag is set (RESRDY in ADC.INTFLAG). The interrupt flag will © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 422 ATtiny807/1607 ADC - Analog-to-Digital Converter be cleared when the result is read from the Result registers, or by writing a '1' to the RESRDY bit in ADC.INTFLAG. Figure 29-8. ADC Timing Diagram - Single Conversion 2 3 4 6 8 5 7 1 Cycle Number 9 10 11 13 12 ADC clock ADC enable STCONV RESRDY IF RESH RESL Result MSB Result LSB conversion complete 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: SampleTime = 2 + SAMPDLY + SAMPLEN �CLK_ADC Figure 29-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 INITDLY (0 – 256 CLK_ADC cycles) SAMPDLY (0 – 15 CLK_ADC cycles) SAMPLEN (0 – 31 CLK_ADC cycles) 29.3.2.4 Changing Channel or Reference Selection The MUXPOS bits in the ADCn.MUXPOS register and the REFSEL bits in the ADCn.CTRLC register are buffered through a temporary register to which the CPU has random access. This ensures that the channel and reference selections only take place at a safe point during the conversion. The channel and reference selections are continuously updated until a conversion is started. Once the conversion starts, the channel and reference selections are locked to ensure sufficient sampling time for the ADC. Continuous updating resumes in the last CLK_ADC clock cycle before the conversion completes (RESRDY in ADCn.INTFLAGS is set). The conversion starts on the following rising CLK_ADC clock edge after the STCONV bit is written to '1'. 29.3.2.4.1 ADC Input Channels When changing channel selection, the user should observe the following guideline to ensure that the correct channel is selected: The channel should be selected before starting the conversion. The channel selection may be changed one ADC clock cycle after writing '1' to the STCONV bit. The ADC requires a settling time after switching the input channel - refer to the Electrical Characteristics section for details. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 423 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.3.2.4.2 ADC Voltage Reference The reference voltage for the ADC (VREF) controls the conversion range of the ADC. Input voltages that exceed the selected VREF will be converted to the maximum result value of the ADC, for an ideal 10-bit ADC this is 0x3FF. VREF can be selected by writing the Reference Selection bits (REFSEL) in the Control C register (ADC.CTRLC) as either VDD or an internal reference from the VREF peripheral. VDD is connected to the ADC through a passive switch. The internal reference is generated from an internal bandgap reference through an internal amplifier, and is controlled by the Voltage Reference (VREF) peripheral. Related Links 18. VREF - Voltage Reference 29.3.2.4.3 Analog Input Circuitry The analog input circuitry is illustrated in Figure 29-10. An analog source applied to ADCn is subjected to the pin capacitance and input leakage of that pin (represented by IH and IL), regardless of whether that channel is selected as input for the ADC. When the channel is selected, the source must drive the S/H capacitor through the series resistance (combined resistance in the input path). The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such source is used, the sampling time will be negligible. If a source with higher impedance is used, the sampling time will depend on how long the source needs to charge the S/H capacitor, which can vary substantially. Figure 29-10. Analog Input Schematic IIH ADCn Rin Cin IIL VDD/2 29.3.2.5 ADC Conversion Result After the conversion is complete (RESRDY is '1'), the conversion result RES is available in the ADC Result Register (ADCn.RES). The result for a 10-bit conversion is given as: 1023 × �IN �REF where VIN is the voltage on the selected input pin and VREF the selected voltage reference (see description for REFSEL in ADCn.CTRLC and ADCn.MUXPOS). RES = 29.3.2.6 Temperature Measurement The temperature measurement is based on an on-chip temperature sensor. For a temperature measurement, follow these steps: 1. Configure the internal voltage reference to 1.1V by configuring the VREF peripheral. 2. Select the internal voltage reference by writing the REFSEL bits in ADCn.CTRLC to 0x0. 3. Select the ADC temperature sensor channel by configuring the MUXPOS register (ADCn.MUXPOS). This enables the temperature sensor. 4. In ADCn.CTRLD select INITDLY ≥ 32 µs × �CLK_ADC 5. In ADCn.SAMPCTRL select SAMPLEN ≥ 32 µs × �CLK_ADC © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 424 ATtiny807/1607 ADC - Analog-to-Digital Converter 6. 7. 8. In ADCn.CTRLC select SAMPCAP = 1 Acquire the temperature sensor output voltage by starting a conversion. Process the measurement result as described below. The measured voltage has a linear relationship to the temperature. Due to process variations, the temperature sensor output voltage varies between individual devices at the same temperature. The individual compensation factors are determined during the production test and saved in the Signature Row: • SIGROW.TEMPSENSE0 is a gain/slope correction • SIGROW.TEMPSENSE1 is an offset correction In order to achieve accurate results, the result of the temperature sensor measurement must be processed in the application software using factory calibration values. The temperature (in Kelvin) is calculated by this rule: Temp = (((RESH > 8 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: int8_t sigrow_offset = SIGROW.TEMPSENSE1; // Read signed value from signature row uint8_t sigrow_gain = SIGROW.TEMPSENSE0; // Read unsigned value from signature row uint16_t adc_reading = 0; // ADC conversion result with 1.1 V internal reference uint32_t temp = adc_reading - sigrow_offset; temp *= sigrow_gain; // Result might overflow 16 bit variable (10bit+8bit) temp += 0x80; // Add 1/2 to get correct rounding on division below temp >>= 8; // Divide result to get Kelvin uint16_t temperature_in_K = temp; Related Links 6.10.2.3 TEMPSENSEn 29.3.2.7 Window Comparator Mode The ADC can raise the WCOMP flag in the Interrupt and Flag register (ADCn.INTFLAG) and request an interrupt (WCOMP) when the result of a conversion is above and/or below certain thresholds. The available modes are: • The result is under a threshold • The result is over a threshold • The result is inside a window (above a lower threshold, but below the upper one) • The result is outside a window (either under the lower or above the upper threshold) The thresholds are defined by writing to the Window Comparator Threshold registers (ADCn.WINLT and ADCn.WINHT). Writing to the Window Comparator mode bit field (WINCM) in the Control E register (ADCn.CTRLE) selects the conditions when the flag is raised and/or the interrupt is requested. Assuming the ADC is already configured to run, follow these steps to use the Window Comparator mode: 1. Choose which Window Comparator to use (see the WINCM description in ADCn.CTRLE), and set the required threshold(s) by writing to ADCn.WINLT and/or ADCn.WINHT. 2. Optional: enable the interrupt request by writing a '1' to the Window Comparator Interrupt Enable bit (WCOMP) in the Interrupt Control register (ADCn.INTCTRL). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 425 ATtiny807/1607 ADC - Analog-to-Digital Converter 3. Enable the Window Comparator and select a mode by writing a non-zero value to the WINCM bit field in ADCn.CTRLE. When accumulating multiple samples, the comparison between the result and the threshold will happen after the last sample was acquired. Consequently, the flag is raised only once, after taking the last sample of the accumulation. 29.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). 29.3.4 Interrupts Table 29-2. Available Interrupt Vectors and Sources For Devices With Up to 8 KB Flash Offset Name Vector Description Conditions 0x00 RESRDY Result Ready interrupt The conversion result is available in the Result register (ADC.RES). 0x02 WCOMP Window Comparator interrupt As defined by WINCM in ADC.CTRLE. Table 29-3. Available Interrupt Vectors and Sources For Devices With More Than 8 KB Flash Offset Name Vector Description Conditions 0x00 RESRDY Result Ready interrupt The conversion result is available in the Result register (ADC.RES). 0x04 WCOMP Window Comparator interrupt As defined by WINCM in ADC.CTRLE. 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. 29.3.5 Sleep Mode Operation The ADC is by default disabled in Standby Sleep mode. The ADC can stay fully operational in Standby Sleep mode if the Run in Standby bit (RUNSTDBY) in the Control A register (ADC.CTRLA) is written to '1'. When the device is entering Standby Sleep mode when RUNSTDBY is '1', the ADC will stay active, hence any ongoing conversions will be completed and interrupts will be executed as configured. In Standby Sleep mode an ADC conversion must be triggered via the Event System (EVSYS). The peripheral clock is requested if needed and is turned OFF after the conversion is completed. When an input event trigger occurs, the positive edge will be detected, the Start Conversion bit (STCONV) in the Command register (ADC.COMMAND) will be set, and the conversion will start. When © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 426 ATtiny807/1607 ADC - Analog-to-Digital Converter the conversion is completed, the Result Ready Flag (RESRDY) in the Interrupt Flags register (ADC.INTFLAGS) is set and the STCONV bit in ADC.COMMAND is cleared. The reference source and supply infrastructure need time to stabilize when activated in Standby Sleep mode. Configure a delay for the start of the first conversion by writing a non-zero value to the Initial Delay bits (INITDLY) in the Control D register (ADC.CTRLD). In Power-Down Sleep mode, no conversions are possible. Any ongoing conversions are halted and will be resumed when going out of sleep. At the end of the conversion, the Result Ready Flag (RESRDY) will be set, but the content of the result registers (ADC.RES) is invalid since the ADC was halted in the middle of a conversion. Related Links 11. SLPCTRL - Sleep Controller 29.3.6 Synchronization Not applicable. 29.3.7 Configuration Change Protection Not applicable. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 427 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.4 Register Summary - ADCn Offset Name Bit Pos. 0x00 CTRLA 7:0 0x01 CTRLB 7:0 0x02 CTRLC 7:0 SAMPCAP 0x03 CTRLD 7:0 INITDLY[2:0] 0x04 CTRLE 7:0 0x05 SAMPCTRL 7:0 SAMPLEN[4:0] 0x06 MUXPOS 7:0 MUXPOS[4:0] RUNSTBY RESSEL ENABLE SAMPNUM[2:0] REFSEL[1:0] PRESC[2:0] ASDV SAMPDLY[3:0] WINCM[2:0] 0x07 Reserved 0x08 COMMAND 7:0 STCONV 0x09 EVCTRL 7:0 STARTEI 0x0A INTCTRL 7:0 WCOMP 0x0B INTFLAGS 7:0 WCOMP 0x0C DBGCTRL 7:0 0x0D TEMP 7:0 RESRDY RESRDY DBGRUN TEMP[7:0] 0x0E ... Reserved 0x0F 0x10 RES 0x12 WINLT 0x14 WINHT 0x16 CALIB 29.5 7:0 RES[7:0] 15:8 RES[15:8] 7:0 WINLT[7:0] 15:8 WINLT[15:8] 7:0 WINHT[7:0] 15:8 WINHT[15:8] 7:0 DUTYCYC Register Description © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 428 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.1 Control A Name:  Offset:  Reset:  Property:  Bit 7 Access Reset CTRLA 0x00 0x00 - 6 5 4 3 2 1 0 RUNSTBY RESSEL ENABLE R/W R/W R/W 0 0 0 Bit 7 – RUNSTBY Run in Standby This bit determines whether the ADC needs to run when the chip is in Standby Sleep mode. Bit 2 – RESSEL Resolution Selection This bit selects the ADC resolution. Value 0 1 Description Full 10-bit resolution. The 10-bit ADC results are accumulated or stored in the ADC Result register (ADC.RES). 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. Bit 0 – ENABLE ADC Enable Value 0 1 Description ADC is disabled ADC is enabled © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 429 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.2 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x01 0x00 - 6 5 4 3 2 1 0 SAMPNUM[2:0] Access Reset R/W R/W R/W 0 0 0 Bits 2:0 – SAMPNUM[2:0] Sample Accumulation Number Select These bits select how many consecutive ADC sampling results are accumulated automatically. When this bit is written to a value greater than 0x0, the according number of consecutive ADC sampling results are accumulated into the ADC Result register (ADC.RES) in one complete conversion. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name NONE ACC2 ACC4 ACC8 ACC16 ACC32 ACC64 - © 2018 Microchip Technology Inc. Description No accumulation. 2 results accumulated. 4 results accumulated. 8 results accumulated. 16 results accumulated. 32 results accumulated. 64 results accumulated. Reserved. Datasheet Preliminary DS40002030A-page 430 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.3 Control C Name:  Offset:  Reset:  Property:  Bit 7 CTRLC 0x02 0x00 - 6 5 SAMPCAP 4 3 2 REFSEL[1:0] 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 Bit 6 – SAMPCAP Sample Capacitance Selection This bit selects the sample capacitance, and hence, the input impedance. The best value is dependent on the reference voltage and the application's electrical properties. Value 0 1 Description Recommended for reference voltage values below 1V. Reduced size of sampling capacitance. Recommended for higher reference voltages. Bits 5:4 – REFSEL[1:0] Reference Selection These bits select the voltage reference for the ADC. Value 0x0 0x1 Other Name INTERNAL VDD - Description Internal reference VDD Reserved. Bits 2:0 – PRESC[2:0] Prescaler These bits define the division factor from the peripheral clock (CLK_PER) to the ADC clock (CLK_ADC). Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Name DIV2 DIV4 DIV8 DIV16 DIV32 DIV64 DIV128 DIV256 © 2018 Microchip Technology Inc. Description CLK_PER divided by 2 CLK_PER divided by 4 CLK_PER divided by 8 CLK_PER divided by 16 CLK_PER divided by 32 CLK_PER divided by 64 CLK_PER divided by 128 CLK_PER divided by 256 Datasheet Preliminary DS40002030A-page 431 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.4 Control D Name:  Offset:  Reset:  Property:  Bit 7 CTRLD 0x03 0x00 - 6 5 4 INITDLY[2:0] Access Reset 3 2 ASDV 1 0 SAMPDLY[3:0] R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:5 – INITDLY[2:0] Initialization Delay These bits define the initialization/start-up delay before the first sample when enabling the ADC or changing to an internal reference voltage. Setting this delay will ensure that the reference, MUXes, etc. are ready before starting the first conversion. The initialization delay will also take place when waking up from deep sleep to do a measurement. The delay is expressed as a number of CLK_ADC cycles. Value 0x0 0x1 0x2 0x3 0x4 0x5 Other Name DLY0 DLY16 DLY32 DLY64 DLY128 DLY256 - Description Delay 0 CLK_ADC cycles. Delay 16 CLK_ADC cycles. Delay 32 CLK_ADC cycles. Delay 64 CLK_ADC cycles. Delay 128 CLK_ADC cycles. Delay 256 CLK_ADC cycles. Reserved Bit 4 – ASDV Automatic Sampling Delay Variation Writing this bit to ’1’ enables automatic sampling delay variation between ADC conversions. The purpose of varying sampling instant is to randomize the sampling instant and thus avoid standing frequency components in the frequency spectrum. The value of the SAMPDLY bits is automatically incremented by one after each sample. When the Automatic Sampling Delay Variation is enabled and the SAMPDLY value reaches 0xF, it wraps around to 0x0. Value 0 1 Name ASVOFF ASVON Description The Automatic Sampling Delay Variation is disabled. The Automatic Sampling Delay Variation is enabled. Bits 3:0 – SAMPDLY[3:0] Sampling Delay Selection These bits define the delay between consecutive ADC samples. The programmable Sampling Delay allows modifying the sampling frequency during hardware accumulation, to suppress periodic noise sources that may otherwise disturb the sampling. The SAMPDLY field can also be modified automatically from one sampling cycle to another, by setting the ASDV bit. The delay is expressed as CLK_ADC cycles and is given directly by the bit field setting. The sampling cap is kept open during the delay. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 432 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.5 Control E Name:  Offset:  Reset:  Property:  Bit 7 CTRLE 0x4 0x00 - 6 5 4 3 2 1 0 WINCM[2:0] Access Reset R/W R/W R/W 0 0 0 Bits 2:0 – WINCM[2:0] Window Comparator Mode This field enables and defines when the interrupt flag is set in Window Comparator mode. RESULT is the 16-bit accumulator result. WINLT and WINHT are 16-bit lower threshold value and 16-bit higher threshold value, respectively. Value 0x0 0x1 0x2 0x3 0x4 Other Name NONE BELOW ABOVE INSIDE OUTSIDE - © 2018 Microchip Technology Inc. Description No Window Comparison (default) RESULT < WINLT RESULT > WINHT WINLT < RESULT < WINHT RESULT < WINLT or RESULT >WINHT) Reserved Datasheet Preliminary DS40002030A-page 433 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.6 Sample Control Name:  Offset:  Reset:  Property:  Bit 7 SAMPCTRL 0x5 0x00 - 6 5 4 3 2 1 0 SAMPLEN[4:0] Access Reset R/W R/W R/W R/W R/W 0 0 0 0 0 Bits 4:0 – SAMPLEN[4:0] Sample Length These bits extend the ADC sampling length in a number of CLK_ADC cycles. By default, the sampling time is two CLK_ADC cycles. Increasing the sampling length allows sampling sources with higher impedance. The total conversion time increases with the selected sampling length. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 434 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.7 MUXPOS Name:  Offset:  Reset:  Property:  Bit 7 MUXPOS 0x06 0x00 - 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 Bits 4:0 – MUXPOS[4:0] MUXPOS This bit field selects which single-ended analog input is connected to the ADC. If these bits are changed during a conversion, the change will not take effect until this conversion is complete. Value 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x1C 0x1D 0x1F Other Name AIN0 AIN1 AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 AIN8 AIN9 AIN10 AIN11 Reserved INTREF GND - © 2018 Microchip Technology Inc. Description ADC input pin 0 ADC input pin 1 ADC input pin 2 ADC input pin 3 ADC input pin 4 ADC input pin 5 ADC input pin 6 ADC input pin 7 ADC input pin 8 ADC input pin 9 ADC input pin 10 ADC input pin 11 Reserved Internal reference (from VREF peripheral) 0V (GND) Reserved Datasheet Preliminary DS40002030A-page 435 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.8 Command Name:  Offset:  Reset:  Property:  Bit 7 COMMAND 0x08 0x00 - 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 Bit 0 – STCONV Start Conversion Writing a '1' to this bit will start a single measurement. STCONV will read as '1' as long as a conversion is in progress. When the conversion is complete, this bit is automatically cleared. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 436 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.9 Event Control Name:  Offset:  Reset:  Property:  Bit 7 EVCTRL 0x09 0x00 - 6 5 4 3 2 1 0 STARTEI Access R/W Reset 0 Bit 0 – STARTEI Start Event Input This bit enables using the event input as trigger for starting a conversion. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 437 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.10 Interrupt Control Name:  Offset:  Reset:  Property:  Bit 7 INTCTRL 0x0A 0x00 - 6 5 4 3 Access Reset 2 1 0 WCOMP RESRDY R/W R/W 0 0 Bit 1 – WCOMP Window Comparator Interrupt Enable Writing a '1' to this bit enables window comparator interrupt. Bit 0 – RESRDY Result Ready Interrupt Enable Writing a '1' to this bit enables result ready interrupt. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 438 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.11 Interrupt Flags Name:  Offset:  Reset:  Property:  Bit 7 INTFLAGS 0x0B 0x00 - 6 5 4 3 Access Reset 2 1 0 WCOMP RESRDY R/W R/W 0 0 Bit 1 – WCOMP Window Comparator Interrupt Flag This window comparator flag is set when the measurement is complete and if the result matches the selected Window Comparator mode defined by WINCM (ADCn.CTRLE). The comparison is done at the end of the conversion. The flag is cleared by either writing a '1' to the bit position or by reading the Result register (ADCn.RES). Writing a '0' to this bit has no effect. Bit 0 – RESRDY Result Ready Interrupt Flag The result ready interrupt flag is set when a measurement is complete and a new result is ready. The flag is cleared by either writing a '1' to the bit location or by reading the Result register (ADCn.RES). Writing a '0' to this bit has no effect. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 439 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.12 Debug Run Name:  Offset:  Reset:  Property:  Bit 7 DBGCTRL 0x0C 0x00 - 6 5 4 3 2 1 0 DBGRUN Access R/W Reset 0 Bit 0 – DBGRUN Debug Run Value 0 1 Description The peripheral is halted in Break Debug mode and ignores events The peripheral will continue to run in Break Debug mode when the CPU is halted © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 440 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.13 Temporary Name:  Offset:  Reset:  Property:  TEMP 0x0D 0x00 - 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 Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – TEMP[7:0] Temporary Temporary register for read/write operations in 16-bit registers. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 441 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.14 Result Name:  Offset:  Reset:  Property:  RES 0x10 0x00 - 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 Access R R R R R R R R Reset 0 0 0 0 0 0 0 0 RES[7:0] Bits 15:8 – RES[15:8] Result high byte These bits constitute the MSB of the ADCn.RES register, where the MSb is RES[15]. The ADC itself has a 10-bit output, ADC[9:0], where the MSb is ADC[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). Bits 7:0 – RES[7:0] Result low byte These bits constitute the LSB of ADC/Accumulator Result, (ADCn.RES) register. 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). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 442 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.15 Window Comparator Low Threshold Name:  Offset:  Reset:  Property:  WINLT 0x12 0x00 - 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 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 WINLT[7:0] Access Reset Bits 15:8 – WINLT[15:8] Window Comparator Low Threshold High Byte These bits hold the MSB of the 16-bit register. Bits 7:0 – WINLT[7:0] Window Comparator Low Threshold Low Byte These bits hold the LSB of the 16-bit register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 443 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.16 Window Comparator High Threshold Name:  Offset:  Reset:  Property:  WINHT 0x14 0x00 - 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 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 WINHT[7:0] Access Reset Bits 15:8 – WINHT[15:8] Window Comparator High Threshold High Byte These bits hold the MSB of the 16-bit register. Bits 7:0 – WINHT[7:0] Window Comparator High Threshold Low Byte These bits hold the LSB of the 16-bit register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 444 ATtiny807/1607 ADC - Analog-to-Digital Converter 29.5.17 Calibration Name:  Offset:  Reset:  Property:  Bit 7 CALIB 0x16 0x01 - 6 5 4 3 2 1 0 DUTYCYC Access Reset R/W R/W R/W 0 0 1 Bit 0 – DUTYCYC Duty Cycle This bit determines the duty cycle of the ADC clock. ADCclk > 1.5 MHz requires a minimum operating voltage of 2.7V Value 0 1 Description 50% Duty Cycle must be used if ADCclk > 1.5 MHz 25% Duty Cycle (high 25% and low 75%) must be used for ADCclk ≤ 1.5 MHz © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 445 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30. UPDI - Unified Program and Debug Interface 30.1 Features • • • 30.2 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 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 1wire 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 446 ATtiny807/1607 UPDI - Unified Program and Debug Interface Related Links 9. NVMCTRL - Nonvolatile Memory Controller 30.3.7 Enabling of KEY Protected Interfaces 30.2.1 Block Diagram Figure 30-1. UPDI Block Diagram ASI Memories UPDI PAD (RX/TX Data) UPDI Physical layer Bus Matrix UPDI Controller UPDI Access layer NVM Peripherals ASI Access ASI Internal Interfaces OCD NVM Controller System Management 30.2.2 System Dependencies In order to use this peripheral, other parts of the system must be configured correctly, as described below. Table 30-1. UPDI System Dependencies Dependency Applicable Peripheral Clocks Yes CLKCTRL I/O Lines and Connections Yes PORT Interrupts No - Events Yes EVSYS Debug Yes UPDI Related Links 30.2.2.2 I/O Lines and Connections 30.2.2.4 Power Management © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 447 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.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 30-2. UPDI Clock Domains ASI SYNCH UPDI Controller UPDI Physical layer Clock Controller UPDI clk source ~ UPDI Access layer Clock Controller Clk_UPDI Clk_sys Clk_sys UPDI CLKSEL ~ Related Links 10. CLKCTRL - Clock Controller 30.2.2.2 I/O Lines and Connections To operate the UPDI, the RESET pin must be set to UPDI mode. This is not done through the port I/O pin configuration as regular I/O pins, but through setting the RESET Pin Configuration (RSTPINCFG) bits in FUSE.SYSCFG0, as described in 30.3.2.1 UPDI Enable with Fuse Override of RESET Pin, or by following the UPDI 12V enable sequence from 30.3.2.2 UPDI Enable with 12V Override of RESET Pin. Pull enable, input enable, and output enable settings are automatically controlled by the UPDI when active. 30.2.2.3 Events The events of this peripheral are connected to the Event System. Related Links 14. EVSYS - Event System 30.2.2.4 Power Management The UPDI physical layer continues to operate in any Sleep mode and is always accessible for a connected debugger, but read/write access to the system bus is restricted in Sleep modes where the CPU clock is switched OFF. The UPDI can be enabled at any time, independent of the system Sleep state. See 30.3.9 Sleep Mode Operation for details on UPDI operation during Sleep modes. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 448 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.3 Functional Description 30.3.1 Principle of Operation Communication through the UPDI is based on standard UART communication, using a fixed frame format, and automatic baud rate detection for clock and data recovery. In addition to the data frame, there are several control frames which are important to the communication. The supported frame formats are presented in Figure 30-3. Figure 30-3. Supported UPDI Frame Formats DATA St 0 1 2 3 4 5 6 7 P S1 S2 P S1 S2 P S1 S2 IDLE BREAK SYNCH (0x55) St Synch Part End_synch ACK (0x40) St Data Frame IDLE Frame BREAK SYNCH ACK Data frame consists of one Start bit (always low), eight data bits, one parity bit (even parity), 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. Special frame that consists of 12 high bits. This is the same as keeping the transmission line in an Idle state. 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. 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. 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 449 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.3.1.1 UPDI UART All transmission and reception of serial data on the UPDI is achieved using the UPDI frames presented in Figure 30-3. Communication is initiated from the master (debugger) side, and every transmission must start with a SYNCH character upon which the UPDI can recover the transmission baud rate, and store this setting for the coming data. The baud rate set by the SYNCH character will be used for both reception and transmission for the instruction byte received after the SYNCH. See 30.3.3 UPDI Instruction Set for details on when the next SYNCH character is expected in the instruction stream. There is no writable baud rate register in the UPDI, so the baud rate sampled from the SYNCH character is used for data recovery by sampling the Start bit, and performing a majority vote on the middle samples. This process is repeated for all bits in the frame, including the parity bit and two Stop bits. The baud generator uses 16 samples, and the majority voting is done on sample 7, 8, and 9. Figure 30-4. UPDI UART Start Bit and Data/Parity/Stop Bit Sampling RxD IDLE Sample 0 0 START 1 2 3 4 5 6 7 RxD BIT 0 8 9 10 11 12 13 14 15 16 1 2 3 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 30-2 for recommended maximum and minimum baud rate settings. Table 30-2. Recommended UART Baud Rate Based on UPDICLKSEL Setting UPDICLKSEL[1:0] MAX Recommended Baud Rate MIN Recommended Baud Rate 0x1 (16 MHz) 0.9 Mbps 0.300 kbps 0x2 (8 MHz) 450 kbps 0.150 kbps 0x3 (4 MHz) - Default 225 kbps 0.075 kbps 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 30-3. Receiver Baud Rate Error Data + Parity Bits Rslow Rfast Max. Total Error [%] Recommended Max. RX Error [%] 9 96.39 104.76 +4.76/-3.61 +1.5/-1.5 30.3.1.2 BREAK Character The BREAK character is used to reset the internal state of the UPDI to the default setting. This is useful if the UPDI enters an error state due to a communication error, or when the synchronization between the debugger and the UPDI is lost. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 450 ATtiny807/1607 UPDI - Unified Program and Debug Interface 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 30-4: Table 30-4. Recommended BREAK Character Duration 30.3.2 UPDICLKSEL[1:0] Recommended BREAK Character Duration 0x1 (16 MHz) 6.15 ms 0x2 (8 MHz) 12.30 ms 0x3 (4 MHz) - Default 24.60 ms Operation The UPDI must be enabled before the UART communication can start. 30.3.2.1 UPDI Enable with Fuse Override of RESET Pin When the RESET Pin Configuration (RSTPINCFG) bits in FUSE.SYSCFG0 are 0x1, the RESET pin will be overridden, and the UPDI will take control of the pin and configure it as input with pull-up. When the pull-up is detected by a connected debugger, the UPDI enable sequence, as depicted below, is started. Figure 30-5. UPDI Enable Sequence with UPDI PAD Enabled By Fuse 1 Fuse read in. Pull-up enabled. Ready to receive init. 2 Drive low from debugger to request UPDI clock 3 UPDI clock ready; Communication channel ready. RESET 1 2 Hi-Z St D0 D1 D2 Handshake / BREAK TRES UPDI.rxd UPDI.txd D3 D4 D5 D6 D7 Sp SYNC (0x55) (Autobaud) (Ignore) 3 Hi-Z Hi-Z UPDI.txd = 0 TUPDI debugger. UPDI.txd Hi-Z Hi-Z Debugger.txd = 0 TDeb0 Debugger.txd = z 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 451 ATtiny807/1607 UPDI - Unified Program and Debug Interface 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 31.17 UPDI Timing 31.17 UPDI Timing 30.3.2.2 UPDI Enable with 12V Override of RESET Pin GPIO or Reset functionality on the RESET pin can be overridden by the UPDI by using 12V programming. By applying a 12V pulse to the RESET pin, the pin functionality is switched to UPDI, independent of RSTPINCFG in FUSE.SYSCFG0. It is recommended to always reset the device before starting the 12V enable sequence. During power-up, the Power-on Reset (POR) must be released before the 12V pulse can be applied. The duration of the pulse is recommended in the range from 100 μs to 1 ms, before tri-stating. When applying the rising edge of the 12V pulse, the UPDI will be reset. After tri-stating, the UPDI will remain in Reset until the RESET pin is driven low by the debugger. This will release the UPDI Reset and initiate the same enable sequence as explained in 30.3.2.1 UPDI Enable with Fuse Override of RESET Pin. The following figure shows the 12V enable sequence. Figure 30-6. UPDI Enable Sequence by 12V Programming 1 Fused pin Function disabled; UPDI pin function enabled. 2 UPDI interface enabled with pull-up. 1 (Ignore) St Hi-Z D0 D1 D2 D3 D4 D5 D6 D7 Sp UPDIPAD 12V ramp Tmin10ns Tmax4ms Handshake / BREAK Debugger.txd = z Tmin10us Tmin1us Tmax200us Tmax10us SYNC (0x55) (Autobaud) (Ignore) UPDI.rxd Hi-Z UPDI.txd Hi-Z 2 UPDI.txd = 0 Tmin10us, Tmax200us debugger. UPDI.txd debugger. UPDI.o12v Hi-Z 12V Hi-Z Debugger.txd = 0 Tmin200ns Tmax1us Debugger.txd = z. Tmin200us, Tmax14ms 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 452 ATtiny807/1607 UPDI - Unified Program and Debug Interface 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. 30.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 30.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 30-2 for recommended baud rate operating ranges. 30.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. 30.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 timeout 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 30.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 30-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. 30.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 453 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-7. UPDI Direction Change by Inserting IDLE Bits RX Data Frame St R X D a ta F ra m e Dir Change P Data from debugger to UPDI S1 S2 I D L E b it s TX Data Frame St T X D a ta F r a m e G uard Tim e # IDLE bits inserted P S1 S2 Data from UPDI to debugger 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 30.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. 30.3.3 UPDI Instruction Set Communication through the UPDI is based on a small instruction set. The instructions are used to access the internal UPDI and ASI Control and Status (CS) space, as well as the memory mapped system space. All instructions are byte instructions and must be preceded by a SYNCH character to determine the baud rate for the communication. See 30.3.1.1 UPDI UART for information about setting the baud rate for the transmission. The following figure gives an overview of the UPDI instruction set. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 454 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-8. UPDI Instruction Set Overview Opcode L DS STS 0 0 0 1 Size A 0 0 0 0 Opcode LD ST 0 0 0 1 Ptr 1 1 Size B Size A/B 0 STCS 1 1 0 1 0 0 0 0 0 LD S 0 0 1 LD 0 1 0 STS 0 1 1 ST 1 0 0 L D C S ( L D S C o n t r o l/ S ta t u s ) 1 0 1 REPEAT 1 1 0 S T C S ( S T S C o n tr o l/ S ta t u s ) 1 1 1 KEY S ize A - A d d re s s s ize 0 CS Address L DCS OPCODE 0 0 0 0 B y te 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 P tr - P o in ter a c c es s 0 0 * (p tr) 0 1 * (p tr+ + ) 1 0 p tr 1 1 R e s e rv e d S ize B - D ata s ize Size B REPEA T 1 0 1 0 0 0 SIB K EY 1 1 1 0 0 Size C 0 0 B y te 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 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 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 S ize C - K ey s ize 0 0 0 1 6 4 b it s ( 8 B y t e s ) 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 . © 2018 Microchip Technology Inc. 0 R e c e iv e K E Y 1 S e n d S IB Datasheet Preliminary DS40002030A-page 455 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.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 30-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 30-9. LDS Instruction Operation OPCODE Size A Size B S ize A - A d d re s s s ize 0 L DS 0 0 0 0 0 B y te 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 S ize B - D ata s ize 0 0 B y te 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 (0x55) LDS A d r_ 0 Rx A d r_ n D a ta _ 0 D a ta _ n Tx ΔGT 30.3.3.2 STS - Store Data to Data Space Using Direct Addressing The STS instruction is used to store data that is shifted serially into the PHY layer to the bus matrix address space. The STS instruction is based on direct addressing, where the address is the first set of operands, and data is the second set. The size of the address and data operands are given by the size fields presented in the figure below. The maximum size for both address and data is 16 bits. STS supports repeated memory access when combined with the REPEAT instruction. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 456 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-10. STS Instruction Operation OPCODE Size A Size B S ize A - A d d re s s s ize 0 STS 1 0 0 0 0 B y te 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 S ize B - D ata s ize 0 0 B y te 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 (0x55) STS A d r_ 0 DATA SIZE A d r_ n D a ta _ 0 Rx D a ta _ n ACK ΔGT ACK Tx ΔGT The transfer protocol for an STS instruction is depicted in the figure as well, following this sequence: 1. 2. 3. The address is sent. An Acknowledge (ACK) is sent back from the UPDI if the transfer was successful. 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. 30.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 457 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-11. LD Instruction Operation OPCODE LD Synch (0x55) 0 0 Ptr 1 Size A/B P tr - P o in ter a c c es s 0 0 0 * (p tr) 0 1 * (p tr+ + ) 1 0 p tr 1 1 R e s e rv e d S ize A - A d d re s s s ize S ize B - D ata s ize 0 0 B y te 0 0 B y te 0 1 W o rd (2 B y te s ) 0 1 W o rd (2 B y te s ) 1 0 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 1 1 R e s e rv e d LD DATA SIZE D a ta _ 0 Rx 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. 30.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 458 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-12. ST Instruction Operation OPCODE ST 0 1 Ptr 1 Size A/B P tr - P o in ter a c c es s 0 0 0 * (p tr) 0 1 * (p tr+ + ) 1 0 p tr 1 1 R e s e rv e d S ize A - A d d re s s s ize S ize B - D ata s ize 0 0 B y te 0 0 B y te 0 1 W o rd (2 B y te s ) 0 1 W o rd (2 B y te s ) 1 0 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 1 1 R e s e rv e d ADDRESS_SIZE Synch (0x55) ST ADR _0 ADR _n Rx ACK Tx ΔGT Block SIZE Synch (0x55) ST D a ta _ 0 Rx D a ta _ n 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 sent back 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 © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 459 ATtiny807/1607 UPDI - Unified Program and Debug Interface • 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. 30.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 30-13. LCDS Instruction Operation OPCODE L DCS 1 0 CS Address 0 CS Address (CS - Control/Status reg.) 0 0 0 0 Reg 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 0 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. 30.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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 460 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-14. STCS Instruction Operation OPCODE STCS 1 1 CS Address 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 .) 0 Synch (0x55) STCS 0 0 0 0 R eg 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 D a ta Rx Tx Figure 30-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. 30.3.3.7 REPEAT - Set Instruction Repeat Counter The REPEAT instruction is used to store the repeat count value into the UPDI Repeat Counter register. When instructions are used with REPEAT, protocol overhead for SYNCH and Instruction Frame can be omitted on all instructions except the first instruction after the REPEAT is issued. REPEAT is most useful for memory instructions (LD, ST, LDS, STS), but all instructions can be repeated, except the REPEAT instruction itself. The DATA_SIZE opcode field refers to the size of the repeat value. Only byte size (up to 255 repeats) is supported. The instruction that is loaded directly after the REPEAT instruction will be repeated RPT_0 times. The instruction will be issued a total of RPT_0 + 1 times. An ongoing repeat can only be aborted by sending a BREAK character. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 461 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-15. REPEAT Instruction Operation OPCODE REPEA T 1 0 Size B 1 0 0 0 S ize B - D ata s ize 0 0 B y te 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 (0x55) REPEA T RPT_0 Rpt nr of Blocks of DATA_SIZE DATA_SIZE Synch (0x55) ST (p t r + + ) D a ta _ 0 D a ta _ n DATA_SIZE DATA_SIZE D a ta B _ 1 D a ta B _ n Rx ACK Δd ACK Δd Δd Δd Tx Δd The figure above gives an example of repeat operation with an ST instruction using pointer postincrement 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). 30.3.3.8 KEY - Set Activation KEY The KEY instruction is used for communicating KEY bytes to the UPDI, opening up for executing protected features on the device. See Table 30-5 for an overview of functions that are activated by KEYs. For the KEY instruction, only 64-bit KEY size is supported. If the System Information Block (SIB) field of the KEY instruction is set, the KEY instruction returns the SIB instead of expecting incoming KEY bytes. Maximum supported size for SIB is 128 bits. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 462 ATtiny807/1607 UPDI - Unified Program and Debug Interface Figure 30-16. KEY Instruction Operation SIB K EY 1 1 1 0 Size C 0 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 ) ( 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 (0x55) K EY KEY_0 KEY_n Rx Tx Synch (0x55) Rx K EY S IB _ 0 Δgt S IB _ n Tx 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. 30.3.4 System Clock Measurement with UPDI It is possible to use the UPDI to get an accurate measurement of the system clock frequency, by using the UPDI event connected to TCB with Input Capture capabilities. A recommended setup flow for this feature is given by the following steps: • Set up TCBn.CTRLB with setting CNTMODE=0x3, Input Capture Frequency Measurement mode. • Write CAPTEI=1 in TCBn.EVCTRL to enable Event Interrupt. Keep EDGE = 0 in TCBn.EVCTRL. • Configure the Event System as described in 30.3.8 Events. • For the SYNCH character used to generate the UPDI events, it is recommended to use a slow baud rate in the range of 10 kbps - 50 kbps to get a more accurate measurement on the value captured by the timer between each UPDI event. One particular thing is that if the capture is set up to trigger an interrupt, the first captured value should be ignored. The second captured value based © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 463 ATtiny807/1607 UPDI - Unified Program and Debug Interface • 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 30-17. UPDI System Clock Measurement Events Ignore first capture event 200us UPDI_ Input TCB_CCMP 30.3.5 CAPT_1 CAPT_2 CAPT_3 Interbyte Delay When loading data with the UPDI, or reading out the System Information Block, the output data will normally come out with two IDLE bits between each transmitted byte for a multibyte transfer. Depending on the application on the receiver side, data might be coming out too fast when there are no extra IDLE bits between each byte. By enabling the IBDLY feature in UPDI.CTRLB, two extra Stop bits will be inserted between each byte to relax the sampling time for the debugger. Interbyte delay works in the same way as a guard time, by inserting extra IDLE bits, but only a fixed number of IDLE bits and only for multibyte transfers. The first transmitted byte after a direction change will be subject to the regular Guard Time before it is transmitted, and the interbyte delay is not added to this time. Figure 30-18. Interbyte Delay Example with LD and RPT Too fast transm ission, no interbyte delay RX Debugger Data TX RPT CNT LD*(ptr) GT Debugger Processing S D0 B D1 S B D2 D1lots D0 S B D3 S B D4 D1lost D2 S B D5 S B D4 Data sam pling ok with interbyte delay RX Debugger Data TX RPT CNT Debugger Processing LD*(ptr) GT S IB B D0 D0 S IB B D1 D1 D2 D2 S IB B D3 S B D3 In Figure 30-18, 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. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 464 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.3.6 System Information Block The System Information Block (SIB) can be read out at any time by setting the SIB bit in the KEY instruction from 30.3.3.8 KEY - Set Activation KEY. The SIB provides a compact form of providing information for the debugger, which is vital in identifying and setting up the proper communication channel with the part. The output of the SIB should be interpreted as ASCII symbols. The KEY size field should be set to 16 bytes when reading out the complete SIB, and an 8-byte size can be used to read out only the Family_ID. See Figure 30-19 for SIB format description, and which data is available at different readout sizes. Figure 30-19. System Information Block Format 16 8 30.3.7 [Byte][Bits] [6:0] [55:0] [7][7:0] [10:8][23:0] [13:11][23:0] [14][7:0] [15][7:0] Field Name Family_ID Reserved NVM_VERSION OCD_VERSION RESERVED DBG_OSC_FREQ Enabling of KEY Protected Interfaces Access to some internal interfaces and features are protected by the UPDI KEY mechanism. To activate a KEY, the correct KEY data must be transmitted by using the KEY instruction as described in KEY instruction. Table 30-5 describes the available KEYs, and the condition required when doing the operation with the KEY active. There is no requirement when shifting in the KEY, but you would, for instance, normally run a Chip Erase before enabling the NVMPROG KEY to unlock the device for debugging. But if the NVMPROGKEY is shifted in first, it will not be reset by shifting in the Chip Erase KEY afterwards. Table 30-5. KEY Activation Overview KEY Name Description Requirements for Operation Reset Chip Erase Start NVM Chip erase. Clear Lockbits None UPDI Disable/UPDI Reset NVMPROG Activate NVM Programming Lockbits Cleared. Programming Done/ ASI_SYS_STATUS.NVM UPDI Reset PROG set. USERROW-Write Program User Row on Locked part Lockbits Set. Write to KEY status bit/ ASI_SYS_STATUS.URO UPDI Reset WPROG set. Table 30-6 gives an overview of the available KEY signatures that must be shifted in to activate the interfaces. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 465 ATtiny807/1607 UPDI - Unified Program and Debug Interface Table 30-6. KEY Activation Signatures KEY Name KEY Signature (LSB Written First) Size Chip Erase 0x4E564D4572617365 64 bits NVMPROG 0x4E564D50726F6720 64 bits USERROW-Write 0x4E564D5573267465 64 bits 30.3.7.1 Chip Erase The following steps should be followed to issue a Chip Erase. 1. Enter the CHIPERASE KEY by using the KEY instruction. See Table 30-6 for the CHIPERASE signature. 2. 3. 4. 5. 6. Optional: Read the Chip Erase bit in the AS Key Status register (CHIPERASE in UPDI.ASI_KEY_STATUS) to see that the KEY is successfully activated. Write the Reset signature into the UPDI.ASI_RESET_REQ register. This will issue a System Reset. Write 0x00 to the ASI Reset Request register (UPDI.ASI_RESET_REQ) to clear the System Reset. Read the Lock Status bit in the ASI System Status register (LOCKSTATUS in UPDI.ASI_SYS_STATUS). Chip Erase is done when LOCKSTATUS == 0 in UPDI.ASI_SYS_STATUS. If LOCKSTATUS == 1, go to point 5 again. After a successful Chip Erase, the Lockbits will be cleared, and the UPDI will have full access to the system. Until Lockbits are cleared, the UPDI cannot access the system bus, and only CS-space operations can be performed. 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. 30.3.7.2 NVM Programming If the device is unlocked, it is possible to write directly to the NVM Controller using the UPDI. This will lead to unpredictable code execution if the CPU is active during the NVM programming. To avoid this, the following NVM Programming sequence should be executed. 1. 2. 3. 4. 5. 6. 7. Follow the Chip erase procedure as described in Chip Erase. If the part is already unlocked, this point can be skipped. Enter the NVMPROG KEY by using the KEY instruction. See Table 30-6 for the NVMPROG signature. Optional: Read the NVMPROG field in the KEY_STATUS register to see that the KEY has been activated. Write the Reset signature into the ASI_RESET_REQ register. This will issue a System Reset. Write 0x00 to the Reset signature in the ASI_RESET_REQ register to clear the System Reset. Read NVMPROG in ASI_SYS_STATUS. NVM Programming can start when NVMPROG == 1 in the ASI_SYS_STATUS register. If NVMPROG == 0, go to point 6 again. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 466 ATtiny807/1607 UPDI - Unified Program and Debug Interface 8. 9. 10. 11. Write data to NVM through the UPDI. Write the Reset signature into the ASI_RESET_REQ register. This will issue a System Reset. Write 0x00 to the Reset signature in ASI_RESET_REQ register to clear the System Reset. Programming is complete. 30.3.7.3 User Row Programming The User Row Programming feature allows the user to program new values to the User Row (USERROW) on a locked device. To program with this functionality enabled, the following sequence should be followed. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Enter the USERROW-Write KEY located in Table 30-6 by using the KEY instruction. See Table 30-6 for the UROWWRITE signature. Optional: Read the UROWWRITE bit field in UPDI.ASI_KEY_STATUS to see that the KEY has been activated. Write the Reset signature into the UPDI.ASI_RESET_REQ register. This will issue a System Reset. Write 0x00 to the Reset signature in the UPDI.ASI_RESET_REQ register to clear the System Reset. Read the UROWPROG bit in UPDI.ASI_SYS_STATUS. User Row Programming can start when UROWPROG == 1. If UROWPROG == 0, go to point 5 again. The writable area has a size of one EEPROM page, 32 bytes, and it is only possible to write User Row data to the first 32 byte addresses of the RAM. Addressing outside this memory range will result in a non-executed write. The data will map 1:1 with the User Row space when the data is copied into the User Row upon completion of the Programming sequence. When all User Row data has been written to the RAM, write the UROWWRITEFINAL bit in UPDI.ASI_SYS_CTRLA. Read the UROWPROG bit in UPDI.ASI_SYS_STATUS. The User Row Programming is completed when UROWPROG == 0. If UROWPROG == 1, go to point 9 again. Write the UROWWRITE bit in UPDI.ASI_KEY_STATUS. Write the Reset signature into the UPDI.ASI_RESET_REQ register. This will issue a System Reset. Write 0x00 to the Reset signature in the UPDI.ASI_RESET_REQ register to clear the System Reset. User Row Programming is complete. It is not possible to read back data from the SRAM in this mode. Only writing to the first 32 bytes of the SRAM is allowed. 30.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 30.3.4 System Clock Measurement with UPDI provides the details on how to set up the system for this operation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 467 ATtiny807/1607 UPDI - Unified Program and Debug Interface Related Links 14. EVSYS - Event System 30.3.9 Sleep Mode Operation The UPDI physical layer runs independently of all Sleep modes and the UPDI is always accessible for a connected debugger independent of the device Sleep mode. If the system enters a Sleep mode that turns the CPU clock OFF, the UPDI will not be able to access the system bus and read memories and peripherals. The UPDI physical layer clock is unaffected by the Sleep mode settings, as long as the UPDI is enabled. By reading the INSLEEP bit in UPDI.ASI_SYS_STATUS it is possible to monitor if the system domain is in Sleep mode. The INSLEEP bit is set if the system is in IDLE Sleep mode or deeper. It is possible to prevent the system clock from stopping when going into Sleep mode, by writing the CLKREQ bit in UPDI.ASI_SYS_CTRL to '1'. If this bit is set, the system Sleep mode state is emulated, and it is possible for the UPDI to access the system bus and read the peripheral registers even in the deepest Sleep modes. CLKREQ in UPDI.ASI_SYS_CTRL is by default '1', which means that the default operation is keeping the system clock on during Sleep modes. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 468 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.4 Register Summary - UPDI Offset Name Bit Pos. 0x00 STATUSA 7:0 0x01 STATUSB 7:0 0x02 CTRLA 7:0 0x03 CTRLB 7:0 UPDIREV[3:0] PESIG[2:0] IBDLY PARD DTD RSD NACKDIS CCDETDIS GTVAL[2:0] UPDIDIS 0x04 ... Reserved 0x06 0x07 ASI_KEY_STATUS 7:0 0x08 ASI_RESET_REQ 7:0 0x09 ASI_CTRLA 7:0 0x0A ASI_SYS_CTRLA 7:0 0x0B ASI_SYS_STATUS 7:0 0x0C ASI_CRC_STATUS 7:0 30.5 UROWWRITE NVMPROG CHIPERASE RSTREQ[7:0] UPDICLKSEL[1:0] UROWWRITE CLKREQ _FINAL RSTSYS INSLEEP NVMPROG UROWPROG LOCKSTATUS CRC_STATUS[2:0] Register Description These registers are readable only through the UPDI with special instructions and are NOT readable through the CPU. Registers at offset addresses 0x0-0x3 are the UPDI Physical configuration registers. Registers at offset addresses 0x4-0xC are the ASI level registers. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 469 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.1 Status A Name:  Offset:  Reset:  Property:  Bit 7 STATUSA 0x00 0x10 - 6 5 4 3 2 1 0 UPDIREV[3:0] Access R R R R Reset 0 0 0 1 Bits 7:4 – UPDIREV[3:0] UPDI Revision These bits are read-only and contain the revision of the current UPDI implementation. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 470 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.2 Status B Name:  Offset:  Reset:  Property:  Bit STATUSB 0x01 0x00 - 7 6 5 4 3 2 1 0 PESIG[2:0] Access R R R Reset 0 0 0 Bits 2:0 – PESIG[2:0] UPDI Error Signature These bits describe the UPDI Error Signature and are set when an internal UPDI error condition occurs. The PESIG field is cleared on a read from the debugger. Table 30-7. Valid Error Signatures PESIG[2:0] Error Type Error Description 0x0 No error No error detected (Default) 0x1 Parity error Wrong sampling of the parity bit 0x2 Frame error Wrong sampling of frame Stop bits 0x3 Access Layer Time-out Error UPDI can get no data or response from the Access layer. Examples of error cases are system domain in Sleep or system domain Reset. 0x4 Clock Recovery error Wrong sampling of frame Start bit 0x5 - Reserved 0x6 Reserved Reserved 0x7 Contention error Signalize Driving Contention on the UPDI RXD/TXD line © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 471 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.3 Control A Name:  Offset:  Reset:  Property:  Bit Access Reset 7 CTRLA 0x02 0x00 - 5 4 3 IBDLY 6 PARD DTD RSD 2 1 0 R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 GTVAL[2:0] Bit 7 – IBDLY Inter-Byte Delay Enable Writing a '1' to this bit enables a fixed inter-byte delay between each data byte transmitted from the UPDI when doing multi-byte LD(S). The fixed length is two IDLE characters. Before the first transmitted byte, the regular GT delay used for direction change will be used. Bit 5 – PARD Parity Disable Writing this bit to '1' will disable parity detection in the UPDI by ignoring the Parity bit. This feature is recommended only during testing. Bit 4 – DTD Disable Time-out Detection Setting this bit disables the time-out detection on the PHY layer, which requests a response from the ACC layer within a specified time (65536 UPDI clock cycles). Bit 3 – RSD Response Signature Disable Writing a '1' to this bit will disable any response signatures generated by the UPDI. This is to reduce the protocol overhead to a minimum when writing large blocks of data to the NVM space. Disabling the Response Signature should be used with caution, and only when the delay experienced by the UPDI when accessing the system bus is predictable, otherwise loss of data may occur. Bits 2:0 – GTVAL[2:0] Guard Time Value This bit field selects the Guard Time Value that will be used by the UPDI when the transmission mode switches from RX to TX. Value 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Description UPDI Guard Time: 128 cycles (default) UPDI Guard Time: 64 cycles UPDI Guard Time: 32 cycles UPDI Guard Time: 16 cycles UPDI Guard Time: 8 cycles UPDI Guard Time: 4 cycles UPDI Guard Time: 2 cycles GT off (no extra Idle bits inserted) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 472 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.4 Control B Name:  Offset:  Reset:  Property:  Bit 7 CTRLB 0x03 0x00 - 6 5 4 3 2 NACKDIS CCDETDIS UPDIDIS Access R R R Reset 0 0 0 1 0 Bit 4 – NACKDIS Disable NACK Response Writing this bit to '1' disables the NACK signature sent by the UPDI if a System Reset is issued during an ongoing LD(S) and ST(S) operation. Bit 3 – CCDETDIS Collision and Contention Detection Disable If this bit is written to '1', contention detection is disabled. Bit 2 – UPDIDIS UPDI Disable Writing a '1' to this bit disables the UPDI PHY interface. The clock request from the UPDI is lowered, and the UPDI is reset. All UPDI PHY configurations and KEYs will be reset when the UPDI is disabled. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 473 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.5 ASI Key Status Name:  Offset:  Reset:  Property:  Bit 7 ASI_KEY_STATUS 0x07 0x00 - 6 Access Reset 5 4 3 UROWWRITE NVMPROG CHIPERASE R/W R R 0 0 0 2 1 0 Bit 5 – UROWWRITE User Row Write Key Status This bit is set to '1' if the UROWWRITE KEY is active. Otherwise, this bit reads as zero. Bit 4 – NVMPROG NVM Programming This bit is set to '1' if the NVMPROG KEY is active. This bit is automatically reset after the programming sequence is done. Otherwise, this bit reads as zero. Bit 3 – CHIPERASE Chip Erase This bit is set to '1' if the CHIPERASE KEY is active. This bit will automatically be reset when the Chip Erase sequence is completed. Otherwise, this bit reads as zero. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 474 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.6 ASI Reset Request Name:  Offset:  Reset:  Property:  Bit 7 ASI_RESET_REQ 0x08 0x00 - 6 5 4 3 2 1 0 RSTREQ[7:0] Access Reset R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bits 7:0 – RSTREQ[7:0] Reset Request A Reset is signalized to the system when writing the Reset signature 0x59h to this address. Writing any other signature to this register will clear the Reset. When reading this register, reading bit RSTREQ[0] will tell if the UPDI is holding an active Reset on the system. If this bit is '1', the UPDI has an active Reset request to the system. All other bits will read as '0'. The UPDI will not be reset when issuing a system Reset from this register. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 475 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.7 ASI Control A Name:  Offset:  Reset:  Property:  Bit 7 ASI_CTRLA 0x09 0x02 - 6 5 4 3 2 1 0 UPDICLKSEL[1:0] Access Reset R/W R/W 1 1 Bits 1:0 – UPDICLKSEL[1:0] UPDI Clock Select Writing these bits select the UPDI clock output frequency. Default setting after Reset and enable is 4 MHz. Any other clock output selection is only recommended when the BOD is at the highest level. For all other BOD settings, the default 4 MHz selection is recommended. Value 0x0 0x1 0x2 0x3 Description Reserved 16 MHz UPDI clock 8 MHz UPDI clock 4 MHz UPDI clock (Default Setting) © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 476 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.8 ASI System Control A Name:  Offset:  Reset:  Property:  Bit 7 ASI_SYS_CTRLA 0x0A 0x00 - 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 Bit 1 – UROWWRITE_FINAL  User Row Programming Done This bit should be written through the UPDI when the user row data has been written to the RAM. Writing this bit will start the process of programming the user row data to the Flash. If this bit is written before the User Row code is written to RAM by the UPDI, the CPU will progress without the written data. This bit is only writable if the User Row-write KEY is successfully decoded. Bit 0 – CLKREQ Request System Clock If this bit is written to '1', the ASI is requesting the system clock, independent of system Sleep modes. This makes it possible for the UPDI to access the ACC layer, also if the system is in Sleep mode. Writing a '0' to this bit will lower the clock request. This bit will be reset when the UPDI is disabled. This bit is set by default when the UPDI is enabled in any mode (Fuse, 12V). © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 477 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.9 ASI System Status Name:  Offset:  Reset:  Property:  Bit 7 ASI_SYS_STATUS 0x0B 0x01 - 6 5 4 3 2 RSTSYS INSLEEP NVMPROG UROWPROG 1 LOCKSTATUS 0 Access R R R R R Reset 0 0 0 0 1 Bit 5 – RSTSYS System Reset Active If this bit is set, there is an active Reset on the system domain. If this bit is cleared, the system is not in Reset. This bit is cleared on read. A Reset held from the ASI_RESET_REQ register will also affect this bit. Bit 4 – INSLEEP System Domain in Sleep If this bit is set, the system domain is in IDLE or deeper Sleep mode. If this bit is cleared, the system is not in Sleep. Bit 3 – NVMPROG Start NVM Programming If this bit is set, NVM Programming can start from the UPDI. When the UPDI is done, it must reset the system through the UPDI Reset register. Bit 2 – UROWPROG  Start User Row Programming If this bit is set, User Row Programming can start from the UPDI. When the UPDI is done, it must write the UROWWRITE_FINAL bit in ASI_SYS_CTRLA. Bit 0 – LOCKSTATUS NVM Lock Status If this bit is set, the device is locked. If a Chip Erase is done, and the Lockbits are cleared, this bit will read as '0'. © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 478 ATtiny807/1607 UPDI - Unified Program and Debug Interface 30.5.10 ASI CRC Status Name:  Offset:  Reset:  Property:  Bit 7 ASI_CRC_STATUS 0x0C 0x00 - 6 5 4 3 2 1 0 CRC_STATUS[2:0] Access R R R Reset 0 0 0 Bits 2:0 – CRC_STATUS[2:0] CRC Execution Status These bits signalize the status of the CRC conversion. The bits are one-hot encoded. Value 0x0 0x1 0x2 0x4 Other Description Not enabled CRC enabled, busy CRC enabled, done with OK signature CRC enabled, done with FAILED signature Reserved © 2018 Microchip Technology Inc. Datasheet Preliminary DS40002030A-page 479 ATtiny807/1607 Electrical Characteristics 31. Electrical Characteristics 31.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. 31.2 Absolute Maximum Ratings Stresses beyond those listed in this section may cause permanent damage to the device. This is a stress rating only and functional operation of the device at these or other conditions beyond those indicated in the operational sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Table 31-1. Absolute Maximum Ratings Symbol Description VDD Power Supply Voltage IVDD Current into a VDD pin IGND Conditions Current out of a GND pin Min. Max. Unit -0.5 6 V T=[-40, 85]°C - 200 mA T=[85, 125]°C - 100 mA T=[-40, 85]°C - 200 mA T=[85, 125]°C - 100 mA VRST RESET pin voltage with respect to GND -0.5 13 VPIN Pin voltage with respect to GND -0.5 VDD+0.5 V IPIN I/O pin sink/source current -40 40 mA Ic1(1) I/O pin injection current except RESET pin Vpin
ATTINY807-MNR 价格&库存

很抱歉,暂时无法提供与“ATTINY807-MNR”相匹配的价格&库存,您可以联系我们找货

免费人工找货
ATTINY807-MNR
  •  国内价格 香港价格
  • 1+9.113761+1.13056
  • 25+8.2328325+1.02128
  • 100+7.52451100+0.93341

库存:7355