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

TWI (I²C) ATmega2560: регистры и биты

Аппаратный I²C, в документации Atmel и Microchip — TWI: ведущий и ведомый режимы. Частоту SCL задают TWBR и предделитель TWPS, каждый шаг обмена (START, адрес, байт данных, STOP) запускается записью в TWCR и заканчивается флагом TWINT, а код состояния шины читается из TWSR.

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

Регистры блока

РегистрАдресНазначениеПосле сброса
TWBR0xB8Скорость TWI0x00
TWSR0xB9Состояние TWI0xF8
TWAR0xBAСобственный адрес TWI0xFE
TWDR0xBBДанные TWI0xFF
TWCR0xBCУправление TWI0x00
TWAMR0xBDМаска адреса TWI0x00

Конструктор значения

Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.

Исходные данные

Результат

Значение
0x00
Двоичное, биты 7…0
0000 0000

C (avr-gcc, avr/io.h)

TWCR = 0;

Ассемблер Microchip (m2560def.inc)

ldi r16, 0x00
sts TWCR, r16

TWBR — скорость TWI

Адрес 0xB8, 8 бит, после сброса 0x00.

Регистр данных: все восемь битов — одно число.

TWSR — состояние TWI

Адрес 0xB9, 8 бит, после сброса 0xF8.

Бит76543210
ИмяTWS7TWS6TWS5TWS4TWS3—TWPS1TWPS0
ДоступRRRRRRR/WR/W
После сброса11111000
  • TWS7:3 (биты 7:3) — Код состояния TWI.
  • TWPS1:0 (биты 1:0) — Предделитель скорости TWI.
    TWPS1:0Значение
    00Деление на 1
    01Деление на 4
    10Деление на 16
    11Деление на 64

TWAR — собственный адрес TWI

Адрес 0xBA, 8 бит, после сброса 0xFE.

Бит76543210
ИмяTWA6TWA5TWA4TWA3TWA2TWA1TWA0TWGCE
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса11111110
  • TWA6:0 (биты 7:1) — Собственный адрес в режиме ведомого.
  • TWGCE (бит 0) — Отвечать на общий вызов (адрес 0).

TWDR — данные TWI

Адрес 0xBB, 8 бит, после сброса 0xFF.

Регистр данных: все восемь битов — одно число.

TWCR — управление TWI

Адрес 0xBC, 8 бит, после сброса 0x00.

Бит76543210
ИмяTWINTTWEATWSTATWSTOTWWCTWEN—TWIE
ДоступR/WR/WR/WR/WRR/WRR/W
После сброса00000000
  • TWINT (бит 7) — Флаг TWI: шаг обмена завершён. Сбрасывается только записью единицы — при входе в обработчик прерывания сам не сбрасывается; запись единицы запускает следующий шаг обмена.
  • TWEA (бит 6) — Отвечать подтверждением (ACK).
  • TWSTA (бит 5) — Сформировать START.
  • TWSTO (бит 4) — Сформировать STOP.
  • TWWC (бит 3) — Конфликт записи в TWDR.
  • TWEN (бит 2) — TWI включён.
  • TWIE (бит 0) — Прерывание TWI.

TWAMR — маска адреса TWI

Адрес 0xBD, 8 бит, после сброса 0x00.

Бит76543210
ИмяTWAM6TWAM5TWAM4TWAM3TWAM2TWAM1TWAM0—
ДоступR/WR/WR/WR/WR/WR/WR/WR
После сброса00000000
  • TWAM6:0 (биты 7:1) — Маска сравнения адреса.

Частые вопросы

Какими командами ассемблера обращаться к регистрам TWI ATmega2560?

TWBR, TWSR, TWAR, TWDR, TWCR и TWAMR лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

Какие значения у регистров TWI после сброса?

После сброса TWSR = 0xF8, TWAR = 0xFE и TWDR = 0xFF; остальные регистры блока обнулены. Значения — из диаграмм регистров в даташите 2549Q.

Как установить биты TWCR на C?

Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: TWCR = (1 << TWINT) | (1 << TWEA); записывает новое значение целиком, а TWCR |= (1 << TWINT); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.

Источники

  1. Microchip. Atmel. ATmega640/V-1280/V-1281/V-2560/V-2561/V datasheet (2549Q) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega2560 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

Другие регистры ATmega2560

Калькуляторы и статьи