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

USART ATmega16A: регистры и биты

Последовательный приёмопередатчик USART: асинхронный UART и синхронный режим с тактом на выводе XCK. Скорость задают UBRRH:UBRRL и бит U2X, формат кадра — биты UCSZ, UPM и USBS, байты передаются и принимаются через UDR. UBRRH и UCSRC делят один адрес: какой из них записывается, выбирает бит URSEL.

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

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

РегистрАдресНазначениеПосле сброса
UBRRL0x29 (I/O 0x09)Скорость USART, младший байт0x00
UCSRB0x2A (I/O 0x0A)Управление USARTundefined, регистр B0x00
UCSRA0x2B (I/O 0x0B)Состояние USARTundefined, регистр A0x20
UDR0x2C (I/O 0x0C)Данные USARTundefined0x00
UCSRC0x40 (I/O 0x20)Формат кадра USARTundefined, регистр C0x86
UBRRH0x40 (I/O 0x20)Скорость USART, старшие биты0x00

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

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

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

Результат

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

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

UCSRB = 0;

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

ldi r16, 0x00
out UCSRB, r16

UBRRL — скорость USART, младший байт

Адрес 0x29 (I/O 0x09), 8 бит, после сброса 0x00.

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

UCSRB — управление USARTundefined, регистр B

Адрес 0x2A (I/O 0x0A), 8 бит, после сброса 0x00.

Бит76543210
ИмяRXCIETXCIEUDRIERXENTXENUCSZ2RXB8TXB8
ДоступR/WR/WR/WR/WR/WR/WRR/W
После сброса00000000
  • RXCIE (бит 7) — Прерывание по завершению приёма.
  • TXCIE (бит 6) — Прерывание по завершению передачи.
  • UDRIE (бит 5) — Прерывание «буфер передатчика пуст».
  • RXEN (бит 4) — Приёмник включён.
  • TXEN (бит 3) — Передатчик включён.
  • UCSZ2 (бит 2) — Размер символа, старший бит.
  • RXB8 (бит 1) — Девятый бит принятого символа.
  • TXB8 (бит 0) — Девятый бит передаваемого символа.

UCSRA — состояние USARTundefined, регистр A

Адрес 0x2B (I/O 0x0B), 8 бит, после сброса 0x20.

Бит76543210
ИмяRXCTXCUDREFEDORUPE / PEU2XMPCM
ДоступRR/WRRRRR/WR/W
После сброса00100000
  • RXC (бит 7) — Приём завершён. Равен 1, пока в приёмном буфере есть непрочитанные данные; чтение UDR его сбрасывает.
  • TXC (бит 6) — Передача завершена. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • UDRE (бит 5) — Буфер передатчика пуст. 1 — в UDR можно записать следующий байт; после сброса равен 1.
  • FE (бит 4) — Ошибка кадра: нет стоп-бита.
  • DOR (бит 3) — Переполнение приёмника, символ потерян.
  • UPE (бит 2) — Ошибка чётности.
  • U2X (бит 1) — Удвоение скорости в асинхронном режиме.
  • MPCM (бит 0) — Многопроцессорный режим.

UDR — данные USARTundefined

Адрес 0x2C (I/O 0x0C), 8 бит, после сброса 0x00.

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

UCSRC — формат кадра USARTundefined, регистр C

Адрес 0x40 (I/O 0x20), 8 бит, после сброса 0x86.

Бит76543210
ИмяURSELUMSELUPM1UPM0USBSUCSZ1UCSZ0UCPOL
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса10000110
  • URSEL (бит 7) — Выбор регистра по общему адресу: 1 — UCSRC, 0 — UBRRH.
  • UMSEL (бит 6) — Режим USART.
    UMSELЗначение
    0Асинхронный (UART)
    1Синхронный (USRT)
  • UPM1:0 (биты 5:4) — Контроль чётности.
    UPM1:0Значение
    00Выключен
    01Зарезервировано
    10Чётный (even)
    11Нечётный (odd)
  • USBS (бит 3) — Число стоп-битов.
    USBSЗначение
    01 стоп-бит
    12 стоп-бита
  • UCSZ1:0 (биты 2:1) — Размер символа.
  • UCPOL (бит 0) — Полярность XCK в синхронном режиме.

UBRRH — скорость USART, старшие биты

Адрес 0x40 (I/O 0x20), 8 бит, после сброса 0x00.

Бит76543210
ИмяURSEL———UBRR11UBRR10UBRR9UBRR8
ДоступR/WRRRR/WR/WR/WR/W
После сброса00000000
  • URSEL (бит 7) — Выбор регистра по общему адресу: 1 — UCSRC, 0 — UBRRH.
  • UBRR11:8 (биты 3:0) — Старшие биты делителя скорости (UBRR11:8).

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

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

Командами IN и OUT доступны UBRRL (0x09), UCSRB (0x0A), UCSRA (0x0B), UDR (0x0C), UCSRC (0x20) и UBRRH (0x20); из них UBRRL, UCSRB, UCSRA и UDR — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

После сброса UCSRA = 0x20 и UCSRC = 0x86; остальные регистры блока обнулены. Значения — из диаграмм регистров в даташите 8154C.

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

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

Источники

  1. Microchip. Atmel. ATmega16A datasheet (8154C) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega16A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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