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

USART0–USART3 ATmega2560: регистры и биты

USART0–USART3 ATmega2560 устроены одинаково, поэтому их регистры ниже названы с n вместо номера, а адреса даны для каждого. Последовательный приёмопередатчик USARTn: асинхронный UART, синхронный режим с тактом на выводе XCKn и режим ведущего SPI (MSPIM). Скорость задают UBRRn и бит U2Xn, формат кадра — биты UCSZ, UPM и USBS, байты передаются и принимаются через UDRn.

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

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

РегистрАдресНазначениеПосле сброса
UCSRnA0: 0xC0, 1: 0xC8, 2: 0xD0, 3: 0x130Состояние USARTn, регистр A0x20
UCSRnB0: 0xC1, 1: 0xC9, 2: 0xD1, 3: 0x131Управление USARTn, регистр B0x00
UCSRnC0: 0xC2, 1: 0xCA, 2: 0xD2, 3: 0x132Формат кадра USARTn, регистр C0x06
UBRRn0: 0xC4, 1: 0xCC, 2: 0xD4, 3: 0x134Скорость USARTn—
UDRn0: 0xC6, 1: 0xCE, 2: 0xD6, 3: 0x136Данные USARTn0x00

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

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

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

Результат

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

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

UCSR0A = (1 << UDRE0);

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

ldi r16, 0x20
sts UCSR0A, r16

UCSRnA — состояние USARTn, регистр A

Адреса 0xC0 — UCSR0A, 0xC8 — UCSR1A, 0xD0 — UCSR2A, 0x130 — UCSR3A, 8 бит, после сброса 0x20.

Бит76543210
ИмяRXCnTXCnUDREnFEnDORnUPEnU2XnMPCMn
ДоступRR/WRRRRR/WR/W
После сброса00100000
  • RXCn (бит 7) — Приём завершён. Равен 1, пока в приёмном буфере есть непрочитанные данные; чтение UDR его сбрасывает.
  • TXCn (бит 6) — Передача завершена. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • UDREn (бит 5) — Буфер передатчика пуст. 1 — в UDR можно записать следующий байт; после сброса равен 1.
  • FEn (бит 4) — Ошибка кадра: нет стоп-бита.
  • DORn (бит 3) — Переполнение приёмника, символ потерян.
  • UPEn (бит 2) — Ошибка чётности.
  • U2Xn (бит 1) — Удвоение скорости в асинхронном режиме.
  • MPCMn (бит 0) — Многопроцессорный режим.

UCSRnB — управление USARTn, регистр B

Адреса 0xC1 — UCSR0B, 0xC9 — UCSR1B, 0xD1 — UCSR2B, 0x131 — UCSR3B, 8 бит, после сброса 0x00.

Бит76543210
ИмяRXCIEnTXCIEnUDRIEnRXENnTXENnUCSZn2RXB8nTXB8n
ДоступR/WR/WR/WR/WR/WR/WRR/W
После сброса00000000
  • RXCIEn (бит 7) — Прерывание по завершению приёма.
  • TXCIEn (бит 6) — Прерывание по завершению передачи.
  • UDRIEn (бит 5) — Прерывание «буфер передатчика пуст».
  • RXENn (бит 4) — Приёмник включён.
  • TXENn (бит 3) — Передатчик включён.
  • UCSZn2 (бит 2) — Размер символа, старший бит.
  • RXB8n (бит 1) — Девятый бит принятого символа.
  • TXB8n (бит 0) — Девятый бит передаваемого символа.

UCSRnC — формат кадра USARTn, регистр C

Адреса 0xC2 — UCSR0C, 0xCA — UCSR1C, 0xD2 — UCSR2C, 0x132 — UCSR3C, 8 бит, после сброса 0x06.

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

UBRRn — скорость USARTn

Адреса 0xC4 — UBRR0, 0xCC — UBRR1, 0xD4 — UBRR2, 0x134 — UBRR3, 16 бит: старший байт UBRRnH по адресу 0xC5, младший UBRRnL по 0xC4. UBRRnH записывают раньше UBRRnL: запись в UBRRnL сразу перезапускает делитель скорости.

UDRn — данные USARTn

Адреса 0xC6 — UDR0, 0xCE — UDR1, 0xD6 — UDR2, 0x136 — UDR3, 8 бит, после сброса 0x00.

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

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

Какими командами ассемблера обращаться к регистрам USART0/1/2/3 ATmega2560?

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

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

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

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

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

Источники

  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

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