Перейти к содержанию

Регистры ATmega328P

ATmega328P управляется 79 регистрами ввода-вывода: 37 из них лежат в области ввода-вывода (адреса 0x20–0x5F, команды IN и OUT), остальные — в расширенной области (LDS и STS). Ниже — все регистры по адресам и страницы блоков с описанием каждого бита и конструктором значения.

Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.

Блоки

Все регистры по адресам

АдресРегистрНазначениеБиты 7…0После сброса
0x23 (I/O 0x03)PINBВходы порта BPINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0—
0x24 (I/O 0x04)DDRBНаправление выводов порта BDDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB00x00
0x25 (I/O 0x05)PORTBВыходы и подтяжки порта BPORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB00x00
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 DDC00x00
0x28 (I/O 0x08)PORTCВыходы и подтяжки порта C— PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC00x00
0x29 (I/O 0x09)PINDВходы порта DPIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0—
0x2A (I/O 0x0A)DDRDНаправление выводов порта DDDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD00x00
0x2B (I/O 0x0B)PORTDВыходы и подтяжки порта DPORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD00x00
0x35 (I/O 0x15)TIFR0Флаги прерываний таймера 0— — — — — OCF0B OCF0A TOV00x00
0x36 (I/O 0x16)TIFR1Флаги прерываний таймера 1— — ICF1 — — OCF1B OCF1A TOV10x00
0x37 (I/O 0x17)TIFR2Флаги прерываний таймера 2— — — — — OCF2B OCF2A TOV20x00
0x3B (I/O 0x1B)PCIFRФлаги прерываний по изменению выводов— — — — — PCIF2 PCIF1 PCIF00x00
0x3C (I/O 0x1C)EIFRФлаги внешних прерываний— — — — — — INTF1 INTF00x00
0x3D (I/O 0x1D)EIMSKРазрешение внешних прерываний— — — — — — INT1 INT00x00
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Адрес EEPROM16 бит—
0x43 (I/O 0x23)GTCCRОбщее управление таймерамиTSM — — — — — PSRASY PSRSYNC0x00
0x44 (I/O 0x24)TCCR0AУправление таймером 0, регистр ACOM0A1 COM0A0 COM0B1 COM0B0 — — WGM01 WGM000x00
0x45 (I/O 0x25)TCCR0BУправление таймером 0, регистр BFOC0A FOC0B — — WGM02 CS02 CS01 CS000x00
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Управление SPISPIE SPE DORD MSTR CPOL CPHA SPR1 SPR00x00
0x4D (I/O 0x2D)SPSRСостояние SPISPIF WCOL — — — — — SPI2X0x00
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 SE0x00
0x54 (I/O 0x34)MCUSRПричина сброса— — — — WDRF BORF EXTRF PORF—
0x55 (I/O 0x35)MCUCRУправление микроконтроллером— BODS BODSE PUD — — IVSEL IVCE0x00
0x57 (I/O 0x37)SPMCSRСамопрограммирование (SPM)SPMIE RWWSB SIGRD RWWSRE BLBSET PGWRT PGERS SPMEN0x00
0x5D (I/O 0x3D)SPУказатель стека16 бит—
0x5F (I/O 0x3F)SREGРегистр состоянияI T H S V N Z C0x00
0x60WDTCSRУправление сторожевым таймеромWDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0—
0x61CLKPRДелитель тактовой частотыCLKPCE — — — CLKPS3 CLKPS2 CLKPS1 CLKPS0—
0x64PRRОтключение тактирования модулейPRTWI PRTIM2 PRTIM0 — PRTIM1 PRSPI PRUSART0 PRADC0x00
0x66OSCCALКалибровка RC-генератораданные—
0x68PCICRРазрешение прерываний по изменению выводов— — — — — PCIE2 PCIE1 PCIE00x00
0x69EICRAУсловия срабатывания INT0 и INT1— — — — ISC11 ISC10 ISC01 ISC000x00
0x6BPCMSK0Маска выводов группы 0 (PCINT)PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT00x00
0x6CPCMSK1Маска выводов группы 1 (PCINT)— PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT80x00
0x6DPCMSK2Маска выводов группы 2 (PCINT)PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT160x00
0x6ETIMSK0Маска прерываний таймера 0— — — — — OCIE0B OCIE0A TOIE00x00
0x6FTIMSK1Маска прерываний таймера 1— — ICIE1 — — OCIE1B OCIE1A TOIE10x00
0x70TIMSK2Маска прерываний таймера 2— — — — — OCIE2B OCIE2A TOIE20x00
0x78ADCРезультат преобразования АЦП16 бит0x0000
0x7AADCSRAУправление АЦП, регистр AADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS00x00
0x7BADCSRBУправление АЦП, регистр B— ACME — — — ADTS2 ADTS1 ADTS00x00
0x7CADMUXОпорное напряжение и вход АЦПREFS1 REFS0 ADLAR — MUX3 MUX2 MUX1 MUX00x00
0x7EDIDR0Отключение цифровых входов АЦП— — ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D0x00
0x7FDIDR1Отключение цифровых входов компаратора— — — — — — AIN1D AIN0D0x00
0x80TCCR1AУправление таймером 1, регистр ACOM1A1 COM1A0 COM1B1 COM1B0 — — WGM11 WGM100x00
0x81TCCR1BУправление таймером 1, регистр BICNC1 ICES1 — WGM13 WGM12 CS12 CS11 CS100x00
0x82TCCR1CУправление таймером 1, регистр CFOC1A FOC1B — — — — — —0x00
0x84TCNT1Счётный регистр таймера 116 бит0x0000
0x86ICR1Регистр захвата таймера 116 бит0x0000
0x88OCR1AРегистр сравнения A таймера 116 бит0x0000
0x8AOCR1BРегистр сравнения B таймера 116 бит0x0000
0xB0TCCR2AУправление таймером 2, регистр ACOM2A1 COM2A0 COM2B1 COM2B0 — — WGM21 WGM200x00
0xB1TCCR2BУправление таймером 2, регистр BFOC2A FOC2B — — WGM22 CS22 CS21 CS200x00
0xB2TCNT2Счётный регистр таймера 2данные0x00
0xB3OCR2AРегистр сравнения A таймера 2данные0x00
0xB4OCR2BРегистр сравнения B таймера 2данные0x00
0xB6ASSRАсинхронный режим таймера 2— EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB0x00
0xB8TWBRСкорость TWIданные0x00
0xB9TWSRСостояние TWITWS7 TWS6 TWS5 TWS4 TWS3 — TWPS1 TWPS00xF8
0xBATWARСобственный адрес TWITWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE0xFE
0xBBTWDRДанные TWIданные0xFF
0xBCTWCRУправление TWITWINT TWEA TWSTA TWSTO TWWC TWEN — TWIE0x00
0xBDTWAMRМаска адреса TWITWAM6 TWAM5 TWAM4 TWAM3 TWAM2 TWAM1 TWAM0 —0x00
0xC0UCSR0AСостояние USART0, регистр ARXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM00x20
0xC1UCSR0BУправление USART0, регистр BRXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ02 RXB80 TXB800x00
0xC2UCSR0CФормат кадра USART0, регистр CUMSEL01 UMSEL00 UPM01 UPM00 USBS0 UCSZ01 / UDORD0 UCSZ00 / UCPHA0 UCPOL00x06
0xC4UBRR0Скорость USART016 бит0x0000
0xC6UDR0Данные 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.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

Нашли ошибку в регистрах?