Регистры ATmega32U4
ATmega32U4 управляется 135 регистрами ввода-вывода: 48 из них лежат в области ввода-вывода (адреса 0x20–0x5F, команды IN и OUT), остальные — в расширенной области (LDS и STS). Ниже — все регистры по адресам и страницы блоков с описанием каждого бита и конструктором значения.
Данные: описание ATmega32U4 из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 7766J.
Блоки
- Порты ввода-выводаPINB, DDRB, PORTB, PINC, DDRC, PORTC, PIND, DDRD, PORTD, PINE, DDRE, PORTE, PINF, DDRF, PORTF
- SPISPCR, SPSR, SPDR
- USART1UCSR1A, UCSR1B, UCSR1C, UCSR1D, UBRR1, UDR1
- EEPROMEECR, EEDR, EEAR
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A, OCR0B, TIMSK0
- Таймер-счётчик 1 (16 бит)TIFR1, TIMSK1, TCCR1A, TCCR1B, TCCR1C, TCNT1, ICR1, OCR1A, OCR1B, OCR1C
- Таймер-счётчик 3 (16 бит)TIFR3, TIMSK3, TCCR3A, TCCR3B, TCCR3C, TCNT3, ICR3, OCR3A, OCR3B, OCR3C
- Таймер-счётчик 4 (10 бит, быстрый)TIFR4, TIMSK4, TCNT4, TC4H, TCCR4A, TCCR4B, TCCR4C, TCCR4D, TCCR4E, OCR4A, OCR4B, OCR4C, OCR4D, DT4
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, EICRB, PCMSK0
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR2, DIDR0
- Аналоговый компараторACSR, ADCSRB, DIDR1
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, OCDR, SMCR, MCUSR, MCUCR, SPMCSR, RAMPZ, SP, SREG, WDTCSR, CLKPR, PRR0, PRR1, OSCCAL, RCCTRL, CLKSEL0, CLKSEL1, CLKSTA
- PLLPLLCSR, PLLFRQ
- USB-контроллерUHWCON, USBCON, USBSTA, USBINT, UDCON, UDINT, UDIEN, UDADDR, UDFNUM, UDMFN, UEINTX, UENUM, UERST, UECONX, UECFG0X, UECFG1X, UESTA0X, UESTA1X, UEIENX, UEDATX, UEBCLX, UEBCHX, UEINT
Все регистры по адресам
| Адрес | Регистр | Назначение | Биты 7…0 | После сброса |
|---|---|---|---|---|
| 0x23 (I/O 0x03) | PINB | Входы порта B | PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 | — |
| 0x24 (I/O 0x04) | DDRB | Направление выводов порта B | DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 | 0x00 |
| 0x25 (I/O 0x05) | PORTB | Выходы и подтяжки порта B | PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 | 0x00 |
| 0x26 (I/O 0x06) | PINC | Входы порта C | PINC7 PINC6 — — — — — — | — |
| 0x27 (I/O 0x07) | DDRC | Направление выводов порта C | DDC7 DDC6 — — — — — — | 0x00 |
| 0x28 (I/O 0x08) | PORTC | Выходы и подтяжки порта C | PORTC7 PORTC6 — — — — — — | 0x00 |
| 0x29 (I/O 0x09) | PIND | Входы порта D | PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 | — |
| 0x2A (I/O 0x0A) | DDRD | Направление выводов порта D | DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 | 0x00 |
| 0x2B (I/O 0x0B) | PORTD | Выходы и подтяжки порта D | PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 | 0x00 |
| 0x2C (I/O 0x0C) | PINE | Входы порта E | — PINE6 — — — PINE2 — — | — |
| 0x2D (I/O 0x0D) | DDRE | Направление выводов порта E | — DDE6 — — — DDE2 — — | 0x00 |
| 0x2E (I/O 0x0E) | PORTE | Выходы и подтяжки порта E | — PORTE6 — — — PORTE2 — — | 0x00 |
| 0x2F (I/O 0x0F) | PINF | Входы порта F | PINF7 PINF6 PINF5 PINF4 — — PINF1 PINF0 | — |
| 0x30 (I/O 0x10) | DDRF | Направление выводов порта F | DDF7 DDF6 DDF5 DDF4 — — DDF1 DDF0 | 0x00 |
| 0x31 (I/O 0x11) | PORTF | Выходы и подтяжки порта F | PORTF7 PORTF6 PORTF5 PORTF4 — — PORTF1 PORTF0 | 0x00 |
| 0x35 (I/O 0x15) | TIFR0 | Флаги прерываний таймера 0 | — — — — — OCF0B OCF0A TOV0 | 0x00 |
| 0x36 (I/O 0x16) | TIFR1 | Флаги прерываний таймера 1 | — — ICF1 — OCF1C OCF1B OCF1A TOV1 | 0x00 |
| 0x38 (I/O 0x18) | TIFR3 | Флаги прерываний таймера 3 | — — ICF3 — OCF3C OCF3B OCF3A TOV3 | 0x00 |
| 0x39 (I/O 0x19) | TIFR4 | Флаги прерываний таймера 4 | OCF4D OCF4A OCF4B — — TOV4 — — | 0x00 |
| 0x3B (I/O 0x1B) | PCIFR | Флаги прерываний по изменению выводов | — — — — — — — PCIF0 | 0x00 |
| 0x3C (I/O 0x1C) | EIFR | Флаги внешних прерываний | — INTF6 — — INTF3 INTF2 INTF1 INTF0 | 0x00 |
| 0x3D (I/O 0x1D) | EIMSK | Разрешение внешних прерываний | — INT6 — — INT3 INT2 INT1 INT0 | 0x00 |
| 0x3E (I/O 0x1E) | GPIOR0 | Регистр общего назначения 0 | данные | 0x00 |
| 0x3F (I/O 0x1F) | EECR | Управление EEPROM | — — EEPM1 EEPM0 EERIE EEMPE EEPE EERE | — |
| 0x40 (I/O 0x20) | EEDR | Данные EEPROM | данные | 0x00 |
| 0x41 (I/O 0x21) | EEAR | Адрес EEPROM | 16 бит | — |
| 0x43 (I/O 0x23) | GTCCR | Общее управление таймерами | TSM — — — — — PSRASY PSRSYNC | 0x00 |
| 0x44 (I/O 0x24) | TCCR0A | Управление таймером 0, регистр A | COM0A1 COM0A0 COM0B1 COM0B0 — — WGM01 WGM00 | 0x00 |
| 0x45 (I/O 0x25) | TCCR0B | Управление таймером 0, регистр B | FOC0A FOC0B — — WGM02 CS02 CS01 CS00 | 0x00 |
| 0x46 (I/O 0x26) | TCNT0 | Счётный регистр таймера 0 | данные | 0x00 |
| 0x47 (I/O 0x27) | OCR0A | Регистр сравнения A таймера 0 | данные | 0x00 |
| 0x48 (I/O 0x28) | OCR0B | Регистр сравнения B таймера 0 | данные | 0x00 |
| 0x49 (I/O 0x29) | PLLCSR | Управление PLL | — — — PINDIV — — PLLE PLOCK | — |
| 0x4A (I/O 0x2A) | GPIOR1 | Регистр общего назначения 1 | данные | 0x00 |
| 0x4B (I/O 0x2B) | GPIOR2 | Регистр общего назначения 2 | данные | 0x00 |
| 0x4C (I/O 0x2C) | SPCR | Управление SPI | SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 | 0x00 |
| 0x4D (I/O 0x2D) | SPSR | Состояние SPI | SPIF WCOL — — — — — SPI2X | 0x00 |
| 0x4E (I/O 0x2E) | SPDR | Данные SPI | данные | — |
| 0x50 (I/O 0x30) | ACSR | Управление и состояние компаратора | ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0 | — |
| 0x51 (I/O 0x31) | OCDR | Регистр внутрисхемной отладки (OCD) | данные | 0x00 |
| 0x52 (I/O 0x32) | PLLFRQ | Частота PLL и делители для USB и таймера 4 | PINMUX PLLUSB PLLTM1 PLLTM0 PDIV3 PDIV2 PDIV1 PDIV0 | 0x04 |
| 0x53 (I/O 0x33) | SMCR | Режим сна | — — — — SM2 SM1 SM0 SE | 0x00 |
| 0x54 (I/O 0x34) | MCUSR | Причина сброса | — — USBRF JTRF WDRF BORF EXTRF PORF | — |
| 0x55 (I/O 0x35) | MCUCR | Управление микроконтроллером | JTD — — PUD — — IVSEL IVCE | 0x00 |
| 0x57 (I/O 0x37) | SPMCSR | Самопрограммирование (SPM) | SPMIE RWWSB SIGRD RWWSRE BLBSET PGWRT PGERS SPMEN | 0x00 |
| 0x5B (I/O 0x3B) | RAMPZ | Старшие биты адреса Z для ELPM и SPM | — — — — — — RAMPZ1 RAMPZ0 | 0x00 |
| 0x5D (I/O 0x3D) | SP | Указатель стека | 16 бит | 0x20FF |
| 0x5F (I/O 0x3F) | SREG | Регистр состояния | I T H S V N Z C | 0x00 |
| 0x60 | WDTCSR | Управление сторожевым таймером | WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 | — |
| 0x61 | CLKPR | Делитель тактовой частоты | CLKPCE — — — CLKPS3 CLKPS2 CLKPS1 CLKPS0 | — |
| 0x64 | PRR0 | Отключение тактирования модулей, регистр 0 | PRTWI — PRTIM0 — PRTIM1 PRSPI — PRADC | — |
| 0x65 | PRR1 | Отключение тактирования модулей, регистр 1 | PRUSB — — PRTIM4 PRTIM3 — — PRUSART1 | — |
| 0x66 | OSCCAL | Калибровка RC-генератора | данные | — |
| 0x67 | RCCTRL | Частота внутреннего RC-генератора | — — — — — — — RCFREQ | 0x00 |
| 0x68 | PCICR | Разрешение прерываний по изменению выводов | — — — — — — — PCIE0 | 0x00 |
| 0x69 | EICRA | Условия срабатывания INT0 и INT1 | ISC31 ISC30 ISC21 ISC20 ISC11 ISC10 ISC01 ISC00 | 0x00 |
| 0x6A | EICRB | Условия срабатывания INT4–INT7 | — — ISC61 ISC60 — — — — | 0x00 |
| 0x6B | PCMSK0 | Маска выводов группы 0 (PCINT) | PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 | — |
| 0x6E | TIMSK0 | Маска прерываний таймера 0 | — — — — — OCIE0B OCIE0A TOIE0 | 0x00 |
| 0x6F | TIMSK1 | Маска прерываний таймера 1 | — — ICIE1 — OCIE1C OCIE1B OCIE1A TOIE1 | 0x00 |
| 0x71 | TIMSK3 | Маска прерываний таймера 3 | — — ICIE3 — OCIE3C OCIE3B OCIE3A TOIE3 | 0x00 |
| 0x72 | TIMSK4 | Маска прерываний таймера 4 | OCIE4D OCIE4A OCIE4B — — TOIE4 — — | 0x00 |
| 0x78 | ADC | Результат преобразования АЦП | 16 бит | — |
| 0x7A | ADCSRA | Управление АЦП, регистр A | ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 | 0x00 |
| 0x7B | ADCSRB | Управление АЦП, регистр B | ADHSM ACME MUX5 — ADTS3 ADTS2 ADTS1 ADTS0 | 0x00 |
| 0x7C | ADMUX | Опорное напряжение и вход АЦП | REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 | 0x00 |
| 0x7D | DIDR2 | Отключение цифровых входов ADC8–ADC15 | — — ADC13D ADC12D ADC11D ADC10D ADC9D ADC8D | 0x00 |
| 0x7E | DIDR0 | Отключение цифровых входов АЦП | ADC7D ADC6D ADC5D ADC4D — — ADC1D ADC0D | 0x00 |
| 0x7F | DIDR1 | Отключение цифровых входов компаратора | — — — — — — — AIN0D | 0x00 |
| 0x80 | TCCR1A | Управление таймером 1, регистр A | COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10 | — |
| 0x81 | TCCR1B | Управление таймером 1, регистр B | ICNC1 ICES1 — WGM13 WGM12 CS12 CS11 CS10 | 0x00 |
| 0x82 | TCCR1C | Управление таймером 1, регистр C | FOC1A FOC1B FOC1C — — — — — | 0x00 |
| 0x84 | TCNT1 | Счётный регистр таймера 1 | 16 бит | 0x0000 |
| 0x86 | ICR1 | Регистр захвата таймера 1 | 16 бит | 0x0000 |
| 0x88 | OCR1A | Регистр сравнения A таймера 1 | 16 бит | 0x0000 |
| 0x8A | OCR1B | Регистр сравнения B таймера 1 | 16 бит | 0x0000 |
| 0x8C | OCR1C | Регистр сравнения C таймера 1 | 16 бит | 0x0000 |
| 0x90 | TCCR3A | Управление таймером 3, регистр A | COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30 | 0x00 |
| 0x91 | TCCR3B | Управление таймером 3, регистр B | ICNC3 ICES3 — WGM33 WGM32 CS32 CS31 CS30 | 0x00 |
| 0x92 | TCCR3C | Управление таймером 3, регистр C | FOC3A — — — — — — — | 0x00 |
| 0x94 | TCNT3 | Счётный регистр таймера 3 | 16 бит | 0x0000 |
| 0x96 | ICR3 | Регистр захвата таймера 3 | 16 бит | 0x0000 |
| 0x98 | OCR3A | Регистр сравнения A таймера 3 | 16 бит | 0x0000 |
| 0x9A | OCR3B | Регистр сравнения B таймера 3 | 16 бит | 0x0000 |
| 0x9C | OCR3C | Регистр сравнения C таймера 3 | 16 бит | 0x0000 |
| 0xB8 | TWBR | Скорость TWI | данные | 0x00 |
| 0xB9 | TWSR | Состояние TWI | TWS7 TWS6 TWS5 TWS4 TWS3 — TWPS1 TWPS0 | 0xF8 |
| 0xBA | TWAR | Собственный адрес TWI | TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE | 0xFE |
| 0xBB | TWDR | Данные TWI | данные | 0xFF |
| 0xBC | TWCR | Управление TWI | TWINT TWEA TWSTA TWSTO TWWC TWEN — TWIE | 0x00 |
| 0xBD | TWAMR | Маска адреса TWI | TWAM6 TWAM5 TWAM4 TWAM3 TWAM2 TWAM1 TWAM0 — | 0x00 |
| 0xBE | TCNT4 | Счётный регистр таймера 4 | данные | 0x00 |
| 0xBF | TC4H | Старшие биты таймера 4 (общий временный регистр) | данные | 0x00 |
| 0xC0 | TCCR4A | Управление таймером 4, регистр A | COM4A1 COM4A0 COM4B1 COM4B0 FOC4A FOC4B PWM4A PWM4B | 0x00 |
| 0xC1 | TCCR4B | Управление таймером 4, регистр B | PWM4X PSR4 DTPS41 DTPS40 CS43 CS42 CS41 CS40 | 0x00 |
| 0xC2 | TCCR4C | Управление таймером 4, регистр C | COM4A1S COM4A0S COM4B1S COM4B0S COM4D1 / COM4D1S COM4D0 / COM4D0S FOC4D PWM4D | 0x00 |
| 0xC3 | TCCR4D | Управление таймером 4, регистр D | FPIE4 FPEN4 FPNC4 FPES4 FPAC4 FPF4 WGM41 WGM40 | 0x00 |
| 0xC4 | TCCR4E | Управление таймером 4, регистр E | TLOCK4 ENHC4 OC4OE5 OC4OE4 OC4OE3 OC4OE2 OC4OE1 OC4OE0 | 0x00 |
| 0xC5 | CLKSEL0 | Выбор источника тактирования, регистр 0 | RCSUT1 RCSUT0 EXSUT1 EXSUT0 RCE EXTE — CLKS | — |
| 0xC6 | CLKSEL1 | Выбор источника тактирования, регистр 1 | RCCKSEL3 RCCKSEL2 RCCKSEL1 RCCKSEL0 EXCKSEL3 EXCKSEL2 EXCKSEL1 EXCKSEL0 | 0x20 |
| 0xC7 | CLKSTA | Состояние генераторов | — — — — — — RCON EXTON | — |
| 0xC8 | UCSR1A | Состояние USART1, регистр A | RXC1 TXC1 UDRE1 FE1 DOR1 UPE1 / PE1 U2X1 MPCM1 | 0x20 |
| 0xC9 | UCSR1B | Управление USART1, регистр B | RXCIE1 TXCIE1 UDRIE1 RXEN1 TXEN1 UCSZ12 RXB81 TXB81 | 0x00 |
| 0xCA | UCSR1C | Формат кадра USART1, регистр C | UMSEL11 UMSEL10 UPM11 UPM10 USBS1 UCSZ11 UCSZ10 UCPOL1 | 0x06 |
| 0xCB | UCSR1D | Управление потоком USART1 (RTS и CTS) | — — — — — — CTSEN RTSEN | — |
| 0xCC | UBRR1 | Скорость USART1 | 16 бит | — |
| 0xCE | UDR1 | Данные USART1 | данные | 0x00 |
| 0xCF | OCR4A | Регистр сравнения A таймера 4 | данные | 0x00 |
| 0xD0 | OCR4B | Регистр сравнения B таймера 4 | данные | 0x00 |
| 0xD1 | OCR4C | Регистр сравнения C таймера 4 | данные | — |
| 0xD2 | OCR4D | Регистр сравнения D таймера 4 | данные | 0x00 |
| 0xD4 | DT4 | Мёртвое время таймера 4 | DT4H3 DT4H2 DT4H1 DT4H0 DT4L3 DT4L2 DT4L1 DT4L0 | 0x00 |
| 0xD7 | UHWCON | Стабилизатор выводов USB | — — — — — — — UVREGE | 0x00 |
| 0xD8 | USBCON | Управление USB | USBE — FRZCLK OTGPADE — — — VBUSTE | — |
| 0xD9 | USBSTA | Состояние USB | — — — — — — ID VBUS | — |
| 0xDA | USBINT | Флаг прерывания по VBUS | — — — — — — — VBUSTI | — |
| 0xE0 | UDCON | Управление USB-устройством | — — — — RSTCPU LSM RMWKUP DETACH | 0x01 |
| 0xE1 | UDINT | Флаги прерываний USB-устройства | — UPRSMI EORSMI WAKEUPI EORSTI SOFI — SUSPI | 0x00 |
| 0xE2 | UDIEN | Разрешение прерываний USB-устройства | — UPRSME EORSME WAKEUPE EORSTE SOFE — SUSPE | 0x00 |
| 0xE3 | UDADDR | Адрес USB-устройства | ADDEN UADD6 UADD5 UADD4 UADD3 UADD2 UADD1 UADD0 | 0x00 |
| 0xE4 | UDFNUM | Номер кадра USB | 16 бит | 0x0000 |
| 0xE6 | UDMFN | Ошибка номера кадра USB | — — — FNCERR — — — — | — |
| 0xE8 | UEINTX | Флаги прерываний выбранной конечной точки | FIFOCON NAKINI RWAL NAKOUTI RXSTPI RXOUTI STALLEDI TXINI | 0x00 |
| 0xE9 | UENUM | Номер выбранной конечной точки | — — — — — EPNUM2 EPNUM1 EPNUM0 | 0x00 |
| 0xEA | UERST | Сброс FIFO конечных точек | — EPRST6 EPRST5 EPRST4 EPRST3 EPRST2 EPRST1 EPRST0 | 0x00 |
| 0xEB | UECONX | Управление выбранной конечной точкой | — — STALLRQ STALLRQC RSTDT — — EPEN | 0x00 |
| 0xEC | UECFG0X | Конфигурация конечной точки, регистр 0 | EPTYPE1 EPTYPE0 — — — — — EPDIR | 0x00 |
| 0xED | UECFG1X | Конфигурация конечной точки, регистр 1 | — EPSIZE2 EPSIZE1 EPSIZE0 EPBK1 EPBK0 ALLOC — | 0x00 |
| 0xEE | UESTA0X | Состояние конечной точки, регистр 0 | CFGOK OVERFI UNDERFI — DTSEQ1 DTSEQ0 NBUSYBK1 NBUSYBK0 | 0x00 |
| 0xEF | UESTA1X | Состояние конечной точки, регистр 1 | — — — — — CTRLDIR CURRBK1 CURRBK0 | 0x00 |
| 0xF0 | UEIENX | Разрешение прерываний выбранной конечной точки | FLERRE NAKINE — NAKOUTE RXSTPE RXOUTE STALLEDE TXINE | 0x00 |
| 0xF1 | UEDATX | Данные FIFO выбранной конечной точки | DAT7 DAT6 DAT5 DAT4 DAT3 DAT2 DAT1 DAT0 | 0x00 |
| 0xF2 | UEBCLX | Число байтов в банке конечной точки, младший байт | BYCT7 BYCT6 BYCT5 BYCT4 BYCT3 BYCT2 BYCT1 BYCT0 | 0x00 |
| 0xF3 | UEBCHX | Число байтов в банке конечной точки, старшие биты | — — — — — BYCT10 BYCT9 BYCT8 | 0x00 |
| 0xF4 | UEINT | Прерывания конечных точек по номерам | — EPINT6 EPINT5 EPINT4 EPINT3 EPINT2 EPINT1 EPINT0 | 0x00 |
Частые вопросы
Сколько регистров ввода-вывода у ATmega32U4?
В описании Microchip у ATmega32U4 135 регистров периферии и ядра (16-битные — EEAR, SP и ADC — считаются одним регистром). 48 из них доступны командами IN и OUT, 24 — ещё и битовыми командами SBI и CBI.
Чем адрес регистра в области ввода-вывода отличается от адреса в памяти?
Регистры с адресами 0x20–0x5F в пространстве данных доступны и как область ввода-вывода с адресами 0x00–0x3F: IN и OUT принимают именно этот адрес, на 0x20 меньше. Регистры выше 0x5F (расширенная область) читаются и пишутся только командами LDS, STS, LD и ST.
Где описаны биты регистров ATmega32U4?
На страницах блоков: порты, SPI, USART1, EEPROM, TC0, TC1, TC3, TC4, EXINT, TWI, ADC, AC, CPU, PLL и USB_DEVICE. У каждого бита — номер, имя из avr/io.h, назначение, доступ и значение после сброса по даташиту 7766J.
Источники
- Microchip. Atmel. ATmega16U4/32U4 datasheet (7766J) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega32U4 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?