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

USB-контроллер ATmega32U4: регистры и биты

Контроллер USB-устройства полной скорости, 12 Мбит/с (бит LSM в UDCON переводит его на 1,5 Мбит/с): включение и состояние шины — USBCON, USBSTA, UDCON, прерывания шины — UDINT и UDIEN, адрес — UDADDR. Конечная точка выбирается номером в UENUM, а регистры UECONX, UECFG0X, UECFG1X, UESTA0X, UESTA1X, UEINTX, UEIENX и UEDATX работают с выбранной. Частоту 48 МГц даёт PLL.

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

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

РегистрАдресНазначениеПосле сброса
UHWCON0xD7Стабилизатор выводов USB0x00
USBCON0xD8Управление USB—
USBSTA0xD9Состояние USB—
USBINT0xDAФлаг прерывания по VBUS—
UDCON0xE0Управление USB-устройством0x01
UDINT0xE1Флаги прерываний USB-устройства0x00
UDIEN0xE2Разрешение прерываний USB-устройства0x00
UDADDR0xE3Адрес USB-устройства0x00
UDFNUM0xE4Номер кадра USB0x0000
UDMFN0xE6Ошибка номера кадра USB—
UEINTX0xE8Флаги прерываний выбранной конечной точки0x00
UENUM0xE9Номер выбранной конечной точки0x00
UERST0xEAСброс FIFO конечных точек0x00
UECONX0xEBУправление выбранной конечной точкой0x00
UECFG0X0xECКонфигурация конечной точки, регистр 00x00
UECFG1X0xEDКонфигурация конечной точки, регистр 10x00
UESTA0X0xEEСостояние конечной точки, регистр 00x00
UESTA1X0xEFСостояние конечной точки, регистр 10x00
UEIENX0xF0Разрешение прерываний выбранной конечной точки0x00
UEDATX0xF1Данные FIFO выбранной конечной точки0x00
UEBCLX0xF2Число байтов в банке конечной точки, младший байт0x00
UEBCHX0xF3Число байтов в банке конечной точки, старшие биты0x00
UEINT0xF4Прерывания конечных точек по номерам0x00

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

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

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

Результат

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

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

USBCON = 0;

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

ldi r16, 0x00
sts USBCON, r16

UHWCON — стабилизатор выводов USB

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

Бит76543210
Имя———————UVREGE
ДоступR/WR/WRR/WRRRR/W
После сброса00000000
  • UVREGE (бит 0) — Стабилизатор выводов USB включён.

USBCON — управление USB

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

Бит76543210
ИмяUSBE—FRZCLKOTGPADE———VBUSTE
  • USBE (бит 7) — Контроллер USB включён.
  • FRZCLK (бит 5) — Остановить тактирование USB.
  • OTGPADE (бит 4) — Вход VBUS включён.
  • VBUSTE (бит 0) — Прерывание по изменению VBUS.

USBSTA — состояние USB

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

Бит76543210
Имя——————IDVBUS
  • ID (бит 1) — Состояние ID, всегда 1.
  • VBUS (бит 0) — Уровень VBUS: устройство подключено к шине.

USBINT — флаг прерывания по VBUS

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

Бит76543210
Имя———————VBUSTI
  • VBUSTI (бит 0) — Флаг изменения VBUS.

UDCON — управление USB-устройством

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

Бит76543210
Имя————RSTCPULSMRMWKUPDETACH
ДоступRRRRRR/WR/WR/W
После сброса00000001
  • RSTCPU (бит 3) — Сброс ядра по концу сброса шины USB.
  • LSM (бит 2) — Низкоскоростной режим USB (1,5 Мбит/с).
  • RMWKUP (бит 1) — Разбудить хост (remote wake-up).
  • DETACH (бит 0) — Отключиться от шины.

UDINT — флаги прерываний USB-устройства

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

Бит76543210
Имя—UPRSMIEORSMIWAKEUPIEORSTISOFI—SUSPI
После сброса00000000
  • UPRSMI (бит 6) — Флаг: хост возобновил работу шины.
  • EORSMI (бит 5) — Флаг: конец возобновления.
  • WAKEUPI (бит 4) — Флаг: активность на шине при остановленном тактировании.
  • EORSTI (бит 3) — Флаг: конец сброса шины.
  • SOFI (бит 2) — Флаг: начало кадра (SOF).
  • SUSPI (бит 0) — Флаг: шина приостановлена.

UDIEN — разрешение прерываний USB-устройства

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

Бит76543210
Имя—UPRSMEEORSMEWAKEUPEEORSTESOFE—SUSPE
После сброса00000000
  • UPRSME (бит 6) — Прерывание: хост возобновил работу шины.
  • EORSME (бит 5) — Прерывание: конец возобновления.
  • WAKEUPE (бит 4) — Прерывание: активность на шине при остановленном тактировании.
  • EORSTE (бит 3) — Прерывание: конец сброса шины.
  • SOFE (бит 2) — Прерывание: начало кадра (SOF).
  • SUSPE (бит 0) — Прерывание: шина приостановлена.

UDADDR — адрес USB-устройства

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

Бит76543210
ИмяADDENUADD6UADD5UADD4UADD3UADD2UADD1UADD0
ДоступWR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • ADDEN (бит 7) — Включить адрес устройства.
  • UADD6:0 (биты 6:0) — Адрес устройства.

UDFNUM — номер кадра USB

Адрес 0xE4, 16 бит: старший байт UDFNUMH по адресу 0xE5, младший UDFNUML по 0xE4, после сброса 0x0000.

UDMFN — ошибка номера кадра USB

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

Бит76543210
Имя———FNCERR————
  • FNCERR (бит 4) — Ошибка CRC номера кадра.

UEINTX — флаги прерываний выбранной конечной точки

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

Бит76543210
ИмяFIFOCONNAKINIRWALNAKOUTIRXSTPIRXOUTISTALLEDITXINI
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • FIFOCON (бит 7) — Управление FIFO: освободить или переключить банк.
  • NAKINI (бит 6) — Флаг: на IN отправлен NAK.
  • RWAL (бит 5) — Чтение или запись в банк разрешены.
  • NAKOUTI (бит 4) — Флаг: на OUT отправлен NAK.
  • RXSTPI (бит 3) — Флаг: принят пакет SETUP.
  • RXOUTI (бит 2) — Флаг: принят пакет OUT.
  • STALLEDI (бит 1) — Флаг: отправлен STALL.
  • TXINI (бит 0) — Флаг: банк IN свободен для записи.

UENUM — номер выбранной конечной точки

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

Бит76543210
Имя—————EPNUM2EPNUM1EPNUM0
ДоступRRRRRR/WR/WR/W
После сброса00000000

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

UERST — сброс FIFO конечных точек

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

Бит76543210
Имя—EPRST6EPRST5EPRST4EPRST3EPRST2EPRST1EPRST0
ДоступRR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • EPRST6:0 (биты 6:0) — Сброс FIFO конечных точек 6…0.

UECONX — управление выбранной конечной точкой

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

Бит76543210
Имя——STALLRQSTALLRQCRSTDT——EPEN
ДоступRRWWWRRR/W
После сброса00000000
  • STALLRQ (бит 5) — Отвечать STALL.
  • STALLRQC (бит 4) — Отменить ответ STALL.
  • RSTDT (бит 3) — Сбросить переключатель данных в DATA0.
  • EPEN (бит 0) — Конечная точка включена.

UECFG0X — конфигурация конечной точки, регистр 0

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

Бит76543210
ИмяEPTYPE1EPTYPE0—————EPDIR
ДоступR/WR/WRRRRRR/W
После сброса00000000
  • EPTYPE1:0 (биты 7:6) — Тип конечной точки.
  • EPDIR (бит 0) — Направление: 1 — IN.

UECFG1X — конфигурация конечной точки, регистр 1

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

Бит76543210
Имя—EPSIZE2EPSIZE1EPSIZE0EPBK1EPBK0ALLOC—
ДоступRR/WR/WR/WR/WR/WR/WR
После сброса00000000
  • EPSIZE2:0 (биты 6:4) — Размер банка конечной точки.
  • EPBK1:0 (биты 3:2) — Число банков.
  • ALLOC (бит 1) — Выделить память конечной точке.

UESTA0X — состояние конечной точки, регистр 0

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

Бит76543210
ИмяCFGOKOVERFIUNDERFI—DTSEQ1DTSEQ0NBUSYBK1NBUSYBK0
ДоступRR/WR/WR/WRRRR
После сброса00000000
  • CFGOK (бит 7) — Конфигурация конечной точки принята.
  • OVERFI (бит 6) — Флаг переполнения (изохронная конечная точка).
  • UNDERFI (бит 5) — Флаг недогрузки (изохронная конечная точка).
  • DTSEQ1:0 (биты 3:2) — Переключатель данных текущего банка (DATA0 или DATA1).
  • NBUSYBK1:0 (биты 1:0) — Число занятых банков.

UESTA1X — состояние конечной точки, регистр 1

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

Бит76543210
Имя—————CTRLDIRCURRBK1CURRBK0
ДоступRRRRRRRR
После сброса00000000
  • CTRLDIR (бит 2) — Направление управляющей передачи.
  • CURRBK1:0 (биты 1:0) — Текущий банк.

UEIENX — разрешение прерываний выбранной конечной точки

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

Бит76543210
ИмяFLERRENAKINE—NAKOUTERXSTPERXOUTESTALLEDETXINE
ДоступR/WR/WRR/WR/WR/WR/WR/W
После сброса00000000
  • FLERRE (бит 7) — Прерывание по переполнению или недогрузке банка.
  • NAKINE (бит 6) — Прерывание: на IN отправлен NAK.
  • NAKOUTE (бит 4) — Прерывание: на OUT отправлен NAK.
  • RXSTPE (бит 3) — Прерывание: принят пакет SETUP.
  • RXOUTE (бит 2) — Прерывание: принят пакет OUT.
  • STALLEDE (бит 1) — Прерывание: отправлен STALL.
  • TXINE (бит 0) — Прерывание: банк IN свободен для записи.

UEDATX — данные FIFO выбранной конечной точки

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

Бит76543210
ИмяDAT7DAT6DAT5DAT4DAT3DAT2DAT1DAT0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • DAT7:0 (биты 7:0) — Байт FIFO конечной точки.

UEBCLX — число байтов в банке конечной точки, младший байт

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

Бит76543210
ИмяBYCT7BYCT6BYCT5BYCT4BYCT3BYCT2BYCT1BYCT0
ДоступRRRRRRRR
После сброса00000000

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

UEBCHX — число байтов в банке конечной точки, старшие биты

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

Бит76543210
Имя—————BYCT10BYCT9BYCT8
ДоступRRRRRRRR
После сброса00000000

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

UEINT — прерывания конечных точек по номерам

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

Бит76543210
Имя—EPINT6EPINT5EPINT4EPINT3EPINT2EPINT1EPINT0
ДоступRRRRRRRR
После сброса00000000

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

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

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

UHWCON, USBCON, USBSTA, USBINT, UDCON, UDINT, UDIEN, UDADDR, UDFNUM, UDMFN, UEINTX, UENUM, UERST, UECONX, UECFG0X, UECFG1X, UESTA0X, UESTA1X, UEIENX, UEDATX, UEBCLX, UEBCHX и UEINT лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

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

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

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

Источники

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

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

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

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