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

USART1 ATmega32U4: регистры и биты

Последовательный приёмопередатчик USART1: асинхронный UART, синхронный режим с тактом на выводе XCK1 и режим ведущего SPI (MSPIM). Скорость задают UBRR1 и бит U2X1, формат кадра — биты UCSZ, UPM и USBS, байты передаются и принимаются через UDR1.

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

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

РегистрАдресНазначениеПосле сброса
UCSR1A0xC8Состояние USART1, регистр A0x20
UCSR1B0xC9Управление USART1, регистр B0x00
UCSR1C0xCAФормат кадра USART1, регистр C0x06
UCSR1D0xCBУправление потоком USART1 (RTS и CTS)—
UBRR10xCCСкорость USART1—
UDR10xCEДанные USART10x00

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

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

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

Результат

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

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

UCSR1A = (1 << UDRE1);

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

ldi r16, 0x20
sts UCSR1A, r16

UCSR1A — состояние USART1, регистр A

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

Бит76543210
ИмяRXC1TXC1UDRE1FE1DOR1UPE1 / PE1U2X1MPCM1
ДоступRR/WRRRRR/WR/W
После сброса00100000
  • RXC1 (бит 7) — Приём завершён. Равен 1, пока в приёмном буфере есть непрочитанные данные; чтение UDR его сбрасывает.
  • TXC1 (бит 6) — Передача завершена. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • UDRE1 (бит 5) — Буфер передатчика пуст. 1 — в UDR можно записать следующий байт; после сброса равен 1.
  • FE1 (бит 4) — Ошибка кадра: нет стоп-бита.
  • DOR1 (бит 3) — Переполнение приёмника, символ потерян.
  • UPE1 (бит 2) — Ошибка чётности.
  • U2X1 (бит 1) — Удвоение скорости в асинхронном режиме.
  • MPCM1 (бит 0) — Многопроцессорный режим.

UCSR1B — управление USART1, регистр B

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

Бит76543210
ИмяRXCIE1TXCIE1UDRIE1RXEN1TXEN1UCSZ12RXB81TXB81
ДоступR/WR/WR/WR/WR/WR/WRR/W
После сброса00000000
  • RXCIE1 (бит 7) — Прерывание по завершению приёма.
  • TXCIE1 (бит 6) — Прерывание по завершению передачи.
  • UDRIE1 (бит 5) — Прерывание «буфер передатчика пуст».
  • RXEN1 (бит 4) — Приёмник включён.
  • TXEN1 (бит 3) — Передатчик включён.
  • UCSZ12 (бит 2) — Размер символа, старший бит.
  • RXB81 (бит 1) — Девятый бит принятого символа.
  • TXB81 (бит 0) — Девятый бит передаваемого символа.

UCSR1C — формат кадра USART1, регистр C

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

Бит76543210
ИмяUMSEL11UMSEL10UPM11UPM10USBS1UCSZ11UCSZ10UCPOL1
ДоступR/WR/WRRRR/WR/WR/W
После сброса00000110
  • UMSEL11:0 (биты 7:6) — Режим USART.
    UMSEL11:0Значение
    00Асинхронный (UART)
    01Синхронный (USRT)
    11Ведущий SPI (MSPIM)
  • UPM11:0 (биты 5:4) — Контроль чётности.
    UPM11:0Значение
    00Выключен
    01Зарезервировано
    10Чётный (even)
    11Нечётный (odd)
  • USBS1 (бит 3) — Число стоп-битов.
    USBS1Значение
    01 стоп-бит
    12 стоп-бита
  • UCSZ11:0 (биты 2:1) — Размер символа.
  • UCPOL1 (бит 0) — Полярность XCK в синхронном режиме.

UCSR1D — управление потоком USART1 (RTS и CTS)

Адрес 0xCB, 8 бит.

Бит76543210
Имя——————CTSENRTSEN
  • CTSEN (бит 1) — Управление потоком по CTS.
  • RTSEN (бит 0) — Управление потоком по RTS.

UBRR1 — скорость USART1

Адрес 0xCC, 16 бит: старший байт UBRR1H по адресу 0xCD, младший UBRR1L по 0xCC. UBRR1H записывают раньше UBRR1L: запись в UBRR1L сразу перезапускает делитель скорости.

UDR1 — данные USART1

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

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

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

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

UCSR1A, UCSR1B, UCSR1C, UCSR1D, UBRR1 и UDR1 лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

После сброса UCSR1A = 0x20 и UCSR1C = 0x06; остальные регистры блока обнулены. Значения — из диаграмм регистров в даташите 7766J.

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

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

Источники

  1. Microchip. Atmel. ATmega16U4/32U4 datasheet (7766J) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega32U4 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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