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

USART0 ATmega328P: регистры и биты

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

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

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

РегистрАдресНазначениеПосле сброса
UCSR0A0xC0Состояние USART0, регистр A0x20
UCSR0B0xC1Управление USART0, регистр B0x00
UCSR0C0xC2Формат кадра USART0, регистр C0x06
UBRR00xC4Скорость USART00x0000
UDR00xC6Данные USART00x00

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

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

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

Результат

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

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

UCSR0A = (1 << UDRE0);

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

ldi r16, 0x20
sts UCSR0A, r16

UCSR0A — состояние USART0, регистр A

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

Бит76543210
ИмяRXC0TXC0UDRE0FE0DOR0UPE0U2X0MPCM0
ДоступRR/WRRRRR/WR/W
После сброса00100000
  • RXC0 (бит 7) — Приём завершён. Равен 1, пока в приёмном буфере есть непрочитанные данные; чтение UDR его сбрасывает.
  • TXC0 (бит 6) — Передача завершена. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • UDRE0 (бит 5) — Буфер передатчика пуст. 1 — в UDR можно записать следующий байт; после сброса равен 1.
  • FE0 (бит 4) — Ошибка кадра: нет стоп-бита.
  • DOR0 (бит 3) — Переполнение приёмника, символ потерян.
  • UPE0 (бит 2) — Ошибка чётности.
  • U2X0 (бит 1) — Удвоение скорости в асинхронном режиме.
  • MPCM0 (бит 0) — Многопроцессорный режим.

UCSR0B — управление USART0, регистр B

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

Бит76543210
ИмяRXCIE0TXCIE0UDRIE0RXEN0TXEN0UCSZ02RXB80TXB80
ДоступR/WR/WR/WR/WR/WR/WRR/W
После сброса00000000
  • RXCIE0 (бит 7) — Прерывание по завершению приёма.
  • TXCIE0 (бит 6) — Прерывание по завершению передачи.
  • UDRIE0 (бит 5) — Прерывание «буфер передатчика пуст».
  • RXEN0 (бит 4) — Приёмник включён.
  • TXEN0 (бит 3) — Передатчик включён.
  • UCSZ02 (бит 2) — Размер символа, старший бит.
  • RXB80 (бит 1) — Девятый бит принятого символа.
  • TXB80 (бит 0) — Девятый бит передаваемого символа.

UCSR0C — формат кадра USART0, регистр C

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

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

UBRR0 — скорость USART0

Адрес 0xC4, 16 бит: старший байт UBRR0H по адресу 0xC5, младший UBRR0L по 0xC4, после сброса 0x0000. UBRR0H записывают раньше UBRR0L: запись в UBRR0L сразу перезапускает делитель скорости.

UDR0 — данные USART0

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

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

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

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

UCSR0A, UCSR0B, UCSR0C, UBRR0 и UDR0 лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

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

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

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

Источники

  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

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

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

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