Регистры ATmega328P
ATmega328P управляется 79 регистрами ввода-вывода: 37 из них лежат в области ввода-вывода (адреса 0x20–0x5F, команды IN и OUT), остальные — в расширенной области (LDS и STS). Ниже — все регистры по адресам и страницы блоков с описанием каждого бита и конструктором значения.
Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.
Блоки
- USART0UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- Таймер-счётчик 1 (16 бит)TIFR1, GTCCR, TIMSK1, TCCR1A, TCCR1B, TCCR1C, TCNT1, ICR1, OCR1A, OCR1B
- Таймер-счётчик 2 (8 бит, асинхронный)TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2, OCR2A, OCR2B, ASSR
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR0
- Аналоговый компараторACSR, DIDR1
- Порты ввода-выводаPINB, DDRB, PORTB, PINC, DDRC, PORTC, PIND, DDRD, PORTD
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A, OCR0B, TIMSK0
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, PCMSK0, PCMSK1, PCMSK2
- SPISPCR, SPSR, SPDR
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, SMCR, MCUSR, MCUCR, SPMCSR, SP, SREG, WDTCSR, CLKPR, PRR, OSCCAL
Все регистры по адресам
| Адрес | Регистр | Назначение | Биты 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 | — PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 | — |
| 0x27 (I/O 0x07) | DDRC | Направление выводов порта C | — DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 | 0x00 |
| 0x28 (I/O 0x08) | PORTC | Выходы и подтяжки порта C | — PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 | 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 |
| 0x35 (I/O 0x15) | TIFR0 | Флаги прерываний таймера 0 | — — — — — OCF0B OCF0A TOV0 | 0x00 |
| 0x36 (I/O 0x16) | TIFR1 | Флаги прерываний таймера 1 | — — ICF1 — — OCF1B OCF1A TOV1 | 0x00 |
| 0x37 (I/O 0x17) | TIFR2 | Флаги прерываний таймера 2 | — — — — — OCF2B OCF2A TOV2 | 0x00 |
| 0x3B (I/O 0x1B) | PCIFR | Флаги прерываний по изменению выводов | — — — — — PCIF2 PCIF1 PCIF0 | 0x00 |
| 0x3C (I/O 0x1C) | EIFR | Флаги внешних прерываний | — — — — — — INTF1 INTF0 | 0x00 |
| 0x3D (I/O 0x1D) | EIMSK | Разрешение внешних прерываний | — — — — — — 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 |
| 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 | — |
| 0x53 (I/O 0x33) | SMCR | Режим сна | — — — — SM2 SM1 SM0 SE | 0x00 |
| 0x54 (I/O 0x34) | MCUSR | Причина сброса | — — — — WDRF BORF EXTRF PORF | — |
| 0x55 (I/O 0x35) | MCUCR | Управление микроконтроллером | — BODS BODSE PUD — — IVSEL IVCE | 0x00 |
| 0x57 (I/O 0x37) | SPMCSR | Самопрограммирование (SPM) | SPMIE RWWSB SIGRD RWWSRE BLBSET PGWRT PGERS SPMEN | 0x00 |
| 0x5D (I/O 0x3D) | SP | Указатель стека | 16 бит | — |
| 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 | PRR | Отключение тактирования модулей | PRTWI PRTIM2 PRTIM0 — PRTIM1 PRSPI PRUSART0 PRADC | 0x00 |
| 0x66 | OSCCAL | Калибровка RC-генератора | данные | — |
| 0x68 | PCICR | Разрешение прерываний по изменению выводов | — — — — — PCIE2 PCIE1 PCIE0 | 0x00 |
| 0x69 | EICRA | Условия срабатывания INT0 и INT1 | — — — — ISC11 ISC10 ISC01 ISC00 | 0x00 |
| 0x6B | PCMSK0 | Маска выводов группы 0 (PCINT) | PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 | 0x00 |
| 0x6C | PCMSK1 | Маска выводов группы 1 (PCINT) | — PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8 | 0x00 |
| 0x6D | PCMSK2 | Маска выводов группы 2 (PCINT) | PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16 | 0x00 |
| 0x6E | TIMSK0 | Маска прерываний таймера 0 | — — — — — OCIE0B OCIE0A TOIE0 | 0x00 |
| 0x6F | TIMSK1 | Маска прерываний таймера 1 | — — ICIE1 — — OCIE1B OCIE1A TOIE1 | 0x00 |
| 0x70 | TIMSK2 | Маска прерываний таймера 2 | — — — — — OCIE2B OCIE2A TOIE2 | 0x00 |
| 0x78 | ADC | Результат преобразования АЦП | 16 бит | 0x0000 |
| 0x7A | ADCSRA | Управление АЦП, регистр A | ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 | 0x00 |
| 0x7B | ADCSRB | Управление АЦП, регистр B | — ACME — — — ADTS2 ADTS1 ADTS0 | 0x00 |
| 0x7C | ADMUX | Опорное напряжение и вход АЦП | REFS1 REFS0 ADLAR — MUX3 MUX2 MUX1 MUX0 | 0x00 |
| 0x7E | DIDR0 | Отключение цифровых входов АЦП | — — ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D | 0x00 |
| 0x7F | DIDR1 | Отключение цифровых входов компаратора | — — — — — — AIN1D AIN0D | 0x00 |
| 0x80 | TCCR1A | Управление таймером 1, регистр A | COM1A1 COM1A0 COM1B1 COM1B0 — — WGM11 WGM10 | 0x00 |
| 0x81 | TCCR1B | Управление таймером 1, регистр B | ICNC1 ICES1 — WGM13 WGM12 CS12 CS11 CS10 | 0x00 |
| 0x82 | TCCR1C | Управление таймером 1, регистр C | FOC1A FOC1B — — — — — — | 0x00 |
| 0x84 | TCNT1 | Счётный регистр таймера 1 | 16 бит | 0x0000 |
| 0x86 | ICR1 | Регистр захвата таймера 1 | 16 бит | 0x0000 |
| 0x88 | OCR1A | Регистр сравнения A таймера 1 | 16 бит | 0x0000 |
| 0x8A | OCR1B | Регистр сравнения B таймера 1 | 16 бит | 0x0000 |
| 0xB0 | TCCR2A | Управление таймером 2, регистр A | COM2A1 COM2A0 COM2B1 COM2B0 — — WGM21 WGM20 | 0x00 |
| 0xB1 | TCCR2B | Управление таймером 2, регистр B | FOC2A FOC2B — — WGM22 CS22 CS21 CS20 | 0x00 |
| 0xB2 | TCNT2 | Счётный регистр таймера 2 | данные | 0x00 |
| 0xB3 | OCR2A | Регистр сравнения A таймера 2 | данные | 0x00 |
| 0xB4 | OCR2B | Регистр сравнения B таймера 2 | данные | 0x00 |
| 0xB6 | ASSR | Асинхронный режим таймера 2 | — EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB | 0x00 |
| 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 |
| 0xC0 | UCSR0A | Состояние USART0, регистр A | RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM0 | 0x20 |
| 0xC1 | UCSR0B | Управление USART0, регистр B | RXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ02 RXB80 TXB80 | 0x00 |
| 0xC2 | UCSR0C | Формат кадра USART0, регистр C | UMSEL01 UMSEL00 UPM01 UPM00 USBS0 UCSZ01 / UDORD0 UCSZ00 / UCPHA0 UCPOL0 | 0x06 |
| 0xC4 | UBRR0 | Скорость USART0 | 16 бит | 0x0000 |
| 0xC6 | UDR0 | Данные USART0 | данные | 0x00 |
Частые вопросы
Сколько регистров ввода-вывода у ATmega328P?
В описании Microchip у ATmega328P 79 регистров периферии и ядра (16-битные — EEAR, SP и ADC — считаются одним регистром). 37 из них доступны командами IN и OUT, 17 — ещё и битовыми командами SBI и CBI.
Чем адрес регистра в области ввода-вывода отличается от адреса в памяти?
Регистры с адресами 0x20–0x5F в пространстве данных доступны и как область ввода-вывода с адресами 0x00–0x3F: IN и OUT принимают именно этот адрес, на 0x20 меньше. Регистры выше 0x5F (расширенная область) читаются и пишутся только командами LDS, STS, LD и ST.
Где описаны биты регистров ATmega328P?
На страницах блоков: USART0, TWI, TC1, TC2, ADC, AC, порты, TC0, EXINT, SPI, EEPROM и CPU. У каждого бита — номер, имя из avr/io.h, назначение, доступ и значение после сброса по даташиту DS40002061B.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?