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.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| UHWCON | 0xD7 | Стабилизатор выводов USB | 0x00 |
| USBCON | 0xD8 | Управление USB | — |
| USBSTA | 0xD9 | Состояние USB | — |
| USBINT | 0xDA | Флаг прерывания по VBUS | — |
| UDCON | 0xE0 | Управление USB-устройством | 0x01 |
| UDINT | 0xE1 | Флаги прерываний USB-устройства | 0x00 |
| UDIEN | 0xE2 | Разрешение прерываний USB-устройства | 0x00 |
| UDADDR | 0xE3 | Адрес USB-устройства | 0x00 |
| UDFNUM | 0xE4 | Номер кадра USB | 0x0000 |
| UDMFN | 0xE6 | Ошибка номера кадра USB | — |
| UEINTX | 0xE8 | Флаги прерываний выбранной конечной точки | 0x00 |
| UENUM | 0xE9 | Номер выбранной конечной точки | 0x00 |
| UERST | 0xEA | Сброс FIFO конечных точек | 0x00 |
| UECONX | 0xEB | Управление выбранной конечной точкой | 0x00 |
| UECFG0X | 0xEC | Конфигурация конечной точки, регистр 0 | 0x00 |
| UECFG1X | 0xED | Конфигурация конечной точки, регистр 1 | 0x00 |
| UESTA0X | 0xEE | Состояние конечной точки, регистр 0 | 0x00 |
| UESTA1X | 0xEF | Состояние конечной точки, регистр 1 | 0x00 |
| UEIENX | 0xF0 | Разрешение прерываний выбранной конечной точки | 0x00 |
| UEDATX | 0xF1 | Данные FIFO выбранной конечной точки | 0x00 |
| UEBCLX | 0xF2 | Число байтов в банке конечной точки, младший байт | 0x00 |
| UEBCHX | 0xF3 | Число байтов в банке конечной точки, старшие биты | 0x00 |
| UEINT | 0xF4 | Прерывания конечных точек по номерам | 0x00 |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
USBCON = 0;Ассемблер Microchip (m32u4def.inc)
ldi r16, 0x00
sts USBCON, r16UHWCON — стабилизатор выводов USB
Адрес 0xD7, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | — | UVREGE |
| Доступ | R/W | R/W | R | R/W | R | R | R | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- UVREGE (бит 0) — Стабилизатор выводов USB включён.
USBCON — управление USB
Адрес 0xD8, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | USBE | — | FRZCLK | OTGPADE | — | — | — | VBUSTE |
- USBE (бит 7) — Контроллер USB включён.
- FRZCLK (бит 5) — Остановить тактирование USB.
- OTGPADE (бит 4) — Вход VBUS включён.
- VBUSTE (бит 0) — Прерывание по изменению VBUS.
USBSTA — состояние USB
Адрес 0xD9, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | ID | VBUS |
- ID (бит 1) — Состояние ID, всегда 1.
- VBUS (бит 0) — Уровень VBUS: устройство подключено к шине.
USBINT — флаг прерывания по VBUS
Адрес 0xDA, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | — | VBUSTI |
- VBUSTI (бит 0) — Флаг изменения VBUS.
UDCON — управление USB-устройством
Адрес 0xE0, 8 бит, после сброса 0x01.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | RSTCPU | LSM | RMWKUP | DETACH |
| Доступ | R | R | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
- RSTCPU (бит 3) — Сброс ядра по концу сброса шины USB.
- LSM (бит 2) — Низкоскоростной режим USB (1,5 Мбит/с).
- RMWKUP (бит 1) — Разбудить хост (remote wake-up).
- DETACH (бит 0) — Отключиться от шины.
UDINT — флаги прерываний USB-устройства
Адрес 0xE1, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | UPRSMI | EORSMI | WAKEUPI | EORSTI | SOFI | — | SUSPI |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- UPRSMI (бит 6) — Флаг: хост возобновил работу шины.
- EORSMI (бит 5) — Флаг: конец возобновления.
- WAKEUPI (бит 4) — Флаг: активность на шине при остановленном тактировании.
- EORSTI (бит 3) — Флаг: конец сброса шины.
- SOFI (бит 2) — Флаг: начало кадра (SOF).
- SUSPI (бит 0) — Флаг: шина приостановлена.
UDIEN — разрешение прерываний USB-устройства
Адрес 0xE2, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | UPRSME | EORSME | WAKEUPE | EORSTE | SOFE | — | SUSPE |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- UPRSME (бит 6) — Прерывание: хост возобновил работу шины.
- EORSME (бит 5) — Прерывание: конец возобновления.
- WAKEUPE (бит 4) — Прерывание: активность на шине при остановленном тактировании.
- EORSTE (бит 3) — Прерывание: конец сброса шины.
- SOFE (бит 2) — Прерывание: начало кадра (SOF).
- SUSPE (бит 0) — Прерывание: шина приостановлена.
UDADDR — адрес USB-устройства
Адрес 0xE3, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | ADDEN | UADD6 | UADD5 | UADD4 | UADD3 | UADD2 | UADD1 | UADD0 |
| Доступ | W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- ADDEN (бит 7) — Включить адрес устройства.
- UADD6:0 (биты 6:0) — Адрес устройства.
UDFNUM — номер кадра USB
Адрес 0xE4, 16 бит: старший байт UDFNUMH по адресу 0xE5, младший UDFNUML по 0xE4, после сброса 0x0000.
UDMFN — ошибка номера кадра USB
Адрес 0xE6, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | FNCERR | — | — | — | — |
- FNCERR (бит 4) — Ошибка CRC номера кадра.
UEINTX — флаги прерываний выбранной конечной точки
Адрес 0xE8, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | FIFOCON | NAKINI | RWAL | NAKOUTI | RXSTPI | RXOUTI | STALLEDI | TXINI |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | EPNUM2 | EPNUM1 | EPNUM0 |
| Доступ | R | R | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
UERST — сброс FIFO конечных точек
Адрес 0xEA, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | EPRST6 | EPRST5 | EPRST4 | EPRST3 | EPRST2 | EPRST1 | EPRST0 |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- EPRST6:0 (биты 6:0) — Сброс FIFO конечных точек 6…0.
UECONX — управление выбранной конечной точкой
Адрес 0xEB, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | STALLRQ | STALLRQC | RSTDT | — | — | EPEN |
| Доступ | R | R | W | W | W | R | R | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- STALLRQ (бит 5) — Отвечать STALL.
- STALLRQC (бит 4) — Отменить ответ STALL.
- RSTDT (бит 3) — Сбросить переключатель данных в DATA0.
- EPEN (бит 0) — Конечная точка включена.
UECFG0X — конфигурация конечной точки, регистр 0
Адрес 0xEC, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | EPTYPE1 | EPTYPE0 | — | — | — | — | — | EPDIR |
| Доступ | R/W | R/W | R | R | R | R | R | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- EPTYPE1:0 (биты 7:6) — Тип конечной точки.
- EPDIR (бит 0) — Направление: 1 — IN.
UECFG1X — конфигурация конечной точки, регистр 1
Адрес 0xED, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | EPSIZE2 | EPSIZE1 | EPSIZE0 | EPBK1 | EPBK0 | ALLOC | — |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- EPSIZE2:0 (биты 6:4) — Размер банка конечной точки.
- EPBK1:0 (биты 3:2) — Число банков.
- ALLOC (бит 1) — Выделить память конечной точке.
UESTA0X — состояние конечной точки, регистр 0
Адрес 0xEE, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | CFGOK | OVERFI | UNDERFI | — | DTSEQ1 | DTSEQ0 | NBUSYBK1 | NBUSYBK0 |
| Доступ | R | R/W | R/W | R/W | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- CFGOK (бит 7) — Конфигурация конечной точки принята.
- OVERFI (бит 6) — Флаг переполнения (изохронная конечная точка).
- UNDERFI (бит 5) — Флаг недогрузки (изохронная конечная точка).
- DTSEQ1:0 (биты 3:2) — Переключатель данных текущего банка (DATA0 или DATA1).
- NBUSYBK1:0 (биты 1:0) — Число занятых банков.
UESTA1X — состояние конечной точки, регистр 1
Адрес 0xEF, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | CTRLDIR | CURRBK1 | CURRBK0 |
| Доступ | R | R | R | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- CTRLDIR (бит 2) — Направление управляющей передачи.
- CURRBK1:0 (биты 1:0) — Текущий банк.
UEIENX — разрешение прерываний выбранной конечной точки
Адрес 0xF0, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | FLERRE | NAKINE | — | NAKOUTE | RXSTPE | RXOUTE | STALLEDE | TXINE |
| Доступ | R/W | R/W | R | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | DAT7 | DAT6 | DAT5 | DAT4 | DAT3 | DAT2 | DAT1 | DAT0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- DAT7:0 (биты 7:0) — Байт FIFO конечной точки.
UEBCLX — число байтов в банке конечной точки, младший байт
Адрес 0xF2, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | BYCT7 | BYCT6 | BYCT5 | BYCT4 | BYCT3 | BYCT2 | BYCT1 | BYCT0 |
| Доступ | R | R | R | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
UEBCHX — число байтов в банке конечной точки, старшие биты
Адрес 0xF3, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | BYCT10 | BYCT9 | BYCT8 |
| Доступ | R | R | R | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
UEINT — прерывания конечных точек по номерам
Адрес 0xF4, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | EPINT6 | EPINT5 | EPINT4 | EPINT3 | EPINT2 | EPINT1 | EPINT0 |
| Доступ | R | R | R | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
Частые вопросы
Какими командами ассемблера обращаться к регистрам 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); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATmega16U4/32U4 datasheet (7766J) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega32U4 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega32U4
- Все регистры ATmega32U4Таблица по адресам
- Порты ввода-выводаPINB, DDRB, PORTB, PINC, DDRC, PORTC
- SPISPCR, SPSR, SPDR
- USART1UCSR1A, UCSR1B, UCSR1C, UCSR1D, UBRR1, UDR1
- EEPROMEECR, EEDR, EEAR
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Таймер-счётчик 1 (16 бит)TIFR1, TIMSK1, TCCR1A, TCCR1B, TCCR1C, TCNT1
- Таймер-счётчик 3 (16 бит)TIFR3, TIMSK3, TCCR3A, TCCR3B, TCCR3C, TCNT3
- Таймер-счётчик 4 (10 бит, быстрый)TIFR4, TIMSK4, TCNT4, TC4H, TCCR4A, TCCR4B
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, EICRB
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR2, DIDR0
- Аналоговый компараторACSR, ADCSRB, DIDR1
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, OCDR, SMCR, MCUSR
- PLLPLLCSR, PLLFRQ