Регистры ATmega16A
ATmega16A управляется 59 регистрами ввода-вывода: все они лежат в области ввода-вывода (адреса 0x20–0x5F) и доступны командами IN и OUT. Ниже — все регистры по адресам и страницы блоков с описанием каждого бита и конструктором значения.
Данные: описание ATmega16A из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 8154C.
Блоки
- Таймер-счётчик 0 (8 бит)SFIOR, TCNT0, TCCR0, TIFR, TIMSK, OCR0
- Таймер-счётчик 1 (16 бит)ICR1, OCR1B, OCR1A, TCNT1, TCCR1B, TCCR1A, TIFR, TIMSK
- Внешние прерыванияMCUCSR, MCUCR, GIFR, GICR
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыWDTCR, SFIOR, OSCCAL, OCDR, MCUCSR, MCUCR, SPMCSR, SP, SREG
- Таймер-счётчик 2 (8 бит, асинхронный)ASSR, OCR2, TCNT2, TCCR2, SFIOR, TIFR, TIMSK
- SPISPCR, SPSR, SPDR
- USARTUBRRL, UCSRB, UCSRA, UDR, UCSRC, UBRRH
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR
- Аналоговый компараторACSR, SFIOR
- АЦПADC, ADCSRA, ADMUX, SFIOR
- Порты ввода-выводаPIND, DDRD, PORTD, PINC, DDRC, PORTC, PINB, DDRB, PORTB, PINA, DDRA, PORTA
Все регистры по адресам
| Адрес | Регистр | Назначение | Биты 7…0 | После сброса |
|---|---|---|---|---|
| 0x20 (I/O 0x00) | TWBR | Скорость TWI | данные | 0x00 |
| 0x21 (I/O 0x01) | TWSR | Состояние TWI | TWS7 TWS6 TWS5 TWS4 TWS3 — TWPS1 TWPS0 | 0xF8 |
| 0x22 (I/O 0x02) | TWAR | Собственный адрес TWI | TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE | 0xFE |
| 0x23 (I/O 0x03) | TWDR | Данные TWI | данные | 0xFF |
| 0x24 (I/O 0x04) | ADC | Результат преобразования АЦП | 16 бит | 0x0000 |
| 0x26 (I/O 0x06) | ADCSRA | Управление АЦП, регистр A | ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0 | 0x00 |
| 0x27 (I/O 0x07) | ADMUX | Опорное напряжение и вход АЦП | REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 | 0x00 |
| 0x28 (I/O 0x08) | ACSR | Управление и состояние компаратора | ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0 | — |
| 0x29 (I/O 0x09) | UBRRL | Скорость USART, младший байт | данные | 0x00 |
| 0x2A (I/O 0x0A) | UCSRB | Управление USARTundefined, регистр B | RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 | 0x00 |
| 0x2B (I/O 0x0B) | UCSRA | Состояние USARTundefined, регистр A | RXC TXC UDRE FE DOR UPE / PE U2X MPCM | 0x20 |
| 0x2C (I/O 0x0C) | UDR | Данные USARTundefined | данные | 0x00 |
| 0x2D (I/O 0x0D) | SPCR | Управление SPI | SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 | 0x00 |
| 0x2E (I/O 0x0E) | SPSR | Состояние SPI | SPIF WCOL — — — — — SPI2X | 0x00 |
| 0x2F (I/O 0x0F) | SPDR | Данные SPI | данные | — |
| 0x30 (I/O 0x10) | PIND | Входы порта D | PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 | — |
| 0x31 (I/O 0x11) | DDRD | Направление выводов порта D | DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 | 0x00 |
| 0x32 (I/O 0x12) | PORTD | Выходы и подтяжки порта D | PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 | 0x00 |
| 0x33 (I/O 0x13) | PINC | Входы порта C | PINC7 PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 | — |
| 0x34 (I/O 0x14) | DDRC | Направление выводов порта C | DDC7 DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 | 0x00 |
| 0x35 (I/O 0x15) | PORTC | Выходы и подтяжки порта C | PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 | 0x00 |
| 0x36 (I/O 0x16) | PINB | Входы порта B | PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 | — |
| 0x37 (I/O 0x17) | DDRB | Направление выводов порта B | DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 | 0x00 |
| 0x38 (I/O 0x18) | PORTB | Выходы и подтяжки порта B | PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 | 0x00 |
| 0x39 (I/O 0x19) | PINA | Входы порта A | PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 | — |
| 0x3A (I/O 0x1A) | DDRA | Направление выводов порта A | DDA7 DDA6 DDA5 DDA4 DDA3 DDA2 DDA1 DDA0 | 0x00 |
| 0x3B (I/O 0x1B) | PORTA | Выходы и подтяжки порта A | PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 | 0x00 |
| 0x3C (I/O 0x1C) | EECR | Управление EEPROM | — — — — EERIE EEMWE EEWE EERE | — |
| 0x3D (I/O 0x1D) | EEDR | Данные EEPROM | данные | 0x00 |
| 0x3E (I/O 0x1E) | EEAR | Адрес EEPROM | 16 бит | — |
| 0x40 (I/O 0x20) | UCSRC | Формат кадра USARTundefined, регистр C | URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL | 0x86 |
| 0x40 (I/O 0x20) | UBRRH | Скорость USART, старшие биты | URSEL — — — UBRR11 UBRR10 UBRR9 UBRR8 | 0x00 |
| 0x41 (I/O 0x21) | WDTCR | Управление сторожевым таймером | — — — WDTOE WDE WDP2 WDP1 WDP0 | 0x00 |
| 0x42 (I/O 0x22) | ASSR | Асинхронный режим таймера 2 | — — — — AS2 TCN2UB OCR2UB TCR2UB | 0x00 |
| 0x43 (I/O 0x23) | OCR2 | Регистр сравнения таймера 2 | данные | 0x00 |
| 0x44 (I/O 0x24) | TCNT2 | Счётный регистр таймера 2 | данные | 0x00 |
| 0x45 (I/O 0x25) | TCCR2 | Управление таймером 2 | FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20 | 0x00 |
| 0x46 (I/O 0x26) | ICR1 | Регистр захвата таймера 1 | 16 бит | 0x0000 |
| 0x48 (I/O 0x28) | OCR1B | Регистр сравнения B таймера 1 | 16 бит | 0x0000 |
| 0x4A (I/O 0x2A) | OCR1A | Регистр сравнения A таймера 1 | 16 бит | 0x0000 |
| 0x4C (I/O 0x2C) | TCNT1 | Счётный регистр таймера 1 | 16 бит | 0x0000 |
| 0x4E (I/O 0x2E) | TCCR1B | Управление таймером 1, регистр B | ICNC1 ICES1 — WGM13 WGM12 CS12 CS11 CS10 | 0x00 |
| 0x4F (I/O 0x2F) | TCCR1A | Управление таймером 1, регистр A | COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 | 0x00 |
| 0x50 (I/O 0x30) | SFIOR | Специальные функции ввода-вывода | ADTS2 ADTS1 ADTS0 — ACME PUD PSR2 PSR10 | 0x00 |
| 0x51 (I/O 0x31) | OSCCAL | Калибровка RC-генератора | данные | — |
| 0x51 (I/O 0x31) | OCDR | Регистр внутрисхемной отладки (OCD) | данные | 0x00 |
| 0x52 (I/O 0x32) | TCNT0 | Счётный регистр таймера 0 | данные | 0x00 |
| 0x53 (I/O 0x33) | TCCR0 | Управление таймером 0 | FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 | 0x00 |
| 0x54 (I/O 0x34) | MCUCSR | Причина сброса и управление микроконтроллером | JTD ISC2 — JTRF WDRF BORF EXTRF PORF | — |
| 0x55 (I/O 0x35) | MCUCR | Управление микроконтроллером | SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00 | 0x00 |
| 0x56 (I/O 0x36) | TWCR | Управление TWI | TWINT TWEA TWSTA TWSTO TWWC TWEN — TWIE | 0x00 |
| 0x57 (I/O 0x37) | SPMCSR | Самопрограммирование (SPM) | SPMIE RWWSB — RWWSRE BLBSET PGWRT PGERS SPMEN | — |
| 0x58 (I/O 0x38) | TIFR | Флаги прерываний таймера | OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 | 0x00 |
| 0x59 (I/O 0x39) | TIMSK | Маска прерываний таймера | OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 | 0x00 |
| 0x5A (I/O 0x3A) | GIFR | Флаги внешних прерываний | INTF1 INTF0 INTF2 — — — — — | 0x00 |
| 0x5B (I/O 0x3B) | GICR | Разрешение внешних прерываний и векторы | INT1 INT0 INT2 — — — IVSEL IVCE | 0x00 |
| 0x5C (I/O 0x3C) | OCR0 | Регистр сравнения таймера 0 | данные | 0x00 |
| 0x5D (I/O 0x3D) | SP | Указатель стека | 16 бит | 0x0000 |
| 0x5F (I/O 0x3F) | SREG | Регистр состояния | I T H S V N Z C | 0x00 |
Частые вопросы
Сколько регистров ввода-вывода у ATmega16A?
В описании Microchip у ATmega16A 59 регистров периферии и ядра (16-битные — ADC, EEAR и ICR1 — считаются одним регистром). 59 из них доступны командами IN и OUT, 30 — ещё и битовыми командами SBI и CBI.
Чем адрес регистра в области ввода-вывода отличается от адреса в памяти?
Регистры с адресами 0x20–0x5F в пространстве данных доступны и как область ввода-вывода с адресами 0x00–0x3F: IN и OUT принимают именно этот адрес, на 0x20 меньше. Регистры выше 0x5F (расширенная область) читаются и пишутся только командами LDS, STS, LD и ST.
Где описаны биты регистров ATmega16A?
На страницах блоков: TC0, TC1, EXINT, EEPROM, CPU, TC2, SPI, USART, TWI, AC, ADC и порты. У каждого бита — номер, имя из avr/io.h, назначение, доступ и значение после сброса по даташиту 8154C.
Источники
- Microchip. Atmel. ATmega16A datasheet (8154C) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega16A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?